diff --git a/.lgtm.yml b/.lgtm.yml index 2f2a31f292..e5a62fd04b 100644 --- a/.lgtm.yml +++ b/.lgtm.yml @@ -4,7 +4,7 @@ extraction: command: - "mkdir build" - "cd build" - - "cmake -G Ninja -C ../cmake/presets/minimal.cmake ../cmake" + - "cmake -G Ninja -C ../cmake/presets/most.cmake ../cmake" index: build_command: - "cd build" diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index aa6b0ed583..c6dafe902a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -142,9 +142,9 @@ set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR KSPACE LATTE MANYBODY MC MESSAGE MISC MLIAP MOLECULE PERI POEMS PLUGIN QEQ REPLICA RIGID SHOCK SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-MESODPD USER-CGSDK - USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD - USER-HDNNP USER-LB USER-MANIFOLD USER-MDI USER-MEAMC USER-MESONT USER-MGPT USER-MISC - USER-MOFFF USER-MOLFILE USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB + USER-COLVARS USER-DIELECTRIC USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP + USER-H5MD USER-HDNNP USER-LB USER-MANIFOLD USER-MDI USER-MEAMC USER-MESONT USER-MGPT + USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-RANN USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM USER-YAFF USER-PACE USER-BROWNIAN) @@ -235,6 +235,7 @@ pkg_depends(USER-ATC MANYBODY) pkg_depends(USER-LB MPI) pkg_depends(USER-PHONON KSPACE) pkg_depends(USER-SCAFACOS MPI) +pkg_depends(USER-DIELECTRIC KSPACE) # detect if we may enable OpenMP support by default set(BUILD_OMP_DEFAULT OFF) @@ -348,8 +349,8 @@ else() set(CUDA_REQUEST_PIC) endif() -foreach(PKG_WITH_INCL KSPACE PYTHON MLIAP VORONOI USER-COLVARS USER-HDNNP USER-MDI USER-MOLFILE USER-NETCDF USER-PLUMED - USER-QMMM USER-QUIP USER-SCAFACOS USER-SMD USER-VTK KIM LATTE MESSAGE MSCG COMPRESS USER-PACE) +foreach(PKG_WITH_INCL KSPACE PYTHON MLIAP VORONOI USER-COLVARS USER-HDNNP USER-MDI USER-MOLFILE USER-NETCDF + USER-PLUMED USER-QMMM USER-QUIP USER-SCAFACOS USER-SMD USER-VTK KIM LATTE MESSAGE MSCG COMPRESS USER-PACE) if(PKG_${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL}) endif() diff --git a/cmake/Modules/Packages/QEQ.cmake b/cmake/Modules/Packages/QEQ.cmake index 1bdaa02f43..041d34cf9d 100644 --- a/cmake/Modules/Packages/QEQ.cmake +++ b/cmake/Modules/Packages/QEQ.cmake @@ -1,18 +1,13 @@ # Fix qeq/fire requires MANYBODY (i.e. COMB and COMB3) to be installed set(QEQ_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/QEQ) -file(GLOB QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix*.h) -file(GLOB QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix*.cpp) +get_property(hlist GLOBAL PROPERTY FIX) if(NOT PKG_MANYBODY) - list(REMOVE_ITEM QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix_qeq_fire.h) - list(REMOVE_ITEM QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix_qeq_fire.cpp) + list(REMOVE_ITEM hlist ${QEQ_SOURCES_DIR}/fix_qeq_fire.h) + get_target_property(LAMMPS_SOURCES lammps SOURCES) + list(REMOVE_ITEM LAMMPS_SOURCES ${QEQ_SOURCES_DIR}/fix_qeq_fire.cpp) + set_property(TARGET lammps PROPERTY SOURCES ${LAMMPS_SOURCES}) endif() -set_property(GLOBAL PROPERTY "QEQ_SOURCES" "${QEQ_SOURCES}") +set_property(GLOBAL PROPERTY FIX "${hlist}") -foreach(MY_HEADER ${QEQ_HEADERS}) - AddStyleHeader(${MY_HEADER} FIX) -endforeach() - -get_property(QEQ_SOURCES GLOBAL PROPERTY QEQ_SOURCES) -target_sources(lammps PRIVATE ${QEQ_SOURCES}) target_include_directories(lammps PRIVATE ${QEQ_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/USER-HDNNP.cmake b/cmake/Modules/Packages/USER-HDNNP.cmake index 41d066a235..02b343e42f 100644 --- a/cmake/Modules/Packages/USER-HDNNP.cmake +++ b/cmake/Modules/Packages/USER-HDNNP.cmake @@ -55,6 +55,9 @@ if(DOWNLOAD_N2P2) endif() endif() + # prefer GNU make, if available. N2P2 lib seems to need it. + find_program(N2P2_MAKE NAMES gmake make) + # override compiler (optimization) flags in n2p2 library to flags used for LAMMPS # specifically -march=native can result in problems when compiling on HPC clusters or with a cross compiler # this convoluted way gets correct quoting/escaping when configuring the external project @@ -74,7 +77,7 @@ if(DOWNLOAD_N2P2) UPDATE_COMMAND "" CONFIGURE_COMMAND "" PATCH_COMMAND sed -i -e "s/\\(MPI_\\(P\\|Unp\\)ack(\\)/\\1(void *) /" src/libnnpif/LAMMPS/InterfaceLammps.cpp - BUILD_COMMAND make -f makefile libnnpif ${N2P2_BUILD_OPTIONS} + BUILD_COMMAND ${N2P2_MAKE} -f makefile libnnpif ${N2P2_BUILD_OPTIONS} BUILD_ALWAYS YES INSTALL_COMMAND "" BUILD_IN_SOURCE 1 diff --git a/cmake/Modules/Packages/USER-PLUMED.cmake b/cmake/Modules/Packages/USER-PLUMED.cmake index e71542cfc5..e9eba779f5 100644 --- a/cmake/Modules/Packages/USER-PLUMED.cmake +++ b/cmake/Modules/Packages/USER-PLUMED.cmake @@ -72,6 +72,7 @@ if(DOWNLOAD_PLUMED) ${PLUMED_CONFIG_OMP} CXX=${PLUMED_CONFIG_CXX} CC=${PLUMED_CONFIG_CC} + PATCH_COMMAND sed -i "/^#include /a #include " /src/lepton/Operation.h BUILD_BYPRODUCTS ${PLUMED_BUILD_BYPRODUCTS} ) ExternalProject_get_property(plumed_build INSTALL_DIR) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index c56841f62f..457750c690 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -11,7 +11,7 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PACE USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP USER-RANN USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH - USER-TALLY USER-UEF USER-VTK USER-YAFF) + USER-TALLY USER-UEF USER-VTK USER-YAFF USER-DIELECTRIC) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} OFF CACHE BOOL "" FORCE) diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 9f858f99dc..ae40bb0809 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -13,7 +13,7 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP USER-PACE USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP USER-RANN USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH - USER-TALLY USER-UEF USER-VTK USER-YAFF) + USER-TALLY USER-UEF USER-VTK USER-YAFF USER-DIELECTRIC) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index c2101d1d9a..e1a6c5cf79 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -7,7 +7,7 @@ set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU USER-MESONT USER-MISC USER-MGPT USER-MOFFF USER-MOLFILE USER-OMP USER-PHONON USER-PTM USER-QTB USER-REACTION USER-REAXC USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF - USER-YAFF) + USER-YAFF USER-DIELECTRIC) foreach(PKG ${WIN_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake index 064b22595f..e124b25d2b 100644 --- a/cmake/presets/most.cmake +++ b/cmake/presets/most.cmake @@ -8,7 +8,7 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE USER-BROWNIAN USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-MEAMC USER-MESODPD USER-MISC USER-MOFFF USER-OMP USER-PHONON USER-REACTION - USER-REAXC USER-SDPD USER-SPH USER-SMD USER-UEF USER-YAFF) + USER-REAXC USER-SDPD USER-SPH USER-SMD USER-UEF USER-YAFF USER-DIELECTRIC) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) diff --git a/doc/src/Commands_compute.rst b/doc/src/Commands_compute.rst index 0fb855fe4a..1f896b84cb 100644 --- a/doc/src/Commands_compute.rst +++ b/doc/src/Commands_compute.rst @@ -52,6 +52,7 @@ KOKKOS, o = USER-OMP, t = OPT. * :doc:`dpd ` * :doc:`dpd/atom ` * :doc:`edpd/temp/atom ` + * :doc:`efield/atom ` * :doc:`entropy/atom ` * :doc:`erotate/asphere ` * :doc:`erotate/rigid ` diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index 0dbe8f5bec..c9c55277b2 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -162,6 +162,9 @@ OPT. * :doc:`planeforce ` * :doc:`plumed ` * :doc:`poems ` + * :doc:`polarize/bem/gmres ` + * :doc:`polarize/bem/icc ` + * :doc:`polarize/functional ` * :doc:`pour ` * :doc:`precession/spin ` * :doc:`press/berendsen ` diff --git a/doc/src/Commands_kspace.rst b/doc/src/Commands_kspace.rst index 18fa5b5442..2f7cd35f15 100644 --- a/doc/src/Commands_kspace.rst +++ b/doc/src/Commands_kspace.rst @@ -28,6 +28,7 @@ OPT. * :doc:`ewald/dipole/spin ` * :doc:`msm (o) ` * :doc:`msm/cg (o) ` + * :doc:`msm/dielectric ` * :doc:`pppm (giko) ` * :doc:`pppm/cg (o) ` * :doc:`pppm/dipole ` @@ -36,4 +37,5 @@ OPT. * :doc:`pppm/disp/tip4p (o) ` * :doc:`pppm/stagger ` * :doc:`pppm/tip4p (o) ` + * :doc:`pppm/dielectric ` * :doc:`scafacos ` diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index d76785d221..192c40b27a 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -69,6 +69,7 @@ OPT. * :doc:`comb3 ` * :doc:`cosine/squared ` * :doc:`coul/cut (gko) ` + * :doc:`coul/cut/dielectric ` * :doc:`coul/cut/global (o) ` * :doc:`coul/cut/soft (o) ` * :doc:`coul/debye (gko) ` @@ -76,6 +77,7 @@ OPT. * :doc:`coul/dsf (gko) ` * :doc:`coul/long (gko) ` * :doc:`coul/long/cs (g) ` + * :doc:`coul/long/dielectric ` * :doc:`coul/long/soft (o) ` * :doc:`coul/msm (o) ` * :doc:`coul/slater/cut ` @@ -143,13 +145,17 @@ OPT. * :doc:`lj/cubic (go) ` * :doc:`lj/cut (gikot) ` * :doc:`lj/cut/coul/cut (gko) ` + * :doc:`lj/cut/coul/cut/dielectric (o) ` * :doc:`lj/cut/coul/cut/soft (o) ` * :doc:`lj/cut/coul/debye (gko) ` + * :doc:`lj/cut/coul/debye/dielectric ` * :doc:`lj/cut/coul/dsf (gko) ` * :doc:`lj/cut/coul/long (gikot) ` * :doc:`lj/cut/coul/long/cs ` + * :doc:`lj/cut/coul/long/dielectric (o) ` * :doc:`lj/cut/coul/long/soft (o) ` * :doc:`lj/cut/coul/msm (go) ` + * :doc:`lj/cut/coul/msm/dielectric ` * :doc:`lj/cut/coul/wolf (o) ` * :doc:`lj/cut/dipole/cut (go) ` * :doc:`lj/cut/dipole/long (g) ` @@ -164,6 +170,7 @@ OPT. * :doc:`lj/gromacs (gko) ` * :doc:`lj/gromacs/coul/gromacs (ko) ` * :doc:`lj/long/coul/long (iot) ` + * :doc:`lj/long/coul/long/dielectric ` * :doc:`lj/long/dipole/long ` * :doc:`lj/long/tip4p/long (o) ` * :doc:`lj/mdf ` diff --git a/doc/src/Install_windows.rst b/doc/src/Install_windows.rst index 56ca84f3ff..1df7ae7f3f 100644 --- a/doc/src/Install_windows.rst +++ b/doc/src/Install_windows.rst @@ -14,7 +14,7 @@ current and older versions of LAMMPS are available. 32-bit and 64-bit installers are available, and each installer contains both a serial and parallel executable. The installer web site also explains how to install the Windows MPI package (MPICH2 from Argonne National Labs), -needed to run in parallel. +needed to run in parallel with MPI. The LAMMPS binaries contain *all* :doc:`optional packages ` included in the source distribution except: KIM, KOKKOS, MSCG, PYTHON, diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index 7a9d770b0f..6b251841ce 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -73,6 +73,7 @@ page gives those details. * :ref:`USER-CGDNA ` * :ref:`USER-CGSDK ` * :ref:`USER-COLVARS ` + * :ref:`USER-DIELECTRIC ` * :ref:`USER-DIFFRACTION ` * :ref:`USER-DPD ` * :ref:`USER-DRUDE ` @@ -1450,6 +1451,29 @@ This package has :ref:`specific installation instructions ` on the ---------- +.. _PKG-USER-DIELECTRIC: + +USER-DIELECTRIC package +------------------------ + +**Contents:** + +An atom style, multiple pair styles, several fixes, Kspace styles and a +compute for simulating systems using boundary element solvers for +computing the induced charges at the interface between two media with +different dielectric constants. + +**Author:** Trung Nguyen and Monica Olvera de la Cruz (Northwestern U) + +**Supporting info:** + +* src/USER-DIELECTRIC: filenames -> commands +* :doc:`compute efield/atom ` +* TODO: add all styles +* examples/USER/dielectric + +---------- + .. _PKG-USER-DIFFRACTION: USER-DIFFRACTION package @@ -1904,9 +1928,6 @@ algorithm. * examples/USER/mesodpd * https://www.lammps.org/movies.html#mesodpd -* examples/USER/meso -* http://www.lammps.org/movies.html#mesodpd - ---------- .. _PKG-USER-MESONT: diff --git a/doc/src/Packages_user.rst b/doc/src/Packages_user.rst index 3bf1323d16..89d740939e 100644 --- a/doc/src/Packages_user.rst +++ b/doc/src/Packages_user.rst @@ -47,6 +47,8 @@ package: +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-COLVARS ` | collective variables library | :doc:`fix colvars ` | USER/colvars | int | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ +| :ref:`USER-DIELECTRIC ` | dielectric boundary solvers and force styles | :doc:`compute efield/atom ` | USER/dielectric | no | ++------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-DIFFRACTION ` | virtual x-ray and electron diffraction | :doc:`compute xrd ` | USER/diffraction | no | +------------------------------------------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+---------+ | :ref:`USER-DPD ` | reactive dissipative particle dynamics | src/USER-DPD/README | USER/dpd | no | diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 134d3e22d2..6b224bbf40 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -377,14 +377,6 @@ make MPI calls directly from Python in your script, if you desire. We have tested this with `MPI for Python `_ (aka mpi4py) and you will find installation instruction for it below. -.. note:: - - Older LAMMPS versions were also tested with `PyPar `_ - but we can no longer test it, since it does not work with the Python - (3.x) versions on our test servers. Since there have been no updates - to PyPar visible in its repository since November 2016 we have to assume - it is no longer maintained. - Installation of mpi4py (version 3.0.3 as of Sep 2020) can be done as follows: diff --git a/doc/src/Run_windows.rst b/doc/src/Run_windows.rst index 0343e123b9..8813d6d59e 100644 --- a/doc/src/Run_windows.rst +++ b/doc/src/Run_windows.rst @@ -7,7 +7,7 @@ To run a serial (non-MPI) executable, follow these steps: then typing "cmd". * Move to the directory where you have your input script, (e.g. by typing: cd "Documents"). -* At the command prompt, type "lmp_serial -in in.file", where +* At the command prompt, type "lmp -in in.file", where in.file is the name of your LAMMPS input script. Note that the serial executable includes support for multi-threading @@ -16,7 +16,7 @@ parallelization from the styles in the USER-OMP packages. To run with .. code-block:: bash - lmp_serial -in in.lj -pk omp 4 -sf omp + lmp -in in.lj -pk omp 4 -sf omp ---------- @@ -41,15 +41,17 @@ into the MPICH2 installation directory, then into the sub-directory * Move to the directory where you have your input file (e.g. by typing: cd "Documents"). -Then type something like this: +Then you can run the executable in serial like in the example above +or in parallel using MPI with one of the following commands: .. code-block:: bash - mpiexec -localonly 4 lmp_mpi -in in.file - mpiexec -np 4 lmp_mpi -in in.file + mpiexec -localonly 4 lmp -in in.file + mpiexec -np 4 lmp -in in.file where in.file is the name of your LAMMPS input script. For the latter -case, you may be prompted to enter your password. +case, you may be prompted to enter the password that you set during +installation of the MPI library software. In this mode, output may not immediately show up on the screen, so if your input script takes a long time to execute, you may need to be @@ -60,11 +62,12 @@ something like this: .. code-block:: bash - lmp_mpi -in in.lj + lmp -in in.lj Note that the parallel executable also includes OpenMP multi-threading, which can be combined with MPI using something like: .. code-block:: bash - mpiexec -localonly 2 lmp_mpi -in in.lj -pk omp 2 -sf omp + mpiexec -localonly 2 lmp -in in.lj -pk omp 2 -sf omp + diff --git a/doc/src/Speed_gpu.rst b/doc/src/Speed_gpu.rst index 4acf8c93c1..2cb8c08fd5 100644 --- a/doc/src/Speed_gpu.rst +++ b/doc/src/Speed_gpu.rst @@ -35,8 +35,8 @@ Coulombics. It has the following general features: To compile and use this package in CUDA mode, you currently need to have an NVIDIA GPU and install the corresponding NVIDIA CUDA -toolkit software on your system (this is primarily tested on Linux -and completely unsupported on Windows): +toolkit software on your system (this is only tested on Linux +and unsupported on Windows): * Check if you have an NVIDIA GPU: cat /proc/driver/nvidia/gpus/\*/information * Go to http://www.nvidia.com/object/cuda_get.html diff --git a/doc/src/atom_style.rst b/doc/src/atom_style.rst index dff222b053..1b5aaccb9a 100644 --- a/doc/src/atom_style.rst +++ b/doc/src/atom_style.rst @@ -88,6 +88,8 @@ quantities. +--------------+-----------------------------------------------------+--------------------------------------+ | *charge* | charge | atomic system with charges | +--------------+-----------------------------------------------------+--------------------------------------+ +| *dielectric* | dipole, area, curvature | system with surface polarization | ++--------------+-----------------------------------------------------+--------------------------------------+ | *dipole* | charge and dipole moment | system with dipolar particles | +--------------+-----------------------------------------------------+--------------------------------------+ | *dpd* | internal temperature and internal energies | DPD particles | @@ -166,6 +168,17 @@ a point particle. If it is an ellipsoid, it also stores a shape vector with the 3 diameters of the ellipsoid and a quaternion 4-vector with its orientation. +For the *dielectric* style, each particle can be either a physical +particle (e.g. an ion), or an interface particle representing a boundary +element. For physical particles, the per-particle properties are +the same as atom_style full. For interface particles, in addition to +these properties, each particle also has an area, a normal unit vector, +a mean local curvature, the mean and difference of the dielectric constants +of two sides of the interface, and the local dielectric constant at the +boundary element. The distinction between the physical and interface +particles is only meaningful when :doc:`fix polarize ` +commands are applied to the interface particles. + For the *dipole* style, a point dipole is defined for each point particle. Note that if you wish the particles to be finite-size spheres as in a Stockmayer potential for a dipolar fluid, so that the diff --git a/doc/src/compute.rst b/doc/src/compute.rst index 155f78cdae..ed4db76772 100644 --- a/doc/src/compute.rst +++ b/doc/src/compute.rst @@ -198,6 +198,7 @@ The individual style names on the :doc:`Commands compute ` doc * :doc:`dpd ` - * :doc:`dpd/atom ` - * :doc:`edpd/temp/atom ` - per-atom temperature for each eDPD particle in a group +* :doc:`efield/atom ` - * :doc:`entropy/atom ` - pair entropy fingerprint of each atom * :doc:`erotate/asphere ` - rotational energy of aspherical particles * :doc:`erotate/rigid ` - rotational energy of rigid bodies diff --git a/doc/src/compute_efield_atom.rst b/doc/src/compute_efield_atom.rst new file mode 100644 index 0000000000..68faccd8ad --- /dev/null +++ b/doc/src/compute_efield_atom.rst @@ -0,0 +1,67 @@ +.. index:: compute efield/atom + +compute efield/atom command +=========================== + +Syntax +"""""" + +.. parsed-literal:: + + compute ID group-ID efield/atom + +* ID, group-ID are documented in :doc:`compute ` command +* efield/atom = style name of this compute command + +Examples +"""""""" + +.. code-block:: LAMMPS + + compute 1 all efield/atom + compute 1 all efield/atom pair yes kspace no + +Description +""""""""""" + +Define a computation that calculates the electric field at each atom in a group. +The compute should only enabled with pair and kspace styles that are provided +by the USER-DIELECTRIC package because only these styles compute the per-atom +electric field at every time step. + +The electric field is a 3-component vector. The value of the electric field +components will be 0.0 for atoms not in the specified compute group. + +---------- + +The keyword/value option pairs are used in the following ways. + +For the *pair* and *kspace* keywords, the real-space and reciprocal-space +contributions to the electric field can be turned off and on. + + +Output info +""""""""""" + +This compute calculates a per-atom vector, which can be accessed by +any command that uses per-atom values from a compute as input. See +the :doc:`Howto output ` doc page for an overview of +LAMMPS output options. + +The per-atom vector values will be in electric field :doc:`units `. + +Restrictions +"""""""""""" +This compute is part of the USER-DIELECTRIC package. It is only enabled if +LAMMPS was built with that package. + +Related commands +"""""""""""""""" + +:doc:`dump custom ` + +Default +""""""" + +The option defaults are pair = yes and kspace = yes. + diff --git a/doc/src/fix.rst b/doc/src/fix.rst index d54594d5af..b4ac1e5e45 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -305,6 +305,9 @@ accelerated styles exist. * :doc:`planeforce ` - constrain atoms to move in a plane * :doc:`plumed ` - wrapper on PLUMED free energy library * :doc:`poems ` - constrain clusters of atoms to move as coupled rigid bodies +* :doc:`polarize/bem/gmres ` - +* :doc:`polarize/bem/icc ` - +* :doc:`polarize/functional ` - * :doc:`pour ` - pour new atoms/molecules into a granular simulation domain * :doc:`precession/spin ` - * :doc:`press/berendsen ` - pressure control by Berendsen barostat diff --git a/doc/src/fix_polarize.rst b/doc/src/fix_polarize.rst new file mode 100644 index 0000000000..2c499fce3c --- /dev/null +++ b/doc/src/fix_polarize.rst @@ -0,0 +1,113 @@ +.. index:: fix polarize/bem/gmres +.. index:: fix polarize/bem/icc +.. index:: fix polarize/functional + +fix polarize/bem/gmres command +============================== + +fix polarize/bem/icc command +============================ + +fix polarize/functional command +=============================== + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID style nevery tolerance ... + +* ID, group-ID are documented in :doc:`fix ` command +* style = *polarize/bem/gmres* or *polarize/bem/icc* or *polarize/functional* +* Nevery = this fixed is invoked every this many timesteps +* tolerance = the tolerance for the iterative solver to stop + + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix 2 all polarize/bem/gmres 5 0.0001 + fix 1 interface polarize/bem/icc 1 0.0001 + fix 3 all polarize/functional 1 0.001 + +Description +""""""""""" + +These fixes compute induced charges at the interface between two +impermeable media with different dielectric constants. + +There are some example scripts for using this fix +with LAMMPS in the examples/USER/dielectric directory. + +---------- + +For fix *polarize/bem/gmres* and fix *polarize/bem/icc* the induced +charges of the atoms in the specified group, which are the vertices on +the interface, are computed using the equation: + +..math:: + + \sigma_b(\mathbf{s}) = \dfrac{1 - \bar{\epsilon}}{\bar{\epsilon}} + \sigma_f(\mathbf{s}) - \epsilon_0 \dfrac{\Delta \epsilon}{\bar{\epsilon}} + \mathbf{E}(\mathbf{s}) \cdot \mathbf{n}(\mathbf{s}) + +* :math:`\sigma_b` is the induced charge density at the interface vertex :math:`\mathbf{s}`. +* :math:`\bar{\epsilon}` is the mean dielectric constant at the interface vertex: :math:`\bar{\epsilon} = (\epsilon_1 + \epsilon_2)/2`. +* :math:`\Delta \epsilon` is the dielectric constant difference at the interface vertex: :math:`\Delta \epsilon = \epsilon_1 - \epsilon_2` +* :math:`\sigma_f` is the free charge density at the interface vertex +* :math:`\mathbf{E}(\mathbf{s})` is the electrical field at the vertex +* :math:`\mathbf{n}(\mathbf{s})` is the unit normal vector at the vertex pointing from medium with :math:`\epsilon_2` to that with :math:`\epsilon_1` + +Fix *polarize/bem/gmres* employs the Generalized Minimum Residual (GMRES) +as described in :ref:`(Barros) ` to solve :math:`\sigma_b`. + +Fix *polarize/bem/icc* employs the successive over-relaxation algorithm +as described in :ref:`(Tyagi) ` to solve :math:`\sigma_b`. + +Fix *polarize/functional* ... + +Restart, fix_modify, output, run start/stop, minimize info +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +... + +Restrictions +"""""""""""" + +These fixes are part of the USER-DIELECTRIC package. It is only enabled +if LAMMPS was built with that package, which requires that also the +KSPACE package is installed. See the :doc:`Build package +` doc page for more info. + + +Related commands +"""""""""""""""" + +:doc:`compute efield/atom ` + +Default +""""""" + +None. + +---------- + +.. _Barros: + +**(Barros)** Barros, Sinkovits, Luijten, J. Chem. Phys, 140, 064903 (2014) + +.. _Tyagi: + +**(Tyagi)** Tyagi, Suzen, Sega, Barbosa, Kantorovich, Holm, J Chem Phys, 132, 154112 (2010) + +.. _Jadhao: + +**(Jadhao)** Jadhao, Solis, Olvera de la Cruz, J Chem Phys, 138, 054119 (2013) + +.. _NguyenTD: + +**(NguyenTD)** Nguyen, Li, Bagchi, Solis, Olvera de la Cruz, Comput Phys Commun 241, 80-19 (2019) + diff --git a/doc/src/kspace_style.rst b/doc/src/kspace_style.rst index 8bbbae9155..01ad15a08e 100644 --- a/doc/src/kspace_style.rst +++ b/doc/src/kspace_style.rst @@ -16,6 +16,7 @@ .. index:: kspace_style pppm/disp/tip4p .. index:: kspace_style pppm/disp/tip4p/omp .. index:: kspace_style pppm/disp/intel +.. index:: kspace_style pppm/dielectric .. index:: kspace_style pppm/cg/omp .. index:: kspace_style pppm/stagger .. index:: kspace_style pppm/tip4p @@ -24,6 +25,7 @@ .. index:: kspace_style msm/omp .. index:: kspace_style msm/cg .. index:: kspace_style msm/cg/omp +.. index:: kspace_style msm/dielectric .. index:: kspace_style scafacos kspace_style command @@ -36,7 +38,7 @@ Syntax kspace_style style value -* style = *none* or *ewald* or *ewald/dipole* or *ewald/dipole/spin* or *ewald/disp* or *ewald/omp* or *pppm* or *pppm/cg* or *pppm/disp* or *pppm/tip4p* or *pppm/stagger* or *pppm/disp/tip4p* or *pppm/gpu* or *pppm/intel* or *pppm/disp/intel* or *pppm/kk* or *pppm/omp* or *pppm/cg/omp* or *pppm/disp/tip4p/omp* or *pppm/tip4p/omp* or *msm* or *msm/cg* or *msm/omp* or *msm/cg/omp* or *scafacos* +* style = *none* or *ewald* or *ewald/dipole* or *ewald/dipole/spin* or *ewald/disp* or *ewald/omp* or *pppm* or *pppm/cg* or *pppm/disp* or *pppm/tip4p* or *pppm/stagger* or *pppm/disp/tip4p* or *pppm/gpu* or *pppm/intel* or *pppm/disp/intel* or *pppm/kk* or *pppm/omp* or *pppm/cg/omp* or *pppm/disp/tip4p/omp* or *pppm/tip4p/omp* or *pppm/dielectic* or *msm* or *msm/cg* or *msm/omp* or *msm/cg/omp* or *msm/dielectric* or *scafacos* .. parsed-literal:: @@ -87,6 +89,8 @@ Syntax accuracy = desired relative error in forces *pppm/stagger* value = accuracy accuracy = desired relative error in forces + *pppm/dielectric* value = accuracy + accuracy = desired relative error in forces *msm* value = accuracy accuracy = desired relative error in forces *msm/cg* value = accuracy (smallq) @@ -97,6 +101,8 @@ Syntax *msm/cg/omp* value = accuracy (smallq) accuracy = desired relative error in forces smallq = cutoff for charges to be considered (optional) (charge units) + *msm/dielectric* value = accuracy + accuracy = desired relative error in forces *scafacos* values = method accuracy method = fmm or p2nfft or p3m or ewald or direct accuracy = desired relative error in forces @@ -435,8 +441,14 @@ non-orthogonal (triclinic symmetry) simulation boxes. However, triclinic simulation cells may not yet be supported by all suffix versions of these styles. -All of the kspace styles are part of the KSPACE package. They are -only enabled if LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. +Most of the base kspace styles are part of the KSPACE package. They are +only enabled if LAMMPS was built with that package. See the :doc:`Build +package ` doc page for more info. + +The *msm/dielectric* and *pppm/dielectric* kspace styles are part of the +USER-DIELECTRIC package. They are only enabled if LAMMPS was built with +that package **and** the KSPACE package. See the :doc:`Build package +` doc page for more info. For MSM, a simulation must be 3d and one can use any combination of periodic, non-periodic, or shrink-wrapped boundaries (specified using diff --git a/doc/src/pair_dielectric.rst b/doc/src/pair_dielectric.rst new file mode 100644 index 0000000000..f98cfce976 --- /dev/null +++ b/doc/src/pair_dielectric.rst @@ -0,0 +1,357 @@ +.. index:: pair_style coul/cut/dielectric +.. index:: pair_style coul/long/dielectric +.. index:: pair_style lj/cut/coul/cut/dielectric +.. index:: pair_style lj/cut/coul/cut/dielectric/omp +.. index:: pair_style lj/cut/coul/debye/dielectric +.. index:: pair_style lj/cut/coul/long/dielectric +.. index:: pair_style lj/cut/coul/long/dielectric/omp +.. index:: pair_style lj/cut/coul/msm/dielectric +.. index:: pair_style lj/long/coul/long/dielectric + +pair_style coul/cut/dielectric command +====================================== + +pair_style coul/long/dielectric command +======================================= + +pair_style lj/cut/coul/cut/dielectric command +============================================= + +Accelerator Variants: *lj/cut/coul/cut/dielectric/omp* + +pair_style lj/cut/coul/debye/dielectric command +=============================================== + +pair_style lj/cut/coul/long/dielectric command +============================================== + +Accelerator Variants: *lj/cut/coul/long/dielectric/omp* + +pair_style lj/cut/coul/msm/dielectric command +============================================== + +pair_style lj/long/coul/long/dielectric command +=============================================== + +Syntax +"""""" + +TODO FIX the rest of the file + +.. code-block:: LAMMPS + + pair_style lj/cut/dipole/cut cutoff (cutoff2) + pair_style lj/sf/dipole/sf cutoff (cutoff2) + pair_style lj/cut/dipole/long cutoff (cutoff2) + pair_style lj/long/dipole/long flag_lj flag_coul cutoff (cutoff2) + +* cutoff = global cutoff LJ (and Coulombic if only 1 arg) (distance units) +* cutoff2 = global cutoff for Coulombic and dipole (optional) (distance units) +* flag_lj = *long* or *cut* or *off* + + .. parsed-literal:: + + *long* = use long-range damping on dispersion 1/r\^6 term + *cut* = use a cutoff on dispersion 1/r\^6 term + *off* = omit disperion 1/r\^6 term entirely + +* flag_coul = *long* or *off* + + .. parsed-literal:: + + *long* = use long-range damping on Coulombic 1/r and point-dipole terms + *off* = omit Coulombic and point-dipole terms entirely + +Examples +"""""""" + +.. code-block:: LAMMPS + + pair_style lj/cut/dipole/cut 10.0 + pair_coeff * * 1.0 1.0 + pair_coeff 2 3 1.0 1.0 2.5 4.0 + + pair_style lj/sf/dipole/sf 9.0 + pair_coeff * * 1.0 1.0 + pair_coeff 2 3 1.0 1.0 2.5 4.0 scale 0.5 + pair_coeff 2 3 1.0 1.0 2.5 4.0 + + pair_style lj/cut/dipole/long 10.0 + pair_coeff * * 1.0 1.0 + pair_coeff 2 3 1.0 1.0 2.5 4.0 + + pair_style lj/long/dipole/long long long 3.5 10.0 + pair_coeff * * 1.0 1.0 + pair_coeff 2 3 1.0 1.0 2.5 4.0 + +Description +""""""""""" + +Style *lj/cut/dipole/cut* computes interactions between pairs of particles +that each have a charge and/or a point dipole moment. In addition to +the usual Lennard-Jones interaction between the particles (Elj) the +charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole (Epp) +interactions are computed by these formulas for the energy (E), force +(F), and torque (T) between particles I and J. + +.. math:: + + E_{LJ} = & 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} - + \left(\frac{\sigma}{r}\right)^6 \right] \\ + E_{qq} = & \frac{q_i q_j}{r} \\ + E_{qp} = & \frac{q}{r^3} (p \bullet \vec{r}) \\ + E_{pp} = & \frac{1}{r^3} (\vec{p_i} \bullet \vec{p_j}) - + \frac{3}{r^5} (\vec{p_i} \bullet \vec{r}) (\vec{p_j} \bullet \vec{r}) \\ + & \\ + F_{qq} = & \frac{q_i q_j}{r^3} \vec{r} \\ + F_{qp} = & -\frac{q}{r^3} \vec{p} + \frac{3q}{r^5} + (\vec{p} \bullet \vec{r}) \vec{r} \\ + F_{pp} = & \frac{3}{r^5} (\vec{p_i} \bullet \vec{p_j}) \vec{r} - + \frac{15}{r^7} (\vec{p_i} \bullet \vec{r}) + (\vec{p_j} \bullet \vec{r}) \vec{r} + + \frac{3}{r^5} \left[ (\vec{p_j} \bullet \vec{r}) \vec{p_i} + + (\vec{p_i} \bullet \vec{r}) \vec{p_j} \right] \\ + & \\ + T_{pq} = T_{ij} = & \frac{q_j}{r^3} (\vec{p_i} \times \vec{r}) \\ + T_{qp} = T_{ji} = & - \frac{q_i}{r^3} (\vec{p_j} \times \vec{r}) \\ + T_{pp} = T_{ij} = & -\frac{1}{r^3} (\vec{p_i} \times \vec{p_j}) + + \frac{3}{r^5} (\vec{p_j} \bullet \vec{r}) + (\vec{p_i} \times \vec{r}) \\ + T_{pp} = T_{ji} = & -\frac{1}{r^3} (\vec{p_j} \times \vec{p_i}) + + \frac{3}{r^5} (\vec{p_i} \bullet \vec{r}) + (\vec{p_j} \times \vec{r}) + +where :math:`q_i` and :math:`q_j` are the charges on the two particles, +:math:`\vec{p_i}` and :math:`\vec{p_j}` are the dipole moment vectors of +the two particles, r is their separation distance, and the vector r = +Ri - Rj is the separation vector between the two particles. Note that +Eqq and Fqq are simply Coulombic energy and force, Fij = -Fji as +symmetric forces, and Tij != -Tji since the torques do not act +symmetrically. These formulas are discussed in :ref:`(Allen) ` +and in :ref:`(Toukmaji) `. + +Also note, that in the code, all of these terms (except Elj) have a +:math:`C/\epsilon` prefactor, the same as the Coulombic term in the LJ + +Coulombic pair styles discussed :doc:`here `. C is an +energy-conversion constant and epsilon is the dielectric constant +which can be set by the :doc:`dielectric ` command. The +same is true of the equations that follow for other dipole pair +styles. + +Style *lj/sf/dipole/sf* computes "shifted-force" interactions between +pairs of particles that each have a charge and/or a point dipole +moment. In general, a shifted-force potential is a (slightly) modified +potential containing extra terms that make both the energy and its +derivative go to zero at the cutoff distance; this removes +(cutoff-related) problems in energy conservation and any numerical +instability in the equations of motion :ref:`(Allen) `. Shifted-force +interactions for the Lennard-Jones (E_LJ), charge-charge (Eqq), +charge-dipole (Eqp), dipole-charge (Epq) and dipole-dipole (Epp) +potentials are computed by these formulas for the energy (E), force +(F), and torque (T) between particles I and J: + +.. math:: + + E_{LJ} = & 4\epsilon \left\{ \left[ \left( \frac{\sigma}{r} \right)^{\!12} - + \left( \frac{\sigma}{r} \right)^{\!6} \right] + + \left[ 6\left( \frac{\sigma}{r_c} \right)^{\!12} - + 3\left(\frac{\sigma}{r_c}\right)^{\!6}\right]\left(\frac{r}{r_c}\right)^{\!2} + - 7\left( \frac{\sigma}{r_c} \right)^{\!12} + + 4\left( \frac{\sigma}{r_c} \right)^{\!6}\right\} \\ + E_{qq} = & \frac{q_i q_j}{r}\left(1-\frac{r}{r_c}\right)^{\!2} \\ + E_{pq} = & E_{ji} = -\frac{q}{r^3} \left[ 1 - + 3\left(\frac{r}{r_c}\right)^{\!2} + + 2\left(\frac{r}{r_c}\right)^{\!3}\right] (\vec{p}\bullet\vec{r}) \\ + E_{qp} = & E_{ij} = \frac{q}{r^3} \left[ 1 - + 3\left(\frac{r}{r_c}\right)^{\!2} + + 2\left(\frac{r}{r_c}\right)^{\!3}\right] (\vec{p}\bullet\vec{r}) \\ + E_{pp} = & \left[1-4\left(\frac{r}{r_c}\right)^{\!3} + + 3\left(\frac{r}{r_c}\right)^{\!4}\right]\left[\frac{1}{r^3} + (\vec{p_i} \bullet \vec{p_j}) - \frac{3}{r^5} + (\vec{p_i} \bullet \vec{r}) (\vec{p_j} \bullet \vec{r})\right] \\ + & \\ + + F_{LJ} = & \left\{\left[48\epsilon \left(\frac{\sigma}{r}\right)^{\!12} - + 24\epsilon \left(\frac{\sigma}{r}\right)^{\!6} \right]\frac{1}{r^2} - + \left[48\epsilon \left(\frac{\sigma}{r_c}\right)^{\!12} - 24\epsilon + \left(\frac{\sigma}{r_c}\right)^{\!6} \right]\frac{1}{r_c^2}\right\}\vec{r}\\ + F_{qq} = & \frac{q_i q_j}{r}\left(\frac{1}{r^2} - + \frac{1}{r_c^2}\right)\vec{r} \\ + F_{pq} = & F_{ij } = -\frac{3q}{r^5} \left[ 1 - + \left(\frac{r}{r_c}\right)^{\!2}\right](\vec{p}\bullet\vec{r})\vec{r} + + \frac{q}{r^3}\left[1-3\left(\frac{r}{r_c}\right)^{\!2} + + 2\left(\frac{r}{r_c}\right)^{\!3}\right] \vec{p} \\ + F_{qp} = & F_{ij} = \frac{3q}{r^5} \left[ 1 - + \left(\frac{r}{r_c}\right)^{\!2}\right] (\vec{p}\bullet\vec{r})\vec{r} - + \frac{q}{r^3}\left[1-3\left(\frac{r}{r_c}\right)^{\!2} + + 2\left(\frac{r}{r_c}\right)^{\!3}\right] \vec{p} \\ + F_{pp} = &\frac{3}{r^5}\Bigg\{\left[1-\left(\frac{r}{r_c}\right)^{\!4}\right] + \left[(\vec{p_i}\bullet\vec{p_j}) - \frac{3}{r^2} (\vec{p_i}\bullet\vec{r}) + (\vec{p_j} \bullet \vec{r})\right] \vec{r} + \\ + & \left[1 - + 4\left(\frac{r}{r_c}\right)^{\!3}+3\left(\frac{r}{r_c}\right)^{\!4}\right] + \left[ (\vec{p_j} \bullet \vec{r}) \vec{p_i} + (\vec{p_i} \bullet \vec{r}) + \vec{p_j} -\frac{2}{r^2} (\vec{p_i} \bullet \vec{r}) + (\vec{p_j} \bullet \vec{r})\vec{r}\right] \Bigg\} + +.. math:: + + T_{pq} = T_{ij} = & \frac{q_j}{r^3} \left[ 1 - + 3\left(\frac{r}{r_c}\right)^{\!2} + + 2\left(\frac{r}{r_c}\right)^{\!3}\right] (\vec{p_i}\times\vec{r}) \\ + T_{qp} = T_{ji} = & - \frac{q_i}{r^3} \left[ 1 - + 3\left(\frac{r}{r_c}\right)^{\!2} + + 2\left(\frac{r}{r_c}\right)^{\!3} \right] (\vec{p_j}\times\vec{r}) \\ + T_{pp} = T_{ij} = & -\frac{1}{r^3}\left[1-4\left(\frac{r}{r_c}\right)^{\!3} + + e3\left(\frac{r}{r_c}\right)^{\!4}\right] (\vec{p_i} \times \vec{p_j}) + \\ + & \frac{3}{r^5}\left[1-4\left(\frac{r}{r_c}\right)^{\!3} + + 3\left(\frac{r}{r_c}\right)^{\!4}\right] (\vec{p_j}\bullet\vec{r}) + (\vec{p_i} \times \vec{r}) \\ + T_{pp} = T_{ji} = & -\frac{1}{r^3}\left[1-4\left(\frac{r}{r_c}\right)^{\!3} + + 3\left(\frac{r}{r_c}\right)^{\!4}\right](\vec{p_j} \times \vec{p_i}) + \\ + & \frac{3}{r^5}\left[1-4\left(\frac{r}{r_c}\right)^{\!3} + + 3\left(\frac{r}{r_c}\right)^{\!4}\right] (\vec{p_i} \bullet \vec{r}) + (\vec{p_j} \times \vec{r}) + +where :math:`\epsilon` and :math:`\sigma` are the standard LJ +parameters, :math:`r_c` is the cutoff, :math:`q_i` and :math:`q_j` are +the charges on the two particles, :math:`\vec{p_i}` and +:math:`\vec{p_j}` are the dipole moment vectors of the two particles, r +is their separation distance, and the vector r = Ri - Rj is the +separation vector between the two particles. Note that Eqq and Fqq are +simply Coulombic energy and force, Fij = -Fji as symmetric forces, and +Tij != -Tji since the torques do not act symmetrically. The +shifted-force formula for the Lennard-Jones potential is reported in +:ref:`(Stoddard) `. The original (non-shifted) formulas for +the electrostatic potentials, forces and torques can be found in +:ref:`(Price) `. The shifted-force electrostatic potentials have +been obtained by applying equation 5.13 of :ref:`(Allen) `. The +formulas for the corresponding forces and torques have been obtained by +applying the 'chain rule' as in appendix C.3 of :ref:`(Allen) `. + +If one cutoff is specified in the pair_style command, it is used for +both the LJ and Coulombic (q,p) terms. If two cutoffs are specified, +they are used as cutoffs for the LJ and Coulombic (q,p) terms +respectively. This pair style also supports an optional *scale* keyword +as part of a pair_coeff statement, where the interactions can be +scaled according to this factor. This scale factor is also made available +for use with fix adapt. + +Style *lj/cut/dipole/long* computes long-range point-dipole +interactions as discussed in :ref:`(Toukmaji) `. Dipole-dipole, +dipole-charge, and charge-charge interactions are all supported, along +with the standard 12/6 Lennard-Jones interactions, which are computed +with a cutoff. A :doc:`kspace_style ` must be defined to +use this pair style. Currently, only :doc:`kspace_style ewald/disp ` support long-range point-dipole +interactions. + +Style *lj/long/dipole/long* also computes point-dipole interactions as +discussed in :ref:`(Toukmaji) `. Long-range dipole-dipole, +dipole-charge, and charge-charge interactions are all supported, along +with the standard 12/6 Lennard-Jones interactions. LJ interactions +can be cutoff or long-ranged. + +For style *lj/long/dipole/long*\ , if *flag_lj* is set to *long*\ , no +cutoff is used on the LJ 1/r\^6 dispersion term. The long-range +portion is calculated by using the :doc:`kspace_style ewald_disp ` command. The specified LJ cutoff then +determines which portion of the LJ interactions are computed directly +by the pair potential versus which part is computed in reciprocal +space via the Kspace style. If *flag_lj* is set to *cut*\ , the LJ +interactions are simply cutoff, as with :doc:`pair_style lj/cut `. If *flag_lj* is set to *off*\ , LJ interactions +are not computed at all. + +If *flag_coul* is set to *long*\ , no cutoff is used on the Coulombic or +dipole interactions. The long-range portion is calculated by using +*ewald_disp* of the :doc:`kspace_style ` command. If +*flag_coul* is set to *off*\ , Coulombic and dipole interactions are not +computed at all. + +Atoms with dipole moments should be integrated using the :doc:`fix nve/sphere update dipole ` or the :doc:`fix nvt/sphere update dipole ` command to rotate the +dipole moments. The *omega* option on the :doc:`fix langevin ` command can be used to thermostat the +rotational motion. The :doc:`compute temp/sphere ` +command can be used to monitor the temperature, since it includes +rotational degrees of freedom. The :doc:`atom_style hybrid dipole sphere ` command should be used since +it defines the point dipoles and their rotational state. +The magnitude and orientation of the dipole moment for each particle +can be defined by the :doc:`set ` command or in the "Atoms" section +of the data file read in by the :doc:`read_data ` command. + +The following coefficients must be defined for each pair of atoms +types via the :doc:`pair_coeff ` command as in the examples +above, or in the data file or restart files read by the +:doc:`read_data ` or :doc:`read_restart ` +commands, or by mixing as described below: + +* :math:`\epsilon` (energy units) +* :math:`\sigma` (distance units) +* cutoff1 (distance units) +* cutoff2 (distance units) + +The latter 2 coefficients are optional. If not specified, the global +LJ and Coulombic cutoffs specified in the pair_style command are used. +If only one cutoff is specified, it is used as the cutoff for both LJ +and Coulombic interactions for this type pair. If both coefficients +are specified, they are used as the LJ and Coulombic cutoffs for this +type pair. + +---------- + +.. include:: accel_styles.rst + +---------- + +Mixing, shift, table, tail correction, restart, rRESPA info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +For atom type pairs I,J and I != J, the epsilon and sigma coefficients +and cutoff distances for this pair style can be mixed. The default +mix value is *geometric*\ . See the "pair_modify" command for details. + +For atom type pairs I,J and I != J, the A, sigma, d1, and d2 +coefficients and cutoff distance for this pair style can be mixed. A +is an energy value mixed like a LJ epsilon. D1 and d2 are distance +values and are mixed like sigma. The default mix value is +*geometric*\ . See the "pair_modify" command for details. + +This pair style does not support the :doc:`pair_modify ` +shift option for the energy of the Lennard-Jones portion of the pair +interaction; such energy goes to zero at the cutoff by construction. + +The :doc:`pair_modify ` table option is not relevant +for this pair style. + +This pair style does not support the :doc:`pair_modify ` +tail option for adding long-range tail corrections to energy and +pressure. + +This pair style writes its information to :doc:`binary restart files `, so pair_style and pair_coeff commands do not need +to be specified in an input script that reads a restart file. + +This pair style can only be used via the *pair* keyword of the +:doc:`run_style respa ` command. It does not support the +*inner*\ , *middle*\ , *outer* keywords. + +Restrictions +"""""""""""" + +The *lj/cut/dipole/cut*\ , *lj/cut/dipole/long*\ , and +*lj/long/dipole/long* styles are part of the DIPOLE package. They are +only enabled if LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. + +The *lj/sf/dipole/sf* style is part of the USER-MISC package. It is +only enabled if LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. + +Using dipole pair styles with *electron* :doc:`units ` is not +currently supported. + +Related commands +"""""""""""""""" + +:doc:`pair_coeff `, :doc:`set `, :doc:`read_data `, +:doc:`fix nve/sphere `, :doc:`fix nvt/sphere ` + +Default +""""""" + +none + diff --git a/doc/src/pair_kolmogorov_crespi_full.rst b/doc/src/pair_kolmogorov_crespi_full.rst index 6c9817cd5e..858b0eb984 100644 --- a/doc/src/pair_kolmogorov_crespi_full.rst +++ b/doc/src/pair_kolmogorov_crespi_full.rst @@ -36,7 +36,7 @@ No simplification is made, .. math:: E = & \frac{1}{2} \sum_i \sum_{j \neq i} V_{ij} \\ - V_{ij} = & e^{-\lambda (r_{ij} -z_0)} \left [ C + f(\rho_{ij}) + f(\rho_{ji}) - A \left ( \frac{r_{ij}}{z_0}\right )^{-6} \right ] \\ + V_{ij} = & e^{-\lambda (r_{ij} -z_0)} \left [ C + f(\rho_{ij}) + f(\rho_{ji}) \right ] - A \left ( \frac{r_{ij}}{z_0}\right )^{-6} \\ \rho_{ij}^2 = & r_{ij}^2 - ({\bf r}_{ij}\cdot {\bf n}_{i})^2 \\ \rho_{ji}^2 = & r_{ij}^2 - ({\bf r}_{ij}\cdot {\bf n}_{j})^2 \\ f(\rho) & = e^{-(\rho/\delta)^2} \sum_{n=0}^2 C_{2n} { (\rho/\delta) }^{2n} diff --git a/doc/src/pair_kolmogorov_crespi_z.rst b/doc/src/pair_kolmogorov_crespi_z.rst index 942ef85836..bd02221074 100644 --- a/doc/src/pair_kolmogorov_crespi_z.rst +++ b/doc/src/pair_kolmogorov_crespi_z.rst @@ -33,7 +33,7 @@ which is to take all normals along the z-axis. .. math:: E = & \frac{1}{2} \sum_i \sum_{j \neq i} V_{ij} \\ - V_{ij} = & e^{-\lambda(r_{ij} -z_0}) \left[ C + f(\rho_{ij}) + f(\rho_{ji}) \right] - A \left( \frac{r_{ij}}{z_0}\right)^{-6} + A \left( \frac{\textrm{cutoff}}{z_0}\right)^{-6} \\ + V_{ij} = & e^{-\lambda(r_{ij} -z_0)} \left[ C + f(\rho_{ij}) + f(\rho_{ji}) \right] - A \left( \frac{r_{ij}}{z_0}\right)^{-6} + A \left( \frac{\textrm{cutoff}}{z_0}\right)^{-6} \\ \rho_{ij}^2 = & \rho_{ji}^2 = x_{ij}^2 + y_{ij}^2 \qquad \qquad (\mathbf{n}_i \equiv \mathbf{\hat{z}}) \\ f(\rho) = & e^{-(\rho/\delta)^2} \sum_{n=0}^2 C_{2n} \left( \rho/\delta \right)^{2n} diff --git a/doc/src/pair_mesodpd.rst b/doc/src/pair_mesodpd.rst index 1efdfa8b45..6bb259a10d 100644 --- a/doc/src/pair_mesodpd.rst +++ b/doc/src/pair_mesodpd.rst @@ -238,7 +238,7 @@ Example scripts """"""""""""""" There are example scripts for using all these pair styles in -examples/USER/meso. The example for an eDPD simulation models heat +examples/USER/mesodpd. The example for an eDPD simulation models heat conduction with source terms analog of periodic Poiseuille flow problem. The setup follows Fig.12 in :ref:`(Li2014_JCP) `. The output of the short eDPD simulation (about 2 minutes on a single core) diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index 14b30c124a..1f023a7312 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -133,6 +133,7 @@ accelerated styles exist. * :doc:`comb3 ` - charge-optimized many-body (COMB3) potential * :doc:`cosine/squared ` - Cooke-Kremer-Deserno membrane model potential * :doc:`coul/cut ` - cutoff Coulomb potential +* :doc:`coul/cut/dielectric ` - * :doc:`coul/cut/global ` - cutoff Coulomb potential * :doc:`coul/cut/soft ` - Coulomb potential with a soft core * :doc:`coul/debye ` - cutoff Coulomb potential with Debye screening @@ -140,6 +141,7 @@ accelerated styles exist. * :doc:`coul/dsf ` - Coulomb with damped-shifted-force model * :doc:`coul/long ` - long-range Coulomb potential * :doc:`coul/long/cs ` - long-range Coulomb potential and core/shell +* :doc:`coul/long/dielectric ` - * :doc:`coul/long/soft ` - long-range Coulomb potential with a soft core * :doc:`coul/msm ` - long-range MSM Coulomb * :doc:`coul/slater/cut ` - smeared out Coulomb @@ -209,13 +211,17 @@ accelerated styles exist. * :doc:`lj/cubic ` - LJ with cubic after inflection point * :doc:`lj/cut ` - cutoff Lennard-Jones potential without Coulomb * :doc:`lj/cut/coul/cut ` - LJ with cutoff Coulomb +* :doc:`lj/cut/coul/cut/dielectric ` - * :doc:`lj/cut/coul/cut/soft ` - LJ with cutoff Coulomb with a soft core * :doc:`lj/cut/coul/debye ` - LJ with Debye screening added to Coulomb +* :doc:`lj/cut/coul/debye/dielectric ` - * :doc:`lj/cut/coul/dsf ` - LJ with Coulomb via damped shifted forces * :doc:`lj/cut/coul/long ` - LJ with long-range Coulomb * :doc:`lj/cut/coul/long/cs ` - LJ with long-range Coulomb with core/shell adjustments +* :doc:`lj/cut/coul/long/dielectric ` - * :doc:`lj/cut/coul/long/soft ` - LJ with long-range Coulomb with a soft core * :doc:`lj/cut/coul/msm ` - LJ with long-range MSM Coulomb +* :doc:`lj/cut/coul/msm/dielectric ` - * :doc:`lj/cut/coul/wolf ` - LJ with Coulomb via Wolf potential * :doc:`lj/cut/dipole/cut ` - point dipoles with cutoff * :doc:`lj/cut/dipole/long ` - point dipoles with long-range Ewald @@ -229,6 +235,7 @@ accelerated styles exist. * :doc:`lj/gromacs ` - GROMACS-style Lennard-Jones potential * :doc:`lj/gromacs/coul/gromacs ` - GROMACS-style LJ and Coulomb potential * :doc:`lj/long/coul/long ` - long-range LJ and long-range Coulomb +* :doc:`lj/long/coul/long/dielectric ` - * :doc:`lj/long/dipole/long ` - long-range LJ and long-range point dipoles * :doc:`lj/long/tip4p/long ` - long-range LJ and long-range Coulomb for TIP4P water * :doc:`lj/mdf ` - LJ potential with a taper function diff --git a/doc/utils/sphinx-config/_themes/lammps_theme/breadcrumbs.html b/doc/utils/sphinx-config/_themes/lammps_theme/breadcrumbs.html index 3a5672093d..d658528368 100644 --- a/doc/utils/sphinx-config/_themes/lammps_theme/breadcrumbs.html +++ b/doc/utils/sphinx-config/_themes/lammps_theme/breadcrumbs.html @@ -65,7 +65,7 @@ {% elif show_source and has_source and sourcename %} {{ _('View page source') }} {% endif %} - Website + Website Commands {% endif %} diff --git a/doc/utils/sphinx-config/_themes/lammps_theme/layout.html b/doc/utils/sphinx-config/_themes/lammps_theme/layout.html index 2f31c3d56a..703a3ace5d 100644 --- a/doc/utils/sphinx-config/_themes/lammps_theme/layout.html +++ b/doc/utils/sphinx-config/_themes/lammps_theme/layout.html @@ -38,10 +38,11 @@ {% if favicon %} {% endif %} - {# CANONICAL URL #} - {% if theme_canonical_url %} - - {% endif %} + + {#- CANONICAL URL #} + {%- if pageurl %} + + {%- endif -%} {# JAVASCRIPTS #} {%- block scripts %} diff --git a/doc/utils/sphinx-config/_themes/lammps_theme/theme.conf b/doc/utils/sphinx-config/_themes/lammps_theme/theme.conf index 37dc1185b7..444b1379f2 100644 --- a/doc/utils/sphinx-config/_themes/lammps_theme/theme.conf +++ b/doc/utils/sphinx-config/_themes/lammps_theme/theme.conf @@ -4,7 +4,6 @@ stylesheet = css/theme.css pygments_style = default [options] -canonical_url = analytics_id = collapse_navigation = False sticky_navigation = False diff --git a/doc/utils/sphinx-config/conf.py.in b/doc/utils/sphinx-config/conf.py.in index 7a6fbaf7a0..68a61af009 100644 --- a/doc/utils/sphinx-config/conf.py.in +++ b/doc/utils/sphinx-config/conf.py.in @@ -15,6 +15,7 @@ import sys import os +from datetime import date has_enchant = False try: @@ -76,7 +77,7 @@ master_doc = 'Manual' # General information about the project. project = 'LAMMPS' -copyright = '2003-2020 Sandia Corporation' +copyright = '2003-{} Sandia Corporation'.format(date.today().year) def get_lammps_version(): import os @@ -255,6 +256,8 @@ htmlhelp_basename = 'LAMMPSdoc' html_permalinks = True +html_baseurl = os.environ.get('LAMMPS_WEBSITE_BASEURL', '') + if 'epub' in sys.argv: html_math_renderer = 'imgmath' else: diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index a40e3a74b1..ac9d3f24c2 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -188,6 +188,7 @@ Babaei backcolor backends Baczewski +Bagchi Bagi Bagnold Bajaj @@ -201,6 +202,7 @@ Ballenegger Bammann Banna Barashev +Barbosa barnes barostat Barostats @@ -208,6 +210,7 @@ barostatted barostatting Barostatting Barrat +Barros Bartelt Bartels barycenter @@ -225,6 +228,7 @@ bdw Beckman Belak Bellott +bem benchmarking Bennet Berardi @@ -1156,6 +1160,7 @@ gmake gmask Gmask GMock +gmres gneb GNEB Goldfarb @@ -1461,6 +1466,7 @@ Izvekov izz Izz Jacobsen +Jadhao Jadhav jagreat Jahn @@ -1516,6 +1522,7 @@ Kadiri Kai Kalia Kamberaj +Kantorovich Kapfer Karls Karlsruhe @@ -2356,6 +2363,7 @@ Oleinik Olfason olivedrab Ollila +Olvera omegaDD omegax omegay @@ -2631,7 +2639,6 @@ PyLammps pymbar pymodule pymol -pypar pythonic pytorch pyy @@ -2990,6 +2997,7 @@ Sim Simov Simul simulations +Sinkovits Sinnott sinusoid sinusoidally @@ -3140,6 +3148,7 @@ surfactant surfactants Suter Sutmann +Suzen svn sw Swegat @@ -3341,6 +3350,7 @@ twobody twojmax Tx txt +Tyagi typeI typeJ typeN diff --git a/examples/ELASTIC/compliance.py b/examples/ELASTIC/compliance.py index 6ef35be553..47f680abb4 100755 --- a/examples/ELASTIC/compliance.py +++ b/examples/ELASTIC/compliance.py @@ -1,13 +1,14 @@ #!/usr/bin/env python # This file reads in the file log.lammps generated by the script ELASTIC/in.elastic -# It prints out the 6x6 tensor of elastic constants Cij +# It prints out the 6x6 tensor of elastic constants Cij # followed by the 6x6 tensor of compliance constants Sij # It uses the same conventions as described in: -# Sprik, Impey and Klein PRB (1984). +# Sprik, Impey and Klein PRB (1984). # The units of Cij are whatever was used in log.lammps (usually GPa) # The units of Sij are the inverse of that (usually 1/GPa) +from __future__ import print_function from numpy import zeros from numpy.linalg import inv @@ -44,9 +45,8 @@ cindices[20] = (4,5) # open logfile -logfile = open("log.lammps",'r') - -txt = logfile.read() +with open("log.lammps",'r') as logfile: + txt = logfile.read() # search for 21 elastic constants @@ -56,7 +56,7 @@ s2 = 0 for ival in range(nvals): s1 = txt.find(valstr,s2) if (s1 == -1): - print "Failed to find elastic constants in log file" + print("Failed to find elastic constants in log file") exit(1) s1 += 1 s2 = txt.find("\n",s1) @@ -67,18 +67,18 @@ for ival in range(nvals): c[i1,i2] = float(words[valpos]) c[i2,i1] = c[i1,i2] -print "C tensor [GPa]" +print("C tensor [GPa]") for i in range(6): for j in range(6): - print "%10.8g " % c[i][j], - print - + print("%10.8g " % c[i][j], end="") + print() + # apply factor of 2 to columns of off-diagonal elements for i in range(6): for j in range(3,6): c[i][j] *= 2.0 - + s = inv(c) # apply factor of 1/2 to columns of off-diagonal elements @@ -86,10 +86,9 @@ s = inv(c) for i in range(6): for j in range(3,6): s[i][j] *= 0.5 - -print "S tensor [1/GPa]" + +print("S tensor [1/GPa]") for i in range(6): for j in range(6): - print "%10.8g " % s[i][j], - print - + print("%10.8g " % s[i][j], end="") + print() diff --git a/examples/USER/dielectric/README b/examples/USER/dielectric/README new file mode 100644 index 0000000000..6cbb1e204d --- /dev/null +++ b/examples/USER/dielectric/README @@ -0,0 +1,44 @@ +This folder contains some example data and input scripts for the USER-DIELECTRIC package. Please refer to the following reference for more details: + +Nguyen TD, Li H, Bagchi D, Solis FJ, Olvera de la Cruz, Incorporating surface polarization effects into large-scale coarse-grained molecular dynamics simulation, Computer Physics Communications 2019, 241, 80--91. + +- data.confined : two point opposite charges confined between two interfaces (epsilon1=2/epsilon2=10/epsilon2=2) +- data.sphere : two point opposite charges outside a spherical interface (epsilon_in=1/epsilon2=10) + +- in.confined : read in data.confined +- in.nopbc : read in data.* files, using non-periodic boundary conditions, with a large cutoff + +For "atom_style dielectric" the Atoms section in the data file contains 15 following columns: + +id mol type q x y z normx normy normz area_per_patch ed em epsilon curvature + +where + +* id, mol, type, q, x, y and z are similar to those in atom_style full + +* normx, normy and normz are the three components of the normal unit vector + of the interface at the boundary element (also called vertex, or patch). + For real charges (ions), these 3 values are irrelevant, + and can be anything (e.g. 0,0,1). normx, normy, and normz can be + accessed through mux, muy and muz as if they were dipole components. + +* ed = dielectric difference at the vertex along the normal vector direction. + For example, if (normx,normy,normz) points from medium with epsilon_in + to medium with epsilon_out, then ed = epsilon_out - epsilon_in + +* em = (epsilon_out + epsilon_in)/2: the mean dielectric value + +* epsilon = the local epsilon value at the vertex or at the ion. + For real charges, epsilon is the medium dielectric constant, + and q is the real (unscaled) charges. + For interface particles: + + if q is zero (zero surface charges), epsilon is set to be 1.0; + + if q is nonzero (charged surfaces), epsilon is set to be em + (the mean dielectric value above). + +* area_per_patch: the surface area of the patch (element). + For real charges, this value is irrelevant, can be 1.0. + +* curvature: surface mean curvature at the patch. + For example, for spherical interfaces, curvature = 1/spherical radius. + For planar interfaces, curvature = 0. diff --git a/examples/USER/dielectric/data.confined b/examples/USER/dielectric/data.confined new file mode 100644 index 0000000000..52afc2cf62 --- /dev/null +++ b/examples/USER/dielectric/data.confined @@ -0,0 +1,4019 @@ +LAMMPS data file: two oppositely charged ions confined between two walls + +4002 atoms +3 atom types + +0.0000000000000000e+00 4.0000006274935302e+01 xlo xhi +0.0000000000000000e+00 4.3301276792816687e+01 ylo yhi +0.0000000000000000e+00 4.0000000000000000e+01 zlo zhi + +Masses + +1 1 +2 1 +3 1 + +Atoms # dielectric: id mol type q x y z normx normy normz area_per_patch ed em epsilon curvature + +1 0 1 0 0 0 9.99798 0 0 1 0.866 8 6 1 0 +2 0 1 0 0.500101 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +3 0 1 0 1.0002 0 9.99798 0 0 1 0.866 8 6 1 0 +4 0 1 0 1.5003 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +5 0 1 0 2.0004 0 9.99798 0 0 1 0.866 8 6 1 0 +6 0 1 0 2.50051 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +7 0 1 0 3.00061 0 9.99798 0 0 1 0.866 8 6 1 0 +8 0 1 0 3.50071 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +9 0 1 0 4.00081 0 9.99798 0 0 1 0.866 8 6 1 0 +10 0 1 0 4.50091 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +11 0 1 0 5.00101 0 9.99798 0 0 1 0.866 8 6 1 0 +12 0 1 0 5.50111 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +13 0 1 0 6.00121 0 9.99798 0 0 1 0.866 8 6 1 0 +14 0 1 0 6.50132 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +15 0 1 0 7.00142 0 9.99798 0 0 1 0.866 8 6 1 0 +16 0 1 0 7.50152 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +17 0 1 0 8.00162 0 9.99798 0 0 1 0.866 8 6 1 0 +18 0 1 0 8.50172 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +19 0 1 0 9.00182 0 9.99798 0 0 1 0.866 8 6 1 0 +20 0 1 0 9.50192 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +21 0 1 0 10.002 0 9.99798 0 0 1 0.866 8 6 1 0 +22 0 1 0 10.5021 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +23 0 1 0 11.0022 0 9.99798 0 0 1 0.866 8 6 1 0 +24 0 1 0 11.5023 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +25 0 1 0 12.0024 0 9.99798 0 0 1 0.866 8 6 1 0 +26 0 1 0 12.5025 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +27 0 1 0 13.0026 0 9.99798 0 0 1 0.866 8 6 1 0 +28 0 1 0 13.5027 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +29 0 1 0 14.0028 0 9.99798 0 0 1 0.866 8 6 1 0 +30 0 1 0 14.5029 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +31 0 1 0 15.003 0 9.99798 0 0 1 0.866 8 6 1 0 +32 0 1 0 15.5031 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +33 0 1 0 16.0032 0 9.99798 0 0 1 0.866 8 6 1 0 +34 0 1 0 16.5033 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +35 0 1 0 17.0034 0 9.99798 0 0 1 0.866 8 6 1 0 +36 0 1 0 17.5035 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +37 0 1 0 18.0036 0 9.99798 0 0 1 0.866 8 6 1 0 +38 0 1 0 18.5037 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +39 0 1 0 19.0038 0 9.99798 0 0 1 0.866 8 6 1 0 +40 0 1 0 19.5039 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +41 0 1 0 20.004 0 9.99798 0 0 1 0.866 8 6 1 0 +42 0 1 0 20.5041 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +43 0 1 0 21.0042 0 9.99798 0 0 1 0.866 8 6 1 0 +44 0 1 0 21.5043 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +45 0 1 0 22.0045 0 9.99798 0 0 1 0.866 8 6 1 0 +46 0 1 0 22.5046 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +47 0 1 0 23.0047 0 9.99798 0 0 1 0.866 8 6 1 0 +48 0 1 0 23.5048 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +49 0 1 0 24.0049 0 9.99798 0 0 1 0.866 8 6 1 0 +50 0 1 0 24.505 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +51 0 1 0 25.0051 0 9.99798 0 0 1 0.866 8 6 1 0 +52 0 1 0 25.5052 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +53 0 1 0 26.0053 0 9.99798 0 0 1 0.866 8 6 1 0 +54 0 1 0 26.5054 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +55 0 1 0 27.0055 0 9.99798 0 0 1 0.866 8 6 1 0 +56 0 1 0 27.5056 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +57 0 1 0 28.0057 0 9.99798 0 0 1 0.866 8 6 1 0 +58 0 1 0 28.5058 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +59 0 1 0 29.0059 0 9.99798 0 0 1 0.866 8 6 1 0 +60 0 1 0 29.506 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +61 0 1 0 30.0061 0 9.99798 0 0 1 0.866 8 6 1 0 +62 0 1 0 30.5062 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +63 0 1 0 31.0063 0 9.99798 0 0 1 0.866 8 6 1 0 +64 0 1 0 31.5064 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +65 0 1 0 32.0065 0 9.99798 0 0 1 0.866 8 6 1 0 +66 0 1 0 32.5066 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +67 0 1 0 33.0067 0 9.99798 0 0 1 0.866 8 6 1 0 +68 0 1 0 33.5068 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +69 0 1 0 34.0069 0 9.99798 0 0 1 0.866 8 6 1 0 +70 0 1 0 34.507 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +71 0 1 0 35.0071 0 9.99798 0 0 1 0.866 8 6 1 0 +72 0 1 0 35.5072 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +73 0 1 0 36.0073 0 9.99798 0 0 1 0.866 8 6 1 0 +74 0 1 0 36.5074 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +75 0 1 0 37.0075 0 9.99798 0 0 1 0.866 8 6 1 0 +76 0 1 0 37.5076 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +77 0 1 0 38.0077 0 9.99798 0 0 1 0.866 8 6 1 0 +78 0 1 0 38.5078 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +79 0 1 0 39.0079 0 9.99798 0 0 1 0.866 8 6 1 0 +80 0 1 0 39.508 0.866201 9.99798 0 0 1 0.866 8 6 1 0 +81 0 1 0 0 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +82 0 1 0 0.500101 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +83 0 1 0 1.0002 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +84 0 1 0 1.5003 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +85 0 1 0 2.0004 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +86 0 1 0 2.50051 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +87 0 1 0 3.00061 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +88 0 1 0 3.50071 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +89 0 1 0 4.00081 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +90 0 1 0 4.50091 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +91 0 1 0 5.00101 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +92 0 1 0 5.50111 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +93 0 1 0 6.00121 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +94 0 1 0 6.50132 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +95 0 1 0 7.00142 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +96 0 1 0 7.50152 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +97 0 1 0 8.00162 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +98 0 1 0 8.50172 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +99 0 1 0 9.00182 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +100 0 1 0 9.50192 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +101 0 1 0 10.002 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +102 0 1 0 10.5021 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +103 0 1 0 11.0022 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +104 0 1 0 11.5023 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +105 0 1 0 12.0024 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +106 0 1 0 12.5025 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +107 0 1 0 13.0026 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +108 0 1 0 13.5027 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +109 0 1 0 14.0028 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +110 0 1 0 14.5029 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +111 0 1 0 15.003 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +112 0 1 0 15.5031 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +113 0 1 0 16.0032 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +114 0 1 0 16.5033 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +115 0 1 0 17.0034 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +116 0 1 0 17.5035 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +117 0 1 0 18.0036 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +118 0 1 0 18.5037 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +119 0 1 0 19.0038 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +120 0 1 0 19.5039 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +121 0 1 0 20.004 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +122 0 1 0 20.5041 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +123 0 1 0 21.0042 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +124 0 1 0 21.5043 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +125 0 1 0 22.0045 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +126 0 1 0 22.5046 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +127 0 1 0 23.0047 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +128 0 1 0 23.5048 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +129 0 1 0 24.0049 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +130 0 1 0 24.505 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +131 0 1 0 25.0051 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +132 0 1 0 25.5052 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +133 0 1 0 26.0053 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +134 0 1 0 26.5054 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +135 0 1 0 27.0055 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +136 0 1 0 27.5056 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +137 0 1 0 28.0057 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +138 0 1 0 28.5058 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +139 0 1 0 29.0059 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +140 0 1 0 29.506 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +141 0 1 0 30.0061 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +142 0 1 0 30.5062 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +143 0 1 0 31.0063 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +144 0 1 0 31.5064 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +145 0 1 0 32.0065 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +146 0 1 0 32.5066 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +147 0 1 0 33.0067 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +148 0 1 0 33.5068 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +149 0 1 0 34.0069 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +150 0 1 0 34.507 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +151 0 1 0 35.0071 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +152 0 1 0 35.5072 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +153 0 1 0 36.0073 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +154 0 1 0 36.5074 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +155 0 1 0 37.0075 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +156 0 1 0 37.5076 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +157 0 1 0 38.0077 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +158 0 1 0 38.5078 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +159 0 1 0 39.0079 1.7324 9.99798 0 0 1 0.866 8 6 1 0 +160 0 1 0 39.508 2.5986 9.99798 0 0 1 0.866 8 6 1 0 +161 0 1 0 0 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +162 0 1 0 0.500101 4.331 9.99798 0 0 1 0.866 8 6 1 0 +163 0 1 0 1.0002 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +164 0 1 0 1.5003 4.331 9.99798 0 0 1 0.866 8 6 1 0 +165 0 1 0 2.0004 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +166 0 1 0 2.50051 4.331 9.99798 0 0 1 0.866 8 6 1 0 +167 0 1 0 3.00061 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +168 0 1 0 3.50071 4.331 9.99798 0 0 1 0.866 8 6 1 0 +169 0 1 0 4.00081 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +170 0 1 0 4.50091 4.331 9.99798 0 0 1 0.866 8 6 1 0 +171 0 1 0 5.00101 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +172 0 1 0 5.50111 4.331 9.99798 0 0 1 0.866 8 6 1 0 +173 0 1 0 6.00121 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +174 0 1 0 6.50132 4.331 9.99798 0 0 1 0.866 8 6 1 0 +175 0 1 0 7.00142 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +176 0 1 0 7.50152 4.331 9.99798 0 0 1 0.866 8 6 1 0 +177 0 1 0 8.00162 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +178 0 1 0 8.50172 4.331 9.99798 0 0 1 0.866 8 6 1 0 +179 0 1 0 9.00182 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +180 0 1 0 9.50192 4.331 9.99798 0 0 1 0.866 8 6 1 0 +181 0 1 0 10.002 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +182 0 1 0 10.5021 4.331 9.99798 0 0 1 0.866 8 6 1 0 +183 0 1 0 11.0022 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +184 0 1 0 11.5023 4.331 9.99798 0 0 1 0.866 8 6 1 0 +185 0 1 0 12.0024 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +186 0 1 0 12.5025 4.331 9.99798 0 0 1 0.866 8 6 1 0 +187 0 1 0 13.0026 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +188 0 1 0 13.5027 4.331 9.99798 0 0 1 0.866 8 6 1 0 +189 0 1 0 14.0028 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +190 0 1 0 14.5029 4.331 9.99798 0 0 1 0.866 8 6 1 0 +191 0 1 0 15.003 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +192 0 1 0 15.5031 4.331 9.99798 0 0 1 0.866 8 6 1 0 +193 0 1 0 16.0032 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +194 0 1 0 16.5033 4.331 9.99798 0 0 1 0.866 8 6 1 0 +195 0 1 0 17.0034 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +196 0 1 0 17.5035 4.331 9.99798 0 0 1 0.866 8 6 1 0 +197 0 1 0 18.0036 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +198 0 1 0 18.5037 4.331 9.99798 0 0 1 0.866 8 6 1 0 +199 0 1 0 19.0038 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +200 0 1 0 19.5039 4.331 9.99798 0 0 1 0.866 8 6 1 0 +201 0 1 0 20.004 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +202 0 1 0 20.5041 4.331 9.99798 0 0 1 0.866 8 6 1 0 +203 0 1 0 21.0042 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +204 0 1 0 21.5043 4.331 9.99798 0 0 1 0.866 8 6 1 0 +205 0 1 0 22.0045 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +206 0 1 0 22.5046 4.331 9.99798 0 0 1 0.866 8 6 1 0 +207 0 1 0 23.0047 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +208 0 1 0 23.5048 4.331 9.99798 0 0 1 0.866 8 6 1 0 +209 0 1 0 24.0049 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +210 0 1 0 24.505 4.331 9.99798 0 0 1 0.866 8 6 1 0 +211 0 1 0 25.0051 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +212 0 1 0 25.5052 4.331 9.99798 0 0 1 0.866 8 6 1 0 +213 0 1 0 26.0053 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +214 0 1 0 26.5054 4.331 9.99798 0 0 1 0.866 8 6 1 0 +215 0 1 0 27.0055 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +216 0 1 0 27.5056 4.331 9.99798 0 0 1 0.866 8 6 1 0 +217 0 1 0 28.0057 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +218 0 1 0 28.5058 4.331 9.99798 0 0 1 0.866 8 6 1 0 +219 0 1 0 29.0059 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +220 0 1 0 29.506 4.331 9.99798 0 0 1 0.866 8 6 1 0 +221 0 1 0 30.0061 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +222 0 1 0 30.5062 4.331 9.99798 0 0 1 0.866 8 6 1 0 +223 0 1 0 31.0063 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +224 0 1 0 31.5064 4.331 9.99798 0 0 1 0.866 8 6 1 0 +225 0 1 0 32.0065 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +226 0 1 0 32.5066 4.331 9.99798 0 0 1 0.866 8 6 1 0 +227 0 1 0 33.0067 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +228 0 1 0 33.5068 4.331 9.99798 0 0 1 0.866 8 6 1 0 +229 0 1 0 34.0069 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +230 0 1 0 34.507 4.331 9.99798 0 0 1 0.866 8 6 1 0 +231 0 1 0 35.0071 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +232 0 1 0 35.5072 4.331 9.99798 0 0 1 0.866 8 6 1 0 +233 0 1 0 36.0073 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +234 0 1 0 36.5074 4.331 9.99798 0 0 1 0.866 8 6 1 0 +235 0 1 0 37.0075 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +236 0 1 0 37.5076 4.331 9.99798 0 0 1 0.866 8 6 1 0 +237 0 1 0 38.0077 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +238 0 1 0 38.5078 4.331 9.99798 0 0 1 0.866 8 6 1 0 +239 0 1 0 39.0079 3.4648 9.99798 0 0 1 0.866 8 6 1 0 +240 0 1 0 39.508 4.331 9.99798 0 0 1 0.866 8 6 1 0 +241 0 1 0 0 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +242 0 1 0 0.500101 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +243 0 1 0 1.0002 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +244 0 1 0 1.5003 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +245 0 1 0 2.0004 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +246 0 1 0 2.50051 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +247 0 1 0 3.00061 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +248 0 1 0 3.50071 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +249 0 1 0 4.00081 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +250 0 1 0 4.50091 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +251 0 1 0 5.00101 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +252 0 1 0 5.50111 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +253 0 1 0 6.00121 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +254 0 1 0 6.50132 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +255 0 1 0 7.00142 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +256 0 1 0 7.50152 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +257 0 1 0 8.00162 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +258 0 1 0 8.50172 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +259 0 1 0 9.00182 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +260 0 1 0 9.50192 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +261 0 1 0 10.002 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +262 0 1 0 10.5021 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +263 0 1 0 11.0022 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +264 0 1 0 11.5023 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +265 0 1 0 12.0024 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +266 0 1 0 12.5025 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +267 0 1 0 13.0026 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +268 0 1 0 13.5027 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +269 0 1 0 14.0028 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +270 0 1 0 14.5029 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +271 0 1 0 15.003 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +272 0 1 0 15.5031 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +273 0 1 0 16.0032 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +274 0 1 0 16.5033 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +275 0 1 0 17.0034 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +276 0 1 0 17.5035 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +277 0 1 0 18.0036 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +278 0 1 0 18.5037 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +279 0 1 0 19.0038 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +280 0 1 0 19.5039 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +281 0 1 0 20.004 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +282 0 1 0 20.5041 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +283 0 1 0 21.0042 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +284 0 1 0 21.5043 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +285 0 1 0 22.0045 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +286 0 1 0 22.5046 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +287 0 1 0 23.0047 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +288 0 1 0 23.5048 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +289 0 1 0 24.0049 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +290 0 1 0 24.505 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +291 0 1 0 25.0051 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +292 0 1 0 25.5052 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +293 0 1 0 26.0053 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +294 0 1 0 26.5054 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +295 0 1 0 27.0055 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +296 0 1 0 27.5056 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +297 0 1 0 28.0057 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +298 0 1 0 28.5058 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +299 0 1 0 29.0059 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +300 0 1 0 29.506 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +301 0 1 0 30.0061 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +302 0 1 0 30.5062 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +303 0 1 0 31.0063 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +304 0 1 0 31.5064 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +305 0 1 0 32.0065 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +306 0 1 0 32.5066 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +307 0 1 0 33.0067 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +308 0 1 0 33.5068 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +309 0 1 0 34.0069 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +310 0 1 0 34.507 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +311 0 1 0 35.0071 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +312 0 1 0 35.5072 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +313 0 1 0 36.0073 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +314 0 1 0 36.5074 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +315 0 1 0 37.0075 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +316 0 1 0 37.5076 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +317 0 1 0 38.0077 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +318 0 1 0 38.5078 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +319 0 1 0 39.0079 5.1972 9.99798 0 0 1 0.866 8 6 1 0 +320 0 1 0 39.508 6.0634 9.99798 0 0 1 0.866 8 6 1 0 +321 0 1 0 0 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +322 0 1 0 0.500101 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +323 0 1 0 1.0002 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +324 0 1 0 1.5003 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +325 0 1 0 2.0004 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +326 0 1 0 2.50051 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +327 0 1 0 3.00061 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +328 0 1 0 3.50071 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +329 0 1 0 4.00081 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +330 0 1 0 4.50091 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +331 0 1 0 5.00101 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +332 0 1 0 5.50111 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +333 0 1 0 6.00121 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +334 0 1 0 6.50132 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +335 0 1 0 7.00142 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +336 0 1 0 7.50152 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +337 0 1 0 8.00162 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +338 0 1 0 8.50172 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +339 0 1 0 9.00182 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +340 0 1 0 9.50192 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +341 0 1 0 10.002 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +342 0 1 0 10.5021 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +343 0 1 0 11.0022 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +344 0 1 0 11.5023 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +345 0 1 0 12.0024 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +346 0 1 0 12.5025 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +347 0 1 0 13.0026 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +348 0 1 0 13.5027 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +349 0 1 0 14.0028 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +350 0 1 0 14.5029 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +351 0 1 0 15.003 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +352 0 1 0 15.5031 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +353 0 1 0 16.0032 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +354 0 1 0 16.5033 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +355 0 1 0 17.0034 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +356 0 1 0 17.5035 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +357 0 1 0 18.0036 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +358 0 1 0 18.5037 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +359 0 1 0 19.0038 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +360 0 1 0 19.5039 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +361 0 1 0 20.004 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +362 0 1 0 20.5041 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +363 0 1 0 21.0042 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +364 0 1 0 21.5043 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +365 0 1 0 22.0045 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +366 0 1 0 22.5046 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +367 0 1 0 23.0047 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +368 0 1 0 23.5048 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +369 0 1 0 24.0049 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +370 0 1 0 24.505 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +371 0 1 0 25.0051 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +372 0 1 0 25.5052 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +373 0 1 0 26.0053 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +374 0 1 0 26.5054 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +375 0 1 0 27.0055 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +376 0 1 0 27.5056 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +377 0 1 0 28.0057 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +378 0 1 0 28.5058 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +379 0 1 0 29.0059 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +380 0 1 0 29.506 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +381 0 1 0 30.0061 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +382 0 1 0 30.5062 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +383 0 1 0 31.0063 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +384 0 1 0 31.5064 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +385 0 1 0 32.0065 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +386 0 1 0 32.5066 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +387 0 1 0 33.0067 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +388 0 1 0 33.5068 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +389 0 1 0 34.0069 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +390 0 1 0 34.507 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +391 0 1 0 35.0071 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +392 0 1 0 35.5072 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +393 0 1 0 36.0073 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +394 0 1 0 36.5074 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +395 0 1 0 37.0075 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +396 0 1 0 37.5076 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +397 0 1 0 38.0077 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +398 0 1 0 38.5078 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +399 0 1 0 39.0079 6.9296 9.99798 0 0 1 0.866 8 6 1 0 +400 0 1 0 39.508 7.79581 9.99798 0 0 1 0.866 8 6 1 0 +401 0 1 0 0 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +402 0 1 0 0.500101 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +403 0 1 0 1.0002 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +404 0 1 0 1.5003 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +405 0 1 0 2.0004 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +406 0 1 0 2.50051 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +407 0 1 0 3.00061 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +408 0 1 0 3.50071 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +409 0 1 0 4.00081 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +410 0 1 0 4.50091 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +411 0 1 0 5.00101 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +412 0 1 0 5.50111 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +413 0 1 0 6.00121 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +414 0 1 0 6.50132 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +415 0 1 0 7.00142 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +416 0 1 0 7.50152 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +417 0 1 0 8.00162 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +418 0 1 0 8.50172 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +419 0 1 0 9.00182 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +420 0 1 0 9.50192 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +421 0 1 0 10.002 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +422 0 1 0 10.5021 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +423 0 1 0 11.0022 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +424 0 1 0 11.5023 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +425 0 1 0 12.0024 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +426 0 1 0 12.5025 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +427 0 1 0 13.0026 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +428 0 1 0 13.5027 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +429 0 1 0 14.0028 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +430 0 1 0 14.5029 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +431 0 1 0 15.003 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +432 0 1 0 15.5031 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +433 0 1 0 16.0032 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +434 0 1 0 16.5033 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +435 0 1 0 17.0034 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +436 0 1 0 17.5035 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +437 0 1 0 18.0036 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +438 0 1 0 18.5037 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +439 0 1 0 19.0038 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +440 0 1 0 19.5039 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +441 0 1 0 20.004 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +442 0 1 0 20.5041 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +443 0 1 0 21.0042 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +444 0 1 0 21.5043 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +445 0 1 0 22.0045 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +446 0 1 0 22.5046 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +447 0 1 0 23.0047 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +448 0 1 0 23.5048 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +449 0 1 0 24.0049 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +450 0 1 0 24.505 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +451 0 1 0 25.0051 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +452 0 1 0 25.5052 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +453 0 1 0 26.0053 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +454 0 1 0 26.5054 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +455 0 1 0 27.0055 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +456 0 1 0 27.5056 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +457 0 1 0 28.0057 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +458 0 1 0 28.5058 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +459 0 1 0 29.0059 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +460 0 1 0 29.506 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +461 0 1 0 30.0061 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +462 0 1 0 30.5062 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +463 0 1 0 31.0063 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +464 0 1 0 31.5064 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +465 0 1 0 32.0065 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +466 0 1 0 32.5066 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +467 0 1 0 33.0067 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +468 0 1 0 33.5068 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +469 0 1 0 34.0069 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +470 0 1 0 34.507 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +471 0 1 0 35.0071 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +472 0 1 0 35.5072 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +473 0 1 0 36.0073 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +474 0 1 0 36.5074 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +475 0 1 0 37.0075 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +476 0 1 0 37.5076 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +477 0 1 0 38.0077 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +478 0 1 0 38.5078 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +479 0 1 0 39.0079 8.66201 9.99798 0 0 1 0.866 8 6 1 0 +480 0 1 0 39.508 9.52821 9.99798 0 0 1 0.866 8 6 1 0 +481 0 1 0 0 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +482 0 1 0 0.500101 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +483 0 1 0 1.0002 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +484 0 1 0 1.5003 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +485 0 1 0 2.0004 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +486 0 1 0 2.50051 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +487 0 1 0 3.00061 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +488 0 1 0 3.50071 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +489 0 1 0 4.00081 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +490 0 1 0 4.50091 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +491 0 1 0 5.00101 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +492 0 1 0 5.50111 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +493 0 1 0 6.00121 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +494 0 1 0 6.50132 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +495 0 1 0 7.00142 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +496 0 1 0 7.50152 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +497 0 1 0 8.00162 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +498 0 1 0 8.50172 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +499 0 1 0 9.00182 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +500 0 1 0 9.50192 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +501 0 1 0 10.002 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +502 0 1 0 10.5021 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +503 0 1 0 11.0022 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +504 0 1 0 11.5023 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +505 0 1 0 12.0024 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +506 0 1 0 12.5025 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +507 0 1 0 13.0026 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +508 0 1 0 13.5027 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +509 0 1 0 14.0028 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +510 0 1 0 14.5029 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +511 0 1 0 15.003 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +512 0 1 0 15.5031 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +513 0 1 0 16.0032 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +514 0 1 0 16.5033 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +515 0 1 0 17.0034 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +516 0 1 0 17.5035 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +517 0 1 0 18.0036 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +518 0 1 0 18.5037 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +519 0 1 0 19.0038 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +520 0 1 0 19.5039 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +521 0 1 0 20.004 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +522 0 1 0 20.5041 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +523 0 1 0 21.0042 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +524 0 1 0 21.5043 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +525 0 1 0 22.0045 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +526 0 1 0 22.5046 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +527 0 1 0 23.0047 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +528 0 1 0 23.5048 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +529 0 1 0 24.0049 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +530 0 1 0 24.505 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +531 0 1 0 25.0051 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +532 0 1 0 25.5052 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +533 0 1 0 26.0053 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +534 0 1 0 26.5054 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +535 0 1 0 27.0055 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +536 0 1 0 27.5056 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +537 0 1 0 28.0057 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +538 0 1 0 28.5058 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +539 0 1 0 29.0059 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +540 0 1 0 29.506 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +541 0 1 0 30.0061 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +542 0 1 0 30.5062 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +543 0 1 0 31.0063 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +544 0 1 0 31.5064 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +545 0 1 0 32.0065 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +546 0 1 0 32.5066 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +547 0 1 0 33.0067 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +548 0 1 0 33.5068 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +549 0 1 0 34.0069 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +550 0 1 0 34.507 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +551 0 1 0 35.0071 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +552 0 1 0 35.5072 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +553 0 1 0 36.0073 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +554 0 1 0 36.5074 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +555 0 1 0 37.0075 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +556 0 1 0 37.5076 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +557 0 1 0 38.0077 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +558 0 1 0 38.5078 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +559 0 1 0 39.0079 10.3944 9.99798 0 0 1 0.866 8 6 1 0 +560 0 1 0 39.508 11.2606 9.99798 0 0 1 0.866 8 6 1 0 +561 0 1 0 0 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +562 0 1 0 0.500101 12.993 9.99798 0 0 1 0.866 8 6 1 0 +563 0 1 0 1.0002 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +564 0 1 0 1.5003 12.993 9.99798 0 0 1 0.866 8 6 1 0 +565 0 1 0 2.0004 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +566 0 1 0 2.50051 12.993 9.99798 0 0 1 0.866 8 6 1 0 +567 0 1 0 3.00061 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +568 0 1 0 3.50071 12.993 9.99798 0 0 1 0.866 8 6 1 0 +569 0 1 0 4.00081 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +570 0 1 0 4.50091 12.993 9.99798 0 0 1 0.866 8 6 1 0 +571 0 1 0 5.00101 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +572 0 1 0 5.50111 12.993 9.99798 0 0 1 0.866 8 6 1 0 +573 0 1 0 6.00121 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +574 0 1 0 6.50132 12.993 9.99798 0 0 1 0.866 8 6 1 0 +575 0 1 0 7.00142 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +576 0 1 0 7.50152 12.993 9.99798 0 0 1 0.866 8 6 1 0 +577 0 1 0 8.00162 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +578 0 1 0 8.50172 12.993 9.99798 0 0 1 0.866 8 6 1 0 +579 0 1 0 9.00182 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +580 0 1 0 9.50192 12.993 9.99798 0 0 1 0.866 8 6 1 0 +581 0 1 0 10.002 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +582 0 1 0 10.5021 12.993 9.99798 0 0 1 0.866 8 6 1 0 +583 0 1 0 11.0022 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +584 0 1 0 11.5023 12.993 9.99798 0 0 1 0.866 8 6 1 0 +585 0 1 0 12.0024 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +586 0 1 0 12.5025 12.993 9.99798 0 0 1 0.866 8 6 1 0 +587 0 1 0 13.0026 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +588 0 1 0 13.5027 12.993 9.99798 0 0 1 0.866 8 6 1 0 +589 0 1 0 14.0028 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +590 0 1 0 14.5029 12.993 9.99798 0 0 1 0.866 8 6 1 0 +591 0 1 0 15.003 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +592 0 1 0 15.5031 12.993 9.99798 0 0 1 0.866 8 6 1 0 +593 0 1 0 16.0032 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +594 0 1 0 16.5033 12.993 9.99798 0 0 1 0.866 8 6 1 0 +595 0 1 0 17.0034 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +596 0 1 0 17.5035 12.993 9.99798 0 0 1 0.866 8 6 1 0 +597 0 1 0 18.0036 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +598 0 1 0 18.5037 12.993 9.99798 0 0 1 0.866 8 6 1 0 +599 0 1 0 19.0038 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +600 0 1 0 19.5039 12.993 9.99798 0 0 1 0.866 8 6 1 0 +601 0 1 0 20.004 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +602 0 1 0 20.5041 12.993 9.99798 0 0 1 0.866 8 6 1 0 +603 0 1 0 21.0042 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +604 0 1 0 21.5043 12.993 9.99798 0 0 1 0.866 8 6 1 0 +605 0 1 0 22.0045 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +606 0 1 0 22.5046 12.993 9.99798 0 0 1 0.866 8 6 1 0 +607 0 1 0 23.0047 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +608 0 1 0 23.5048 12.993 9.99798 0 0 1 0.866 8 6 1 0 +609 0 1 0 24.0049 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +610 0 1 0 24.505 12.993 9.99798 0 0 1 0.866 8 6 1 0 +611 0 1 0 25.0051 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +612 0 1 0 25.5052 12.993 9.99798 0 0 1 0.866 8 6 1 0 +613 0 1 0 26.0053 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +614 0 1 0 26.5054 12.993 9.99798 0 0 1 0.866 8 6 1 0 +615 0 1 0 27.0055 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +616 0 1 0 27.5056 12.993 9.99798 0 0 1 0.866 8 6 1 0 +617 0 1 0 28.0057 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +618 0 1 0 28.5058 12.993 9.99798 0 0 1 0.866 8 6 1 0 +619 0 1 0 29.0059 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +620 0 1 0 29.506 12.993 9.99798 0 0 1 0.866 8 6 1 0 +621 0 1 0 30.0061 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +622 0 1 0 30.5062 12.993 9.99798 0 0 1 0.866 8 6 1 0 +623 0 1 0 31.0063 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +624 0 1 0 31.5064 12.993 9.99798 0 0 1 0.866 8 6 1 0 +625 0 1 0 32.0065 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +626 0 1 0 32.5066 12.993 9.99798 0 0 1 0.866 8 6 1 0 +627 0 1 0 33.0067 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +628 0 1 0 33.5068 12.993 9.99798 0 0 1 0.866 8 6 1 0 +629 0 1 0 34.0069 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +630 0 1 0 34.507 12.993 9.99798 0 0 1 0.866 8 6 1 0 +631 0 1 0 35.0071 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +632 0 1 0 35.5072 12.993 9.99798 0 0 1 0.866 8 6 1 0 +633 0 1 0 36.0073 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +634 0 1 0 36.5074 12.993 9.99798 0 0 1 0.866 8 6 1 0 +635 0 1 0 37.0075 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +636 0 1 0 37.5076 12.993 9.99798 0 0 1 0.866 8 6 1 0 +637 0 1 0 38.0077 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +638 0 1 0 38.5078 12.993 9.99798 0 0 1 0.866 8 6 1 0 +639 0 1 0 39.0079 12.1268 9.99798 0 0 1 0.866 8 6 1 0 +640 0 1 0 39.508 12.993 9.99798 0 0 1 0.866 8 6 1 0 +641 0 1 0 0 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +642 0 1 0 0.500101 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +643 0 1 0 1.0002 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +644 0 1 0 1.5003 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +645 0 1 0 2.0004 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +646 0 1 0 2.50051 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +647 0 1 0 3.00061 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +648 0 1 0 3.50071 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +649 0 1 0 4.00081 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +650 0 1 0 4.50091 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +651 0 1 0 5.00101 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +652 0 1 0 5.50111 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +653 0 1 0 6.00121 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +654 0 1 0 6.50132 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +655 0 1 0 7.00142 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +656 0 1 0 7.50152 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +657 0 1 0 8.00162 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +658 0 1 0 8.50172 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +659 0 1 0 9.00182 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +660 0 1 0 9.50192 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +661 0 1 0 10.002 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +662 0 1 0 10.5021 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +663 0 1 0 11.0022 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +664 0 1 0 11.5023 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +665 0 1 0 12.0024 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +666 0 1 0 12.5025 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +667 0 1 0 13.0026 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +668 0 1 0 13.5027 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +669 0 1 0 14.0028 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +670 0 1 0 14.5029 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +671 0 1 0 15.003 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +672 0 1 0 15.5031 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +673 0 1 0 16.0032 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +674 0 1 0 16.5033 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +675 0 1 0 17.0034 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +676 0 1 0 17.5035 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +677 0 1 0 18.0036 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +678 0 1 0 18.5037 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +679 0 1 0 19.0038 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +680 0 1 0 19.5039 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +681 0 1 0 20.004 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +682 0 1 0 20.5041 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +683 0 1 0 21.0042 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +684 0 1 0 21.5043 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +685 0 1 0 22.0045 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +686 0 1 0 22.5046 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +687 0 1 0 23.0047 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +688 0 1 0 23.5048 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +689 0 1 0 24.0049 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +690 0 1 0 24.505 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +691 0 1 0 25.0051 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +692 0 1 0 25.5052 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +693 0 1 0 26.0053 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +694 0 1 0 26.5054 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +695 0 1 0 27.0055 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +696 0 1 0 27.5056 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +697 0 1 0 28.0057 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +698 0 1 0 28.5058 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +699 0 1 0 29.0059 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +700 0 1 0 29.506 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +701 0 1 0 30.0061 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +702 0 1 0 30.5062 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +703 0 1 0 31.0063 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +704 0 1 0 31.5064 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +705 0 1 0 32.0065 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +706 0 1 0 32.5066 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +707 0 1 0 33.0067 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +708 0 1 0 33.5068 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +709 0 1 0 34.0069 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +710 0 1 0 34.507 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +711 0 1 0 35.0071 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +712 0 1 0 35.5072 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +713 0 1 0 36.0073 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +714 0 1 0 36.5074 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +715 0 1 0 37.0075 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +716 0 1 0 37.5076 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +717 0 1 0 38.0077 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +718 0 1 0 38.5078 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +719 0 1 0 39.0079 13.8592 9.99798 0 0 1 0.866 8 6 1 0 +720 0 1 0 39.508 14.7254 9.99798 0 0 1 0.866 8 6 1 0 +721 0 1 0 0 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +722 0 1 0 0.500101 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +723 0 1 0 1.0002 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +724 0 1 0 1.5003 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +725 0 1 0 2.0004 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +726 0 1 0 2.50051 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +727 0 1 0 3.00061 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +728 0 1 0 3.50071 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +729 0 1 0 4.00081 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +730 0 1 0 4.50091 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +731 0 1 0 5.00101 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +732 0 1 0 5.50111 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +733 0 1 0 6.00121 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +734 0 1 0 6.50132 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +735 0 1 0 7.00142 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +736 0 1 0 7.50152 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +737 0 1 0 8.00162 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +738 0 1 0 8.50172 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +739 0 1 0 9.00182 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +740 0 1 0 9.50192 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +741 0 1 0 10.002 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +742 0 1 0 10.5021 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +743 0 1 0 11.0022 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +744 0 1 0 11.5023 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +745 0 1 0 12.0024 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +746 0 1 0 12.5025 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +747 0 1 0 13.0026 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +748 0 1 0 13.5027 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +749 0 1 0 14.0028 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +750 0 1 0 14.5029 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +751 0 1 0 15.003 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +752 0 1 0 15.5031 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +753 0 1 0 16.0032 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +754 0 1 0 16.5033 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +755 0 1 0 17.0034 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +756 0 1 0 17.5035 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +757 0 1 0 18.0036 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +758 0 1 0 18.5037 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +759 0 1 0 19.0038 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +760 0 1 0 19.5039 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +761 0 1 0 20.004 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +762 0 1 0 20.5041 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +763 0 1 0 21.0042 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +764 0 1 0 21.5043 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +765 0 1 0 22.0045 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +766 0 1 0 22.5046 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +767 0 1 0 23.0047 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +768 0 1 0 23.5048 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +769 0 1 0 24.0049 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +770 0 1 0 24.505 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +771 0 1 0 25.0051 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +772 0 1 0 25.5052 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +773 0 1 0 26.0053 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +774 0 1 0 26.5054 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +775 0 1 0 27.0055 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +776 0 1 0 27.5056 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +777 0 1 0 28.0057 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +778 0 1 0 28.5058 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +779 0 1 0 29.0059 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +780 0 1 0 29.506 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +781 0 1 0 30.0061 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +782 0 1 0 30.5062 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +783 0 1 0 31.0063 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +784 0 1 0 31.5064 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +785 0 1 0 32.0065 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +786 0 1 0 32.5066 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +787 0 1 0 33.0067 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +788 0 1 0 33.5068 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +789 0 1 0 34.0069 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +790 0 1 0 34.507 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +791 0 1 0 35.0071 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +792 0 1 0 35.5072 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +793 0 1 0 36.0073 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +794 0 1 0 36.5074 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +795 0 1 0 37.0075 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +796 0 1 0 37.5076 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +797 0 1 0 38.0077 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +798 0 1 0 38.5078 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +799 0 1 0 39.0079 15.5916 9.99798 0 0 1 0.866 8 6 1 0 +800 0 1 0 39.508 16.4578 9.99798 0 0 1 0.866 8 6 1 0 +801 0 1 0 0 17.324 9.99798 0 0 1 0.866 8 6 1 0 +802 0 1 0 0.500101 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +803 0 1 0 1.0002 17.324 9.99798 0 0 1 0.866 8 6 1 0 +804 0 1 0 1.5003 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +805 0 1 0 2.0004 17.324 9.99798 0 0 1 0.866 8 6 1 0 +806 0 1 0 2.50051 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +807 0 1 0 3.00061 17.324 9.99798 0 0 1 0.866 8 6 1 0 +808 0 1 0 3.50071 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +809 0 1 0 4.00081 17.324 9.99798 0 0 1 0.866 8 6 1 0 +810 0 1 0 4.50091 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +811 0 1 0 5.00101 17.324 9.99798 0 0 1 0.866 8 6 1 0 +812 0 1 0 5.50111 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +813 0 1 0 6.00121 17.324 9.99798 0 0 1 0.866 8 6 1 0 +814 0 1 0 6.50132 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +815 0 1 0 7.00142 17.324 9.99798 0 0 1 0.866 8 6 1 0 +816 0 1 0 7.50152 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +817 0 1 0 8.00162 17.324 9.99798 0 0 1 0.866 8 6 1 0 +818 0 1 0 8.50172 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +819 0 1 0 9.00182 17.324 9.99798 0 0 1 0.866 8 6 1 0 +820 0 1 0 9.50192 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +821 0 1 0 10.002 17.324 9.99798 0 0 1 0.866 8 6 1 0 +822 0 1 0 10.5021 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +823 0 1 0 11.0022 17.324 9.99798 0 0 1 0.866 8 6 1 0 +824 0 1 0 11.5023 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +825 0 1 0 12.0024 17.324 9.99798 0 0 1 0.866 8 6 1 0 +826 0 1 0 12.5025 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +827 0 1 0 13.0026 17.324 9.99798 0 0 1 0.866 8 6 1 0 +828 0 1 0 13.5027 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +829 0 1 0 14.0028 17.324 9.99798 0 0 1 0.866 8 6 1 0 +830 0 1 0 14.5029 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +831 0 1 0 15.003 17.324 9.99798 0 0 1 0.866 8 6 1 0 +832 0 1 0 15.5031 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +833 0 1 0 16.0032 17.324 9.99798 0 0 1 0.866 8 6 1 0 +834 0 1 0 16.5033 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +835 0 1 0 17.0034 17.324 9.99798 0 0 1 0.866 8 6 1 0 +836 0 1 0 17.5035 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +837 0 1 0 18.0036 17.324 9.99798 0 0 1 0.866 8 6 1 0 +838 0 1 0 18.5037 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +839 0 1 0 19.0038 17.324 9.99798 0 0 1 0.866 8 6 1 0 +840 0 1 0 19.5039 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +841 0 1 0 20.004 17.324 9.99798 0 0 1 0.866 8 6 1 0 +842 0 1 0 20.5041 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +843 0 1 0 21.0042 17.324 9.99798 0 0 1 0.866 8 6 1 0 +844 0 1 0 21.5043 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +845 0 1 0 22.0045 17.324 9.99798 0 0 1 0.866 8 6 1 0 +846 0 1 0 22.5046 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +847 0 1 0 23.0047 17.324 9.99798 0 0 1 0.866 8 6 1 0 +848 0 1 0 23.5048 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +849 0 1 0 24.0049 17.324 9.99798 0 0 1 0.866 8 6 1 0 +850 0 1 0 24.505 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +851 0 1 0 25.0051 17.324 9.99798 0 0 1 0.866 8 6 1 0 +852 0 1 0 25.5052 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +853 0 1 0 26.0053 17.324 9.99798 0 0 1 0.866 8 6 1 0 +854 0 1 0 26.5054 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +855 0 1 0 27.0055 17.324 9.99798 0 0 1 0.866 8 6 1 0 +856 0 1 0 27.5056 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +857 0 1 0 28.0057 17.324 9.99798 0 0 1 0.866 8 6 1 0 +858 0 1 0 28.5058 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +859 0 1 0 29.0059 17.324 9.99798 0 0 1 0.866 8 6 1 0 +860 0 1 0 29.506 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +861 0 1 0 30.0061 17.324 9.99798 0 0 1 0.866 8 6 1 0 +862 0 1 0 30.5062 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +863 0 1 0 31.0063 17.324 9.99798 0 0 1 0.866 8 6 1 0 +864 0 1 0 31.5064 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +865 0 1 0 32.0065 17.324 9.99798 0 0 1 0.866 8 6 1 0 +866 0 1 0 32.5066 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +867 0 1 0 33.0067 17.324 9.99798 0 0 1 0.866 8 6 1 0 +868 0 1 0 33.5068 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +869 0 1 0 34.0069 17.324 9.99798 0 0 1 0.866 8 6 1 0 +870 0 1 0 34.507 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +871 0 1 0 35.0071 17.324 9.99798 0 0 1 0.866 8 6 1 0 +872 0 1 0 35.5072 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +873 0 1 0 36.0073 17.324 9.99798 0 0 1 0.866 8 6 1 0 +874 0 1 0 36.5074 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +875 0 1 0 37.0075 17.324 9.99798 0 0 1 0.866 8 6 1 0 +876 0 1 0 37.5076 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +877 0 1 0 38.0077 17.324 9.99798 0 0 1 0.866 8 6 1 0 +878 0 1 0 38.5078 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +879 0 1 0 39.0079 17.324 9.99798 0 0 1 0.866 8 6 1 0 +880 0 1 0 39.508 18.1902 9.99798 0 0 1 0.866 8 6 1 0 +881 0 1 0 0 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +882 0 1 0 0.500101 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +883 0 1 0 1.0002 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +884 0 1 0 1.5003 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +885 0 1 0 2.0004 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +886 0 1 0 2.50051 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +887 0 1 0 3.00061 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +888 0 1 0 3.50071 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +889 0 1 0 4.00081 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +890 0 1 0 4.50091 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +891 0 1 0 5.00101 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +892 0 1 0 5.50111 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +893 0 1 0 6.00121 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +894 0 1 0 6.50132 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +895 0 1 0 7.00142 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +896 0 1 0 7.50152 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +897 0 1 0 8.00162 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +898 0 1 0 8.50172 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +899 0 1 0 9.00182 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +900 0 1 0 9.50192 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +901 0 1 0 10.002 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +902 0 1 0 10.5021 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +903 0 1 0 11.0022 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +904 0 1 0 11.5023 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +905 0 1 0 12.0024 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +906 0 1 0 12.5025 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +907 0 1 0 13.0026 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +908 0 1 0 13.5027 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +909 0 1 0 14.0028 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +910 0 1 0 14.5029 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +911 0 1 0 15.003 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +912 0 1 0 15.5031 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +913 0 1 0 16.0032 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +914 0 1 0 16.5033 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +915 0 1 0 17.0034 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +916 0 1 0 17.5035 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +917 0 1 0 18.0036 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +918 0 1 0 18.5037 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +919 0 1 0 19.0038 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +920 0 1 0 19.5039 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +921 0 1 0 20.004 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +922 0 1 0 20.5041 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +923 0 1 0 21.0042 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +924 0 1 0 21.5043 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +925 0 1 0 22.0045 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +926 0 1 0 22.5046 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +927 0 1 0 23.0047 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +928 0 1 0 23.5048 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +929 0 1 0 24.0049 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +930 0 1 0 24.505 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +931 0 1 0 25.0051 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +932 0 1 0 25.5052 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +933 0 1 0 26.0053 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +934 0 1 0 26.5054 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +935 0 1 0 27.0055 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +936 0 1 0 27.5056 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +937 0 1 0 28.0057 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +938 0 1 0 28.5058 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +939 0 1 0 29.0059 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +940 0 1 0 29.506 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +941 0 1 0 30.0061 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +942 0 1 0 30.5062 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +943 0 1 0 31.0063 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +944 0 1 0 31.5064 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +945 0 1 0 32.0065 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +946 0 1 0 32.5066 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +947 0 1 0 33.0067 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +948 0 1 0 33.5068 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +949 0 1 0 34.0069 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +950 0 1 0 34.507 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +951 0 1 0 35.0071 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +952 0 1 0 35.5072 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +953 0 1 0 36.0073 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +954 0 1 0 36.5074 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +955 0 1 0 37.0075 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +956 0 1 0 37.5076 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +957 0 1 0 38.0077 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +958 0 1 0 38.5078 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +959 0 1 0 39.0079 19.0564 9.99798 0 0 1 0.866 8 6 1 0 +960 0 1 0 39.508 19.9226 9.99798 0 0 1 0.866 8 6 1 0 +961 0 1 0 0 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +962 0 1 0 0.500101 21.655 9.99798 0 0 1 0.866 8 6 1 0 +963 0 1 0 1.0002 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +964 0 1 0 1.5003 21.655 9.99798 0 0 1 0.866 8 6 1 0 +965 0 1 0 2.0004 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +966 0 1 0 2.50051 21.655 9.99798 0 0 1 0.866 8 6 1 0 +967 0 1 0 3.00061 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +968 0 1 0 3.50071 21.655 9.99798 0 0 1 0.866 8 6 1 0 +969 0 1 0 4.00081 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +970 0 1 0 4.50091 21.655 9.99798 0 0 1 0.866 8 6 1 0 +971 0 1 0 5.00101 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +972 0 1 0 5.50111 21.655 9.99798 0 0 1 0.866 8 6 1 0 +973 0 1 0 6.00121 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +974 0 1 0 6.50132 21.655 9.99798 0 0 1 0.866 8 6 1 0 +975 0 1 0 7.00142 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +976 0 1 0 7.50152 21.655 9.99798 0 0 1 0.866 8 6 1 0 +977 0 1 0 8.00162 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +978 0 1 0 8.50172 21.655 9.99798 0 0 1 0.866 8 6 1 0 +979 0 1 0 9.00182 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +980 0 1 0 9.50192 21.655 9.99798 0 0 1 0.866 8 6 1 0 +981 0 1 0 10.002 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +982 0 1 0 10.5021 21.655 9.99798 0 0 1 0.866 8 6 1 0 +983 0 1 0 11.0022 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +984 0 1 0 11.5023 21.655 9.99798 0 0 1 0.866 8 6 1 0 +985 0 1 0 12.0024 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +986 0 1 0 12.5025 21.655 9.99798 0 0 1 0.866 8 6 1 0 +987 0 1 0 13.0026 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +988 0 1 0 13.5027 21.655 9.99798 0 0 1 0.866 8 6 1 0 +989 0 1 0 14.0028 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +990 0 1 0 14.5029 21.655 9.99798 0 0 1 0.866 8 6 1 0 +991 0 1 0 15.003 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +992 0 1 0 15.5031 21.655 9.99798 0 0 1 0.866 8 6 1 0 +993 0 1 0 16.0032 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +994 0 1 0 16.5033 21.655 9.99798 0 0 1 0.866 8 6 1 0 +995 0 1 0 17.0034 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +996 0 1 0 17.5035 21.655 9.99798 0 0 1 0.866 8 6 1 0 +997 0 1 0 18.0036 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +998 0 1 0 18.5037 21.655 9.99798 0 0 1 0.866 8 6 1 0 +999 0 1 0 19.0038 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1000 0 1 0 19.5039 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1001 0 1 0 20.004 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1002 0 1 0 20.5041 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1003 0 1 0 21.0042 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1004 0 1 0 21.5043 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1005 0 1 0 22.0045 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1006 0 1 0 22.5046 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1007 0 1 0 23.0047 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1008 0 1 0 23.5048 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1009 0 1 0 24.0049 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1010 0 1 0 24.505 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1011 0 1 0 25.0051 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1012 0 1 0 25.5052 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1013 0 1 0 26.0053 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1014 0 1 0 26.5054 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1015 0 1 0 27.0055 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1016 0 1 0 27.5056 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1017 0 1 0 28.0057 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1018 0 1 0 28.5058 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1019 0 1 0 29.0059 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1020 0 1 0 29.506 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1021 0 1 0 30.0061 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1022 0 1 0 30.5062 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1023 0 1 0 31.0063 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1024 0 1 0 31.5064 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1025 0 1 0 32.0065 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1026 0 1 0 32.5066 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1027 0 1 0 33.0067 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1028 0 1 0 33.5068 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1029 0 1 0 34.0069 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1030 0 1 0 34.507 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1031 0 1 0 35.0071 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1032 0 1 0 35.5072 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1033 0 1 0 36.0073 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1034 0 1 0 36.5074 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1035 0 1 0 37.0075 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1036 0 1 0 37.5076 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1037 0 1 0 38.0077 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1038 0 1 0 38.5078 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1039 0 1 0 39.0079 20.7888 9.99798 0 0 1 0.866 8 6 1 0 +1040 0 1 0 39.508 21.655 9.99798 0 0 1 0.866 8 6 1 0 +1041 0 1 0 0 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1042 0 1 0 0.500101 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1043 0 1 0 1.0002 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1044 0 1 0 1.5003 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1045 0 1 0 2.0004 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1046 0 1 0 2.50051 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1047 0 1 0 3.00061 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1048 0 1 0 3.50071 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1049 0 1 0 4.00081 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1050 0 1 0 4.50091 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1051 0 1 0 5.00101 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1052 0 1 0 5.50111 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1053 0 1 0 6.00121 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1054 0 1 0 6.50132 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1055 0 1 0 7.00142 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1056 0 1 0 7.50152 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1057 0 1 0 8.00162 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1058 0 1 0 8.50172 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1059 0 1 0 9.00182 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1060 0 1 0 9.50192 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1061 0 1 0 10.002 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1062 0 1 0 10.5021 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1063 0 1 0 11.0022 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1064 0 1 0 11.5023 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1065 0 1 0 12.0024 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1066 0 1 0 12.5025 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1067 0 1 0 13.0026 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1068 0 1 0 13.5027 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1069 0 1 0 14.0028 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1070 0 1 0 14.5029 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1071 0 1 0 15.003 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1072 0 1 0 15.5031 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1073 0 1 0 16.0032 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1074 0 1 0 16.5033 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1075 0 1 0 17.0034 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1076 0 1 0 17.5035 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1077 0 1 0 18.0036 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1078 0 1 0 18.5037 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1079 0 1 0 19.0038 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1080 0 1 0 19.5039 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1081 0 1 0 20.004 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1082 0 1 0 20.5041 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1083 0 1 0 21.0042 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1084 0 1 0 21.5043 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1085 0 1 0 22.0045 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1086 0 1 0 22.5046 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1087 0 1 0 23.0047 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1088 0 1 0 23.5048 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1089 0 1 0 24.0049 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1090 0 1 0 24.505 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1091 0 1 0 25.0051 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1092 0 1 0 25.5052 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1093 0 1 0 26.0053 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1094 0 1 0 26.5054 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1095 0 1 0 27.0055 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1096 0 1 0 27.5056 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1097 0 1 0 28.0057 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1098 0 1 0 28.5058 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1099 0 1 0 29.0059 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1100 0 1 0 29.506 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1101 0 1 0 30.0061 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1102 0 1 0 30.5062 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1103 0 1 0 31.0063 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1104 0 1 0 31.5064 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1105 0 1 0 32.0065 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1106 0 1 0 32.5066 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1107 0 1 0 33.0067 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1108 0 1 0 33.5068 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1109 0 1 0 34.0069 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1110 0 1 0 34.507 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1111 0 1 0 35.0071 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1112 0 1 0 35.5072 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1113 0 1 0 36.0073 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1114 0 1 0 36.5074 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1115 0 1 0 37.0075 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1116 0 1 0 37.5076 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1117 0 1 0 38.0077 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1118 0 1 0 38.5078 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1119 0 1 0 39.0079 22.5212 9.99798 0 0 1 0.866 8 6 1 0 +1120 0 1 0 39.508 23.3874 9.99798 0 0 1 0.866 8 6 1 0 +1121 0 1 0 0 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1122 0 1 0 0.500101 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1123 0 1 0 1.0002 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1124 0 1 0 1.5003 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1125 0 1 0 2.0004 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1126 0 1 0 2.50051 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1127 0 1 0 3.00061 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1128 0 1 0 3.50071 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1129 0 1 0 4.00081 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1130 0 1 0 4.50091 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1131 0 1 0 5.00101 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1132 0 1 0 5.50111 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1133 0 1 0 6.00121 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1134 0 1 0 6.50132 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1135 0 1 0 7.00142 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1136 0 1 0 7.50152 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1137 0 1 0 8.00162 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1138 0 1 0 8.50172 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1139 0 1 0 9.00182 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1140 0 1 0 9.50192 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1141 0 1 0 10.002 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1142 0 1 0 10.5021 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1143 0 1 0 11.0022 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1144 0 1 0 11.5023 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1145 0 1 0 12.0024 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1146 0 1 0 12.5025 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1147 0 1 0 13.0026 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1148 0 1 0 13.5027 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1149 0 1 0 14.0028 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1150 0 1 0 14.5029 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1151 0 1 0 15.003 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1152 0 1 0 15.5031 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1153 0 1 0 16.0032 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1154 0 1 0 16.5033 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1155 0 1 0 17.0034 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1156 0 1 0 17.5035 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1157 0 1 0 18.0036 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1158 0 1 0 18.5037 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1159 0 1 0 19.0038 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1160 0 1 0 19.5039 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1161 0 1 0 20.004 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1162 0 1 0 20.5041 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1163 0 1 0 21.0042 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1164 0 1 0 21.5043 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1165 0 1 0 22.0045 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1166 0 1 0 22.5046 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1167 0 1 0 23.0047 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1168 0 1 0 23.5048 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1169 0 1 0 24.0049 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1170 0 1 0 24.505 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1171 0 1 0 25.0051 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1172 0 1 0 25.5052 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1173 0 1 0 26.0053 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1174 0 1 0 26.5054 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1175 0 1 0 27.0055 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1176 0 1 0 27.5056 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1177 0 1 0 28.0057 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1178 0 1 0 28.5058 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1179 0 1 0 29.0059 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1180 0 1 0 29.506 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1181 0 1 0 30.0061 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1182 0 1 0 30.5062 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1183 0 1 0 31.0063 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1184 0 1 0 31.5064 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1185 0 1 0 32.0065 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1186 0 1 0 32.5066 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1187 0 1 0 33.0067 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1188 0 1 0 33.5068 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1189 0 1 0 34.0069 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1190 0 1 0 34.507 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1191 0 1 0 35.0071 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1192 0 1 0 35.5072 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1193 0 1 0 36.0073 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1194 0 1 0 36.5074 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1195 0 1 0 37.0075 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1196 0 1 0 37.5076 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1197 0 1 0 38.0077 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1198 0 1 0 38.5078 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1199 0 1 0 39.0079 24.2536 9.99798 0 0 1 0.866 8 6 1 0 +1200 0 1 0 39.508 25.1198 9.99798 0 0 1 0.866 8 6 1 0 +1201 0 1 0 0 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1202 0 1 0 0.500101 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1203 0 1 0 1.0002 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1204 0 1 0 1.5003 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1205 0 1 0 2.0004 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1206 0 1 0 2.50051 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1207 0 1 0 3.00061 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1208 0 1 0 3.50071 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1209 0 1 0 4.00081 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1210 0 1 0 4.50091 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1211 0 1 0 5.00101 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1212 0 1 0 5.50111 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1213 0 1 0 6.00121 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1214 0 1 0 6.50132 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1215 0 1 0 7.00142 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1216 0 1 0 7.50152 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1217 0 1 0 8.00162 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1218 0 1 0 8.50172 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1219 0 1 0 9.00182 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1220 0 1 0 9.50192 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1221 0 1 0 10.002 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1222 0 1 0 10.5021 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1223 0 1 0 11.0022 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1224 0 1 0 11.5023 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1225 0 1 0 12.0024 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1226 0 1 0 12.5025 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1227 0 1 0 13.0026 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1228 0 1 0 13.5027 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1229 0 1 0 14.0028 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1230 0 1 0 14.5029 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1231 0 1 0 15.003 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1232 0 1 0 15.5031 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1233 0 1 0 16.0032 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1234 0 1 0 16.5033 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1235 0 1 0 17.0034 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1236 0 1 0 17.5035 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1237 0 1 0 18.0036 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1238 0 1 0 18.5037 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1239 0 1 0 19.0038 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1240 0 1 0 19.5039 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1241 0 1 0 20.004 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1242 0 1 0 20.5041 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1243 0 1 0 21.0042 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1244 0 1 0 21.5043 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1245 0 1 0 22.0045 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1246 0 1 0 22.5046 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1247 0 1 0 23.0047 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1248 0 1 0 23.5048 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1249 0 1 0 24.0049 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1250 0 1 0 24.505 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1251 0 1 0 25.0051 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1252 0 1 0 25.5052 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1253 0 1 0 26.0053 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1254 0 1 0 26.5054 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1255 0 1 0 27.0055 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1256 0 1 0 27.5056 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1257 0 1 0 28.0057 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1258 0 1 0 28.5058 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1259 0 1 0 29.0059 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1260 0 1 0 29.506 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1261 0 1 0 30.0061 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1262 0 1 0 30.5062 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1263 0 1 0 31.0063 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1264 0 1 0 31.5064 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1265 0 1 0 32.0065 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1266 0 1 0 32.5066 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1267 0 1 0 33.0067 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1268 0 1 0 33.5068 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1269 0 1 0 34.0069 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1270 0 1 0 34.507 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1271 0 1 0 35.0071 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1272 0 1 0 35.5072 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1273 0 1 0 36.0073 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1274 0 1 0 36.5074 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1275 0 1 0 37.0075 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1276 0 1 0 37.5076 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1277 0 1 0 38.0077 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1278 0 1 0 38.5078 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1279 0 1 0 39.0079 25.986 9.99798 0 0 1 0.866 8 6 1 0 +1280 0 1 0 39.508 26.8522 9.99798 0 0 1 0.866 8 6 1 0 +1281 0 1 0 0 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1282 0 1 0 0.500101 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1283 0 1 0 1.0002 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1284 0 1 0 1.5003 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1285 0 1 0 2.0004 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1286 0 1 0 2.50051 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1287 0 1 0 3.00061 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1288 0 1 0 3.50071 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1289 0 1 0 4.00081 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1290 0 1 0 4.50091 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1291 0 1 0 5.00101 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1292 0 1 0 5.50111 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1293 0 1 0 6.00121 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1294 0 1 0 6.50132 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1295 0 1 0 7.00142 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1296 0 1 0 7.50152 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1297 0 1 0 8.00162 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1298 0 1 0 8.50172 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1299 0 1 0 9.00182 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1300 0 1 0 9.50192 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1301 0 1 0 10.002 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1302 0 1 0 10.5021 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1303 0 1 0 11.0022 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1304 0 1 0 11.5023 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1305 0 1 0 12.0024 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1306 0 1 0 12.5025 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1307 0 1 0 13.0026 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1308 0 1 0 13.5027 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1309 0 1 0 14.0028 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1310 0 1 0 14.5029 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1311 0 1 0 15.003 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1312 0 1 0 15.5031 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1313 0 1 0 16.0032 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1314 0 1 0 16.5033 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1315 0 1 0 17.0034 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1316 0 1 0 17.5035 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1317 0 1 0 18.0036 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1318 0 1 0 18.5037 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1319 0 1 0 19.0038 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1320 0 1 0 19.5039 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1321 0 1 0 20.004 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1322 0 1 0 20.5041 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1323 0 1 0 21.0042 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1324 0 1 0 21.5043 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1325 0 1 0 22.0045 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1326 0 1 0 22.5046 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1327 0 1 0 23.0047 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1328 0 1 0 23.5048 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1329 0 1 0 24.0049 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1330 0 1 0 24.505 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1331 0 1 0 25.0051 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1332 0 1 0 25.5052 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1333 0 1 0 26.0053 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1334 0 1 0 26.5054 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1335 0 1 0 27.0055 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1336 0 1 0 27.5056 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1337 0 1 0 28.0057 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1338 0 1 0 28.5058 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1339 0 1 0 29.0059 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1340 0 1 0 29.506 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1341 0 1 0 30.0061 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1342 0 1 0 30.5062 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1343 0 1 0 31.0063 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1344 0 1 0 31.5064 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1345 0 1 0 32.0065 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1346 0 1 0 32.5066 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1347 0 1 0 33.0067 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1348 0 1 0 33.5068 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1349 0 1 0 34.0069 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1350 0 1 0 34.507 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1351 0 1 0 35.0071 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1352 0 1 0 35.5072 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1353 0 1 0 36.0073 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1354 0 1 0 36.5074 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1355 0 1 0 37.0075 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1356 0 1 0 37.5076 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1357 0 1 0 38.0077 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1358 0 1 0 38.5078 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1359 0 1 0 39.0079 27.7184 9.99798 0 0 1 0.866 8 6 1 0 +1360 0 1 0 39.508 28.5846 9.99798 0 0 1 0.866 8 6 1 0 +1361 0 1 0 0 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1362 0 1 0 0.500101 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1363 0 1 0 1.0002 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1364 0 1 0 1.5003 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1365 0 1 0 2.0004 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1366 0 1 0 2.50051 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1367 0 1 0 3.00061 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1368 0 1 0 3.50071 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1369 0 1 0 4.00081 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1370 0 1 0 4.50091 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1371 0 1 0 5.00101 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1372 0 1 0 5.50111 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1373 0 1 0 6.00121 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1374 0 1 0 6.50132 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1375 0 1 0 7.00142 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1376 0 1 0 7.50152 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1377 0 1 0 8.00162 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1378 0 1 0 8.50172 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1379 0 1 0 9.00182 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1380 0 1 0 9.50192 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1381 0 1 0 10.002 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1382 0 1 0 10.5021 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1383 0 1 0 11.0022 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1384 0 1 0 11.5023 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1385 0 1 0 12.0024 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1386 0 1 0 12.5025 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1387 0 1 0 13.0026 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1388 0 1 0 13.5027 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1389 0 1 0 14.0028 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1390 0 1 0 14.5029 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1391 0 1 0 15.003 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1392 0 1 0 15.5031 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1393 0 1 0 16.0032 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1394 0 1 0 16.5033 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1395 0 1 0 17.0034 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1396 0 1 0 17.5035 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1397 0 1 0 18.0036 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1398 0 1 0 18.5037 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1399 0 1 0 19.0038 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1400 0 1 0 19.5039 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1401 0 1 0 20.004 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1402 0 1 0 20.5041 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1403 0 1 0 21.0042 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1404 0 1 0 21.5043 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1405 0 1 0 22.0045 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1406 0 1 0 22.5046 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1407 0 1 0 23.0047 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1408 0 1 0 23.5048 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1409 0 1 0 24.0049 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1410 0 1 0 24.505 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1411 0 1 0 25.0051 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1412 0 1 0 25.5052 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1413 0 1 0 26.0053 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1414 0 1 0 26.5054 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1415 0 1 0 27.0055 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1416 0 1 0 27.5056 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1417 0 1 0 28.0057 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1418 0 1 0 28.5058 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1419 0 1 0 29.0059 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1420 0 1 0 29.506 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1421 0 1 0 30.0061 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1422 0 1 0 30.5062 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1423 0 1 0 31.0063 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1424 0 1 0 31.5064 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1425 0 1 0 32.0065 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1426 0 1 0 32.5066 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1427 0 1 0 33.0067 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1428 0 1 0 33.5068 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1429 0 1 0 34.0069 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1430 0 1 0 34.507 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1431 0 1 0 35.0071 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1432 0 1 0 35.5072 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1433 0 1 0 36.0073 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1434 0 1 0 36.5074 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1435 0 1 0 37.0075 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1436 0 1 0 37.5076 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1437 0 1 0 38.0077 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1438 0 1 0 38.5078 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1439 0 1 0 39.0079 29.4508 9.99798 0 0 1 0.866 8 6 1 0 +1440 0 1 0 39.508 30.317 9.99798 0 0 1 0.866 8 6 1 0 +1441 0 1 0 0 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1442 0 1 0 0.500101 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1443 0 1 0 1.0002 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1444 0 1 0 1.5003 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1445 0 1 0 2.0004 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1446 0 1 0 2.50051 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1447 0 1 0 3.00061 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1448 0 1 0 3.50071 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1449 0 1 0 4.00081 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1450 0 1 0 4.50091 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1451 0 1 0 5.00101 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1452 0 1 0 5.50111 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1453 0 1 0 6.00121 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1454 0 1 0 6.50132 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1455 0 1 0 7.00142 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1456 0 1 0 7.50152 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1457 0 1 0 8.00162 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1458 0 1 0 8.50172 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1459 0 1 0 9.00182 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1460 0 1 0 9.50192 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1461 0 1 0 10.002 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1462 0 1 0 10.5021 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1463 0 1 0 11.0022 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1464 0 1 0 11.5023 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1465 0 1 0 12.0024 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1466 0 1 0 12.5025 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1467 0 1 0 13.0026 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1468 0 1 0 13.5027 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1469 0 1 0 14.0028 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1470 0 1 0 14.5029 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1471 0 1 0 15.003 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1472 0 1 0 15.5031 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1473 0 1 0 16.0032 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1474 0 1 0 16.5033 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1475 0 1 0 17.0034 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1476 0 1 0 17.5035 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1477 0 1 0 18.0036 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1478 0 1 0 18.5037 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1479 0 1 0 19.0038 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1480 0 1 0 19.5039 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1481 0 1 0 20.004 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1482 0 1 0 20.5041 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1483 0 1 0 21.0042 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1484 0 1 0 21.5043 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1485 0 1 0 22.0045 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1486 0 1 0 22.5046 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1487 0 1 0 23.0047 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1488 0 1 0 23.5048 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1489 0 1 0 24.0049 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1490 0 1 0 24.505 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1491 0 1 0 25.0051 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1492 0 1 0 25.5052 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1493 0 1 0 26.0053 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1494 0 1 0 26.5054 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1495 0 1 0 27.0055 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1496 0 1 0 27.5056 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1497 0 1 0 28.0057 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1498 0 1 0 28.5058 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1499 0 1 0 29.0059 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1500 0 1 0 29.506 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1501 0 1 0 30.0061 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1502 0 1 0 30.5062 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1503 0 1 0 31.0063 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1504 0 1 0 31.5064 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1505 0 1 0 32.0065 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1506 0 1 0 32.5066 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1507 0 1 0 33.0067 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1508 0 1 0 33.5068 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1509 0 1 0 34.0069 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1510 0 1 0 34.507 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1511 0 1 0 35.0071 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1512 0 1 0 35.5072 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1513 0 1 0 36.0073 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1514 0 1 0 36.5074 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1515 0 1 0 37.0075 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1516 0 1 0 37.5076 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1517 0 1 0 38.0077 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1518 0 1 0 38.5078 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1519 0 1 0 39.0079 31.1832 9.99798 0 0 1 0.866 8 6 1 0 +1520 0 1 0 39.508 32.0494 9.99798 0 0 1 0.866 8 6 1 0 +1521 0 1 0 0 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1522 0 1 0 0.500101 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1523 0 1 0 1.0002 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1524 0 1 0 1.5003 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1525 0 1 0 2.0004 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1526 0 1 0 2.50051 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1527 0 1 0 3.00061 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1528 0 1 0 3.50071 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1529 0 1 0 4.00081 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1530 0 1 0 4.50091 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1531 0 1 0 5.00101 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1532 0 1 0 5.50111 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1533 0 1 0 6.00121 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1534 0 1 0 6.50132 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1535 0 1 0 7.00142 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1536 0 1 0 7.50152 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1537 0 1 0 8.00162 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1538 0 1 0 8.50172 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1539 0 1 0 9.00182 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1540 0 1 0 9.50192 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1541 0 1 0 10.002 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1542 0 1 0 10.5021 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1543 0 1 0 11.0022 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1544 0 1 0 11.5023 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1545 0 1 0 12.0024 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1546 0 1 0 12.5025 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1547 0 1 0 13.0026 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1548 0 1 0 13.5027 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1549 0 1 0 14.0028 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1550 0 1 0 14.5029 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1551 0 1 0 15.003 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1552 0 1 0 15.5031 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1553 0 1 0 16.0032 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1554 0 1 0 16.5033 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1555 0 1 0 17.0034 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1556 0 1 0 17.5035 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1557 0 1 0 18.0036 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1558 0 1 0 18.5037 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1559 0 1 0 19.0038 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1560 0 1 0 19.5039 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1561 0 1 0 20.004 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1562 0 1 0 20.5041 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1563 0 1 0 21.0042 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1564 0 1 0 21.5043 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1565 0 1 0 22.0045 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1566 0 1 0 22.5046 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1567 0 1 0 23.0047 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1568 0 1 0 23.5048 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1569 0 1 0 24.0049 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1570 0 1 0 24.505 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1571 0 1 0 25.0051 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1572 0 1 0 25.5052 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1573 0 1 0 26.0053 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1574 0 1 0 26.5054 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1575 0 1 0 27.0055 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1576 0 1 0 27.5056 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1577 0 1 0 28.0057 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1578 0 1 0 28.5058 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1579 0 1 0 29.0059 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1580 0 1 0 29.506 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1581 0 1 0 30.0061 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1582 0 1 0 30.5062 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1583 0 1 0 31.0063 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1584 0 1 0 31.5064 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1585 0 1 0 32.0065 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1586 0 1 0 32.5066 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1587 0 1 0 33.0067 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1588 0 1 0 33.5068 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1589 0 1 0 34.0069 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1590 0 1 0 34.507 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1591 0 1 0 35.0071 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1592 0 1 0 35.5072 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1593 0 1 0 36.0073 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1594 0 1 0 36.5074 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1595 0 1 0 37.0075 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1596 0 1 0 37.5076 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1597 0 1 0 38.0077 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1598 0 1 0 38.5078 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1599 0 1 0 39.0079 32.9156 9.99798 0 0 1 0.866 8 6 1 0 +1600 0 1 0 39.508 33.7818 9.99798 0 0 1 0.866 8 6 1 0 +1601 0 1 0 0 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1602 0 1 0 0.500101 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1603 0 1 0 1.0002 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1604 0 1 0 1.5003 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1605 0 1 0 2.0004 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1606 0 1 0 2.50051 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1607 0 1 0 3.00061 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1608 0 1 0 3.50071 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1609 0 1 0 4.00081 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1610 0 1 0 4.50091 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1611 0 1 0 5.00101 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1612 0 1 0 5.50111 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1613 0 1 0 6.00121 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1614 0 1 0 6.50132 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1615 0 1 0 7.00142 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1616 0 1 0 7.50152 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1617 0 1 0 8.00162 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1618 0 1 0 8.50172 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1619 0 1 0 9.00182 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1620 0 1 0 9.50192 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1621 0 1 0 10.002 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1622 0 1 0 10.5021 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1623 0 1 0 11.0022 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1624 0 1 0 11.5023 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1625 0 1 0 12.0024 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1626 0 1 0 12.5025 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1627 0 1 0 13.0026 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1628 0 1 0 13.5027 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1629 0 1 0 14.0028 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1630 0 1 0 14.5029 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1631 0 1 0 15.003 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1632 0 1 0 15.5031 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1633 0 1 0 16.0032 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1634 0 1 0 16.5033 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1635 0 1 0 17.0034 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1636 0 1 0 17.5035 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1637 0 1 0 18.0036 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1638 0 1 0 18.5037 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1639 0 1 0 19.0038 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1640 0 1 0 19.5039 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1641 0 1 0 20.004 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1642 0 1 0 20.5041 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1643 0 1 0 21.0042 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1644 0 1 0 21.5043 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1645 0 1 0 22.0045 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1646 0 1 0 22.5046 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1647 0 1 0 23.0047 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1648 0 1 0 23.5048 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1649 0 1 0 24.0049 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1650 0 1 0 24.505 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1651 0 1 0 25.0051 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1652 0 1 0 25.5052 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1653 0 1 0 26.0053 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1654 0 1 0 26.5054 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1655 0 1 0 27.0055 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1656 0 1 0 27.5056 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1657 0 1 0 28.0057 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1658 0 1 0 28.5058 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1659 0 1 0 29.0059 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1660 0 1 0 29.506 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1661 0 1 0 30.0061 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1662 0 1 0 30.5062 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1663 0 1 0 31.0063 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1664 0 1 0 31.5064 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1665 0 1 0 32.0065 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1666 0 1 0 32.5066 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1667 0 1 0 33.0067 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1668 0 1 0 33.5068 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1669 0 1 0 34.0069 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1670 0 1 0 34.507 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1671 0 1 0 35.0071 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1672 0 1 0 35.5072 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1673 0 1 0 36.0073 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1674 0 1 0 36.5074 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1675 0 1 0 37.0075 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1676 0 1 0 37.5076 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1677 0 1 0 38.0077 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1678 0 1 0 38.5078 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1679 0 1 0 39.0079 34.648 9.99798 0 0 1 0.866 8 6 1 0 +1680 0 1 0 39.508 35.5142 9.99798 0 0 1 0.866 8 6 1 0 +1681 0 1 0 0 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1682 0 1 0 0.500101 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1683 0 1 0 1.0002 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1684 0 1 0 1.5003 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1685 0 1 0 2.0004 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1686 0 1 0 2.50051 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1687 0 1 0 3.00061 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1688 0 1 0 3.50071 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1689 0 1 0 4.00081 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1690 0 1 0 4.50091 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1691 0 1 0 5.00101 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1692 0 1 0 5.50111 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1693 0 1 0 6.00121 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1694 0 1 0 6.50132 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1695 0 1 0 7.00142 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1696 0 1 0 7.50152 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1697 0 1 0 8.00162 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1698 0 1 0 8.50172 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1699 0 1 0 9.00182 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1700 0 1 0 9.50192 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1701 0 1 0 10.002 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1702 0 1 0 10.5021 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1703 0 1 0 11.0022 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1704 0 1 0 11.5023 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1705 0 1 0 12.0024 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1706 0 1 0 12.5025 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1707 0 1 0 13.0026 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1708 0 1 0 13.5027 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1709 0 1 0 14.0028 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1710 0 1 0 14.5029 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1711 0 1 0 15.003 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1712 0 1 0 15.5031 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1713 0 1 0 16.0032 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1714 0 1 0 16.5033 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1715 0 1 0 17.0034 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1716 0 1 0 17.5035 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1717 0 1 0 18.0036 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1718 0 1 0 18.5037 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1719 0 1 0 19.0038 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1720 0 1 0 19.5039 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1721 0 1 0 20.004 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1722 0 1 0 20.5041 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1723 0 1 0 21.0042 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1724 0 1 0 21.5043 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1725 0 1 0 22.0045 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1726 0 1 0 22.5046 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1727 0 1 0 23.0047 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1728 0 1 0 23.5048 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1729 0 1 0 24.0049 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1730 0 1 0 24.505 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1731 0 1 0 25.0051 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1732 0 1 0 25.5052 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1733 0 1 0 26.0053 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1734 0 1 0 26.5054 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1735 0 1 0 27.0055 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1736 0 1 0 27.5056 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1737 0 1 0 28.0057 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1738 0 1 0 28.5058 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1739 0 1 0 29.0059 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1740 0 1 0 29.506 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1741 0 1 0 30.0061 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1742 0 1 0 30.5062 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1743 0 1 0 31.0063 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1744 0 1 0 31.5064 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1745 0 1 0 32.0065 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1746 0 1 0 32.5066 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1747 0 1 0 33.0067 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1748 0 1 0 33.5068 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1749 0 1 0 34.0069 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1750 0 1 0 34.507 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1751 0 1 0 35.0071 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1752 0 1 0 35.5072 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1753 0 1 0 36.0073 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1754 0 1 0 36.5074 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1755 0 1 0 37.0075 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1756 0 1 0 37.5076 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1757 0 1 0 38.0077 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1758 0 1 0 38.5078 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1759 0 1 0 39.0079 36.3804 9.99798 0 0 1 0.866 8 6 1 0 +1760 0 1 0 39.508 37.2466 9.99798 0 0 1 0.866 8 6 1 0 +1761 0 1 0 0 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1762 0 1 0 0.500101 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1763 0 1 0 1.0002 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1764 0 1 0 1.5003 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1765 0 1 0 2.0004 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1766 0 1 0 2.50051 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1767 0 1 0 3.00061 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1768 0 1 0 3.50071 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1769 0 1 0 4.00081 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1770 0 1 0 4.50091 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1771 0 1 0 5.00101 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1772 0 1 0 5.50111 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1773 0 1 0 6.00121 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1774 0 1 0 6.50132 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1775 0 1 0 7.00142 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1776 0 1 0 7.50152 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1777 0 1 0 8.00162 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1778 0 1 0 8.50172 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1779 0 1 0 9.00182 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1780 0 1 0 9.50192 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1781 0 1 0 10.002 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1782 0 1 0 10.5021 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1783 0 1 0 11.0022 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1784 0 1 0 11.5023 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1785 0 1 0 12.0024 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1786 0 1 0 12.5025 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1787 0 1 0 13.0026 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1788 0 1 0 13.5027 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1789 0 1 0 14.0028 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1790 0 1 0 14.5029 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1791 0 1 0 15.003 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1792 0 1 0 15.5031 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1793 0 1 0 16.0032 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1794 0 1 0 16.5033 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1795 0 1 0 17.0034 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1796 0 1 0 17.5035 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1797 0 1 0 18.0036 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1798 0 1 0 18.5037 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1799 0 1 0 19.0038 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1800 0 1 0 19.5039 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1801 0 1 0 20.004 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1802 0 1 0 20.5041 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1803 0 1 0 21.0042 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1804 0 1 0 21.5043 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1805 0 1 0 22.0045 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1806 0 1 0 22.5046 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1807 0 1 0 23.0047 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1808 0 1 0 23.5048 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1809 0 1 0 24.0049 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1810 0 1 0 24.505 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1811 0 1 0 25.0051 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1812 0 1 0 25.5052 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1813 0 1 0 26.0053 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1814 0 1 0 26.5054 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1815 0 1 0 27.0055 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1816 0 1 0 27.5056 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1817 0 1 0 28.0057 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1818 0 1 0 28.5058 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1819 0 1 0 29.0059 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1820 0 1 0 29.506 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1821 0 1 0 30.0061 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1822 0 1 0 30.5062 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1823 0 1 0 31.0063 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1824 0 1 0 31.5064 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1825 0 1 0 32.0065 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1826 0 1 0 32.5066 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1827 0 1 0 33.0067 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1828 0 1 0 33.5068 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1829 0 1 0 34.0069 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1830 0 1 0 34.507 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1831 0 1 0 35.0071 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1832 0 1 0 35.5072 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1833 0 1 0 36.0073 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1834 0 1 0 36.5074 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1835 0 1 0 37.0075 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1836 0 1 0 37.5076 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1837 0 1 0 38.0077 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1838 0 1 0 38.5078 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1839 0 1 0 39.0079 38.1128 9.99798 0 0 1 0.866 8 6 1 0 +1840 0 1 0 39.508 38.979 9.99798 0 0 1 0.866 8 6 1 0 +1841 0 1 0 0 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1842 0 1 0 0.500101 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1843 0 1 0 1.0002 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1844 0 1 0 1.5003 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1845 0 1 0 2.0004 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1846 0 1 0 2.50051 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1847 0 1 0 3.00061 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1848 0 1 0 3.50071 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1849 0 1 0 4.00081 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1850 0 1 0 4.50091 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1851 0 1 0 5.00101 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1852 0 1 0 5.50111 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1853 0 1 0 6.00121 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1854 0 1 0 6.50132 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1855 0 1 0 7.00142 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1856 0 1 0 7.50152 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1857 0 1 0 8.00162 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1858 0 1 0 8.50172 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1859 0 1 0 9.00182 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1860 0 1 0 9.50192 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1861 0 1 0 10.002 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1862 0 1 0 10.5021 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1863 0 1 0 11.0022 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1864 0 1 0 11.5023 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1865 0 1 0 12.0024 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1866 0 1 0 12.5025 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1867 0 1 0 13.0026 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1868 0 1 0 13.5027 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1869 0 1 0 14.0028 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1870 0 1 0 14.5029 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1871 0 1 0 15.003 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1872 0 1 0 15.5031 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1873 0 1 0 16.0032 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1874 0 1 0 16.5033 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1875 0 1 0 17.0034 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1876 0 1 0 17.5035 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1877 0 1 0 18.0036 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1878 0 1 0 18.5037 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1879 0 1 0 19.0038 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1880 0 1 0 19.5039 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1881 0 1 0 20.004 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1882 0 1 0 20.5041 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1883 0 1 0 21.0042 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1884 0 1 0 21.5043 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1885 0 1 0 22.0045 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1886 0 1 0 22.5046 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1887 0 1 0 23.0047 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1888 0 1 0 23.5048 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1889 0 1 0 24.0049 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1890 0 1 0 24.505 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1891 0 1 0 25.0051 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1892 0 1 0 25.5052 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1893 0 1 0 26.0053 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1894 0 1 0 26.5054 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1895 0 1 0 27.0055 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1896 0 1 0 27.5056 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1897 0 1 0 28.0057 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1898 0 1 0 28.5058 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1899 0 1 0 29.0059 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1900 0 1 0 29.506 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1901 0 1 0 30.0061 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1902 0 1 0 30.5062 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1903 0 1 0 31.0063 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1904 0 1 0 31.5064 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1905 0 1 0 32.0065 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1906 0 1 0 32.5066 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1907 0 1 0 33.0067 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1908 0 1 0 33.5068 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1909 0 1 0 34.0069 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1910 0 1 0 34.507 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1911 0 1 0 35.0071 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1912 0 1 0 35.5072 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1913 0 1 0 36.0073 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1914 0 1 0 36.5074 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1915 0 1 0 37.0075 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1916 0 1 0 37.5076 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1917 0 1 0 38.0077 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1918 0 1 0 38.5078 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1919 0 1 0 39.0079 39.8452 9.99798 0 0 1 0.866 8 6 1 0 +1920 0 1 0 39.508 40.7114 9.99798 0 0 1 0.866 8 6 1 0 +1921 0 1 0 0 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1922 0 1 0 0.500101 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1923 0 1 0 1.0002 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1924 0 1 0 1.5003 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1925 0 1 0 2.0004 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1926 0 1 0 2.50051 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1927 0 1 0 3.00061 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1928 0 1 0 3.50071 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1929 0 1 0 4.00081 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1930 0 1 0 4.50091 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1931 0 1 0 5.00101 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1932 0 1 0 5.50111 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1933 0 1 0 6.00121 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1934 0 1 0 6.50132 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1935 0 1 0 7.00142 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1936 0 1 0 7.50152 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1937 0 1 0 8.00162 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1938 0 1 0 8.50172 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1939 0 1 0 9.00182 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1940 0 1 0 9.50192 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1941 0 1 0 10.002 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1942 0 1 0 10.5021 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1943 0 1 0 11.0022 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1944 0 1 0 11.5023 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1945 0 1 0 12.0024 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1946 0 1 0 12.5025 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1947 0 1 0 13.0026 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1948 0 1 0 13.5027 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1949 0 1 0 14.0028 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1950 0 1 0 14.5029 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1951 0 1 0 15.003 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1952 0 1 0 15.5031 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1953 0 1 0 16.0032 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1954 0 1 0 16.5033 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1955 0 1 0 17.0034 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1956 0 1 0 17.5035 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1957 0 1 0 18.0036 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1958 0 1 0 18.5037 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1959 0 1 0 19.0038 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1960 0 1 0 19.5039 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1961 0 1 0 20.004 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1962 0 1 0 20.5041 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1963 0 1 0 21.0042 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1964 0 1 0 21.5043 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1965 0 1 0 22.0045 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1966 0 1 0 22.5046 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1967 0 1 0 23.0047 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1968 0 1 0 23.5048 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1969 0 1 0 24.0049 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1970 0 1 0 24.505 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1971 0 1 0 25.0051 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1972 0 1 0 25.5052 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1973 0 1 0 26.0053 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1974 0 1 0 26.5054 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1975 0 1 0 27.0055 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1976 0 1 0 27.5056 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1977 0 1 0 28.0057 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1978 0 1 0 28.5058 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1979 0 1 0 29.0059 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1980 0 1 0 29.506 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1981 0 1 0 30.0061 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1982 0 1 0 30.5062 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1983 0 1 0 31.0063 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1984 0 1 0 31.5064 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1985 0 1 0 32.0065 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1986 0 1 0 32.5066 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1987 0 1 0 33.0067 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1988 0 1 0 33.5068 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1989 0 1 0 34.0069 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1990 0 1 0 34.507 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1991 0 1 0 35.0071 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1992 0 1 0 35.5072 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1993 0 1 0 36.0073 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1994 0 1 0 36.5074 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1995 0 1 0 37.0075 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1996 0 1 0 37.5076 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1997 0 1 0 38.0077 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +1998 0 1 0 38.5078 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +1999 0 1 0 39.0079 41.5776 9.99798 0 0 1 0.866 8 6 1 0 +2000 0 1 0 39.508 42.4438 9.99798 0 0 1 0.866 8 6 1 0 +2001 0 1 0 0 0 30.002 0 0 -1 0.866 8 6 1 0 +2002 0 1 0 0.500101 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2003 0 1 0 1.0002 0 30.002 0 0 -1 0.866 8 6 1 0 +2004 0 1 0 1.5003 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2005 0 1 0 2.0004 0 30.002 0 0 -1 0.866 8 6 1 0 +2006 0 1 0 2.50051 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2007 0 1 0 3.00061 0 30.002 0 0 -1 0.866 8 6 1 0 +2008 0 1 0 3.50071 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2009 0 1 0 4.00081 0 30.002 0 0 -1 0.866 8 6 1 0 +2010 0 1 0 4.50091 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2011 0 1 0 5.00101 0 30.002 0 0 -1 0.866 8 6 1 0 +2012 0 1 0 5.50111 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2013 0 1 0 6.00121 0 30.002 0 0 -1 0.866 8 6 1 0 +2014 0 1 0 6.50132 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2015 0 1 0 7.00142 0 30.002 0 0 -1 0.866 8 6 1 0 +2016 0 1 0 7.50152 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2017 0 1 0 8.00162 0 30.002 0 0 -1 0.866 8 6 1 0 +2018 0 1 0 8.50172 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2019 0 1 0 9.00182 0 30.002 0 0 -1 0.866 8 6 1 0 +2020 0 1 0 9.50192 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2021 0 1 0 10.002 0 30.002 0 0 -1 0.866 8 6 1 0 +2022 0 1 0 10.5021 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2023 0 1 0 11.0022 0 30.002 0 0 -1 0.866 8 6 1 0 +2024 0 1 0 11.5023 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2025 0 1 0 12.0024 0 30.002 0 0 -1 0.866 8 6 1 0 +2026 0 1 0 12.5025 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2027 0 1 0 13.0026 0 30.002 0 0 -1 0.866 8 6 1 0 +2028 0 1 0 13.5027 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2029 0 1 0 14.0028 0 30.002 0 0 -1 0.866 8 6 1 0 +2030 0 1 0 14.5029 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2031 0 1 0 15.003 0 30.002 0 0 -1 0.866 8 6 1 0 +2032 0 1 0 15.5031 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2033 0 1 0 16.0032 0 30.002 0 0 -1 0.866 8 6 1 0 +2034 0 1 0 16.5033 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2035 0 1 0 17.0034 0 30.002 0 0 -1 0.866 8 6 1 0 +2036 0 1 0 17.5035 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2037 0 1 0 18.0036 0 30.002 0 0 -1 0.866 8 6 1 0 +2038 0 1 0 18.5037 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2039 0 1 0 19.0038 0 30.002 0 0 -1 0.866 8 6 1 0 +2040 0 1 0 19.5039 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2041 0 1 0 20.004 0 30.002 0 0 -1 0.866 8 6 1 0 +2042 0 1 0 20.5041 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2043 0 1 0 21.0042 0 30.002 0 0 -1 0.866 8 6 1 0 +2044 0 1 0 21.5043 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2045 0 1 0 22.0045 0 30.002 0 0 -1 0.866 8 6 1 0 +2046 0 1 0 22.5046 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2047 0 1 0 23.0047 0 30.002 0 0 -1 0.866 8 6 1 0 +2048 0 1 0 23.5048 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2049 0 1 0 24.0049 0 30.002 0 0 -1 0.866 8 6 1 0 +2050 0 1 0 24.505 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2051 0 1 0 25.0051 0 30.002 0 0 -1 0.866 8 6 1 0 +2052 0 1 0 25.5052 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2053 0 1 0 26.0053 0 30.002 0 0 -1 0.866 8 6 1 0 +2054 0 1 0 26.5054 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2055 0 1 0 27.0055 0 30.002 0 0 -1 0.866 8 6 1 0 +2056 0 1 0 27.5056 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2057 0 1 0 28.0057 0 30.002 0 0 -1 0.866 8 6 1 0 +2058 0 1 0 28.5058 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2059 0 1 0 29.0059 0 30.002 0 0 -1 0.866 8 6 1 0 +2060 0 1 0 29.506 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2061 0 1 0 30.0061 0 30.002 0 0 -1 0.866 8 6 1 0 +2062 0 1 0 30.5062 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2063 0 1 0 31.0063 0 30.002 0 0 -1 0.866 8 6 1 0 +2064 0 1 0 31.5064 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2065 0 1 0 32.0065 0 30.002 0 0 -1 0.866 8 6 1 0 +2066 0 1 0 32.5066 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2067 0 1 0 33.0067 0 30.002 0 0 -1 0.866 8 6 1 0 +2068 0 1 0 33.5068 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2069 0 1 0 34.0069 0 30.002 0 0 -1 0.866 8 6 1 0 +2070 0 1 0 34.507 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2071 0 1 0 35.0071 0 30.002 0 0 -1 0.866 8 6 1 0 +2072 0 1 0 35.5072 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2073 0 1 0 36.0073 0 30.002 0 0 -1 0.866 8 6 1 0 +2074 0 1 0 36.5074 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2075 0 1 0 37.0075 0 30.002 0 0 -1 0.866 8 6 1 0 +2076 0 1 0 37.5076 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2077 0 1 0 38.0077 0 30.002 0 0 -1 0.866 8 6 1 0 +2078 0 1 0 38.5078 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2079 0 1 0 39.0079 0 30.002 0 0 -1 0.866 8 6 1 0 +2080 0 1 0 39.508 0.866201 30.002 0 0 -1 0.866 8 6 1 0 +2081 0 1 0 0 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2082 0 1 0 0.500101 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2083 0 1 0 1.0002 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2084 0 1 0 1.5003 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2085 0 1 0 2.0004 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2086 0 1 0 2.50051 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2087 0 1 0 3.00061 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2088 0 1 0 3.50071 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2089 0 1 0 4.00081 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2090 0 1 0 4.50091 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2091 0 1 0 5.00101 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2092 0 1 0 5.50111 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2093 0 1 0 6.00121 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2094 0 1 0 6.50132 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2095 0 1 0 7.00142 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2096 0 1 0 7.50152 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2097 0 1 0 8.00162 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2098 0 1 0 8.50172 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2099 0 1 0 9.00182 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2100 0 1 0 9.50192 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2101 0 1 0 10.002 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2102 0 1 0 10.5021 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2103 0 1 0 11.0022 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2104 0 1 0 11.5023 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2105 0 1 0 12.0024 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2106 0 1 0 12.5025 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2107 0 1 0 13.0026 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2108 0 1 0 13.5027 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2109 0 1 0 14.0028 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2110 0 1 0 14.5029 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2111 0 1 0 15.003 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2112 0 1 0 15.5031 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2113 0 1 0 16.0032 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2114 0 1 0 16.5033 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2115 0 1 0 17.0034 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2116 0 1 0 17.5035 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2117 0 1 0 18.0036 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2118 0 1 0 18.5037 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2119 0 1 0 19.0038 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2120 0 1 0 19.5039 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2121 0 1 0 20.004 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2122 0 1 0 20.5041 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2123 0 1 0 21.0042 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2124 0 1 0 21.5043 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2125 0 1 0 22.0045 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2126 0 1 0 22.5046 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2127 0 1 0 23.0047 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2128 0 1 0 23.5048 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2129 0 1 0 24.0049 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2130 0 1 0 24.505 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2131 0 1 0 25.0051 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2132 0 1 0 25.5052 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2133 0 1 0 26.0053 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2134 0 1 0 26.5054 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2135 0 1 0 27.0055 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2136 0 1 0 27.5056 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2137 0 1 0 28.0057 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2138 0 1 0 28.5058 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2139 0 1 0 29.0059 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2140 0 1 0 29.506 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2141 0 1 0 30.0061 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2142 0 1 0 30.5062 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2143 0 1 0 31.0063 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2144 0 1 0 31.5064 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2145 0 1 0 32.0065 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2146 0 1 0 32.5066 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2147 0 1 0 33.0067 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2148 0 1 0 33.5068 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2149 0 1 0 34.0069 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2150 0 1 0 34.507 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2151 0 1 0 35.0071 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2152 0 1 0 35.5072 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2153 0 1 0 36.0073 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2154 0 1 0 36.5074 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2155 0 1 0 37.0075 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2156 0 1 0 37.5076 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2157 0 1 0 38.0077 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2158 0 1 0 38.5078 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2159 0 1 0 39.0079 1.7324 30.002 0 0 -1 0.866 8 6 1 0 +2160 0 1 0 39.508 2.5986 30.002 0 0 -1 0.866 8 6 1 0 +2161 0 1 0 0 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2162 0 1 0 0.500101 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2163 0 1 0 1.0002 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2164 0 1 0 1.5003 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2165 0 1 0 2.0004 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2166 0 1 0 2.50051 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2167 0 1 0 3.00061 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2168 0 1 0 3.50071 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2169 0 1 0 4.00081 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2170 0 1 0 4.50091 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2171 0 1 0 5.00101 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2172 0 1 0 5.50111 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2173 0 1 0 6.00121 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2174 0 1 0 6.50132 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2175 0 1 0 7.00142 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2176 0 1 0 7.50152 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2177 0 1 0 8.00162 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2178 0 1 0 8.50172 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2179 0 1 0 9.00182 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2180 0 1 0 9.50192 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2181 0 1 0 10.002 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2182 0 1 0 10.5021 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2183 0 1 0 11.0022 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2184 0 1 0 11.5023 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2185 0 1 0 12.0024 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2186 0 1 0 12.5025 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2187 0 1 0 13.0026 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2188 0 1 0 13.5027 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2189 0 1 0 14.0028 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2190 0 1 0 14.5029 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2191 0 1 0 15.003 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2192 0 1 0 15.5031 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2193 0 1 0 16.0032 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2194 0 1 0 16.5033 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2195 0 1 0 17.0034 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2196 0 1 0 17.5035 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2197 0 1 0 18.0036 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2198 0 1 0 18.5037 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2199 0 1 0 19.0038 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2200 0 1 0 19.5039 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2201 0 1 0 20.004 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2202 0 1 0 20.5041 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2203 0 1 0 21.0042 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2204 0 1 0 21.5043 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2205 0 1 0 22.0045 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2206 0 1 0 22.5046 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2207 0 1 0 23.0047 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2208 0 1 0 23.5048 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2209 0 1 0 24.0049 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2210 0 1 0 24.505 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2211 0 1 0 25.0051 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2212 0 1 0 25.5052 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2213 0 1 0 26.0053 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2214 0 1 0 26.5054 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2215 0 1 0 27.0055 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2216 0 1 0 27.5056 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2217 0 1 0 28.0057 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2218 0 1 0 28.5058 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2219 0 1 0 29.0059 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2220 0 1 0 29.506 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2221 0 1 0 30.0061 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2222 0 1 0 30.5062 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2223 0 1 0 31.0063 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2224 0 1 0 31.5064 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2225 0 1 0 32.0065 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2226 0 1 0 32.5066 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2227 0 1 0 33.0067 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2228 0 1 0 33.5068 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2229 0 1 0 34.0069 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2230 0 1 0 34.507 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2231 0 1 0 35.0071 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2232 0 1 0 35.5072 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2233 0 1 0 36.0073 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2234 0 1 0 36.5074 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2235 0 1 0 37.0075 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2236 0 1 0 37.5076 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2237 0 1 0 38.0077 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2238 0 1 0 38.5078 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2239 0 1 0 39.0079 3.4648 30.002 0 0 -1 0.866 8 6 1 0 +2240 0 1 0 39.508 4.331 30.002 0 0 -1 0.866 8 6 1 0 +2241 0 1 0 0 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2242 0 1 0 0.500101 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2243 0 1 0 1.0002 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2244 0 1 0 1.5003 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2245 0 1 0 2.0004 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2246 0 1 0 2.50051 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2247 0 1 0 3.00061 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2248 0 1 0 3.50071 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2249 0 1 0 4.00081 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2250 0 1 0 4.50091 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2251 0 1 0 5.00101 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2252 0 1 0 5.50111 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2253 0 1 0 6.00121 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2254 0 1 0 6.50132 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2255 0 1 0 7.00142 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2256 0 1 0 7.50152 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2257 0 1 0 8.00162 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2258 0 1 0 8.50172 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2259 0 1 0 9.00182 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2260 0 1 0 9.50192 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2261 0 1 0 10.002 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2262 0 1 0 10.5021 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2263 0 1 0 11.0022 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2264 0 1 0 11.5023 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2265 0 1 0 12.0024 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2266 0 1 0 12.5025 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2267 0 1 0 13.0026 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2268 0 1 0 13.5027 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2269 0 1 0 14.0028 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2270 0 1 0 14.5029 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2271 0 1 0 15.003 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2272 0 1 0 15.5031 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2273 0 1 0 16.0032 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2274 0 1 0 16.5033 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2275 0 1 0 17.0034 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2276 0 1 0 17.5035 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2277 0 1 0 18.0036 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2278 0 1 0 18.5037 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2279 0 1 0 19.0038 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2280 0 1 0 19.5039 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2281 0 1 0 20.004 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2282 0 1 0 20.5041 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2283 0 1 0 21.0042 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2284 0 1 0 21.5043 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2285 0 1 0 22.0045 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2286 0 1 0 22.5046 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2287 0 1 0 23.0047 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2288 0 1 0 23.5048 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2289 0 1 0 24.0049 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2290 0 1 0 24.505 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2291 0 1 0 25.0051 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2292 0 1 0 25.5052 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2293 0 1 0 26.0053 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2294 0 1 0 26.5054 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2295 0 1 0 27.0055 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2296 0 1 0 27.5056 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2297 0 1 0 28.0057 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2298 0 1 0 28.5058 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2299 0 1 0 29.0059 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2300 0 1 0 29.506 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2301 0 1 0 30.0061 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2302 0 1 0 30.5062 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2303 0 1 0 31.0063 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2304 0 1 0 31.5064 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2305 0 1 0 32.0065 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2306 0 1 0 32.5066 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2307 0 1 0 33.0067 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2308 0 1 0 33.5068 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2309 0 1 0 34.0069 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2310 0 1 0 34.507 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2311 0 1 0 35.0071 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2312 0 1 0 35.5072 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2313 0 1 0 36.0073 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2314 0 1 0 36.5074 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2315 0 1 0 37.0075 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2316 0 1 0 37.5076 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2317 0 1 0 38.0077 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2318 0 1 0 38.5078 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2319 0 1 0 39.0079 5.1972 30.002 0 0 -1 0.866 8 6 1 0 +2320 0 1 0 39.508 6.0634 30.002 0 0 -1 0.866 8 6 1 0 +2321 0 1 0 0 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2322 0 1 0 0.500101 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2323 0 1 0 1.0002 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2324 0 1 0 1.5003 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2325 0 1 0 2.0004 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2326 0 1 0 2.50051 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2327 0 1 0 3.00061 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2328 0 1 0 3.50071 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2329 0 1 0 4.00081 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2330 0 1 0 4.50091 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2331 0 1 0 5.00101 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2332 0 1 0 5.50111 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2333 0 1 0 6.00121 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2334 0 1 0 6.50132 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2335 0 1 0 7.00142 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2336 0 1 0 7.50152 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2337 0 1 0 8.00162 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2338 0 1 0 8.50172 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2339 0 1 0 9.00182 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2340 0 1 0 9.50192 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2341 0 1 0 10.002 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2342 0 1 0 10.5021 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2343 0 1 0 11.0022 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2344 0 1 0 11.5023 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2345 0 1 0 12.0024 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2346 0 1 0 12.5025 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2347 0 1 0 13.0026 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2348 0 1 0 13.5027 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2349 0 1 0 14.0028 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2350 0 1 0 14.5029 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2351 0 1 0 15.003 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2352 0 1 0 15.5031 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2353 0 1 0 16.0032 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2354 0 1 0 16.5033 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2355 0 1 0 17.0034 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2356 0 1 0 17.5035 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2357 0 1 0 18.0036 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2358 0 1 0 18.5037 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2359 0 1 0 19.0038 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2360 0 1 0 19.5039 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2361 0 1 0 20.004 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2362 0 1 0 20.5041 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2363 0 1 0 21.0042 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2364 0 1 0 21.5043 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2365 0 1 0 22.0045 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2366 0 1 0 22.5046 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2367 0 1 0 23.0047 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2368 0 1 0 23.5048 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2369 0 1 0 24.0049 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2370 0 1 0 24.505 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2371 0 1 0 25.0051 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2372 0 1 0 25.5052 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2373 0 1 0 26.0053 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2374 0 1 0 26.5054 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2375 0 1 0 27.0055 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2376 0 1 0 27.5056 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2377 0 1 0 28.0057 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2378 0 1 0 28.5058 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2379 0 1 0 29.0059 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2380 0 1 0 29.506 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2381 0 1 0 30.0061 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2382 0 1 0 30.5062 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2383 0 1 0 31.0063 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2384 0 1 0 31.5064 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2385 0 1 0 32.0065 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2386 0 1 0 32.5066 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2387 0 1 0 33.0067 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2388 0 1 0 33.5068 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2389 0 1 0 34.0069 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2390 0 1 0 34.507 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2391 0 1 0 35.0071 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2392 0 1 0 35.5072 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2393 0 1 0 36.0073 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2394 0 1 0 36.5074 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2395 0 1 0 37.0075 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2396 0 1 0 37.5076 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2397 0 1 0 38.0077 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2398 0 1 0 38.5078 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2399 0 1 0 39.0079 6.9296 30.002 0 0 -1 0.866 8 6 1 0 +2400 0 1 0 39.508 7.79581 30.002 0 0 -1 0.866 8 6 1 0 +2401 0 1 0 0 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2402 0 1 0 0.500101 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2403 0 1 0 1.0002 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2404 0 1 0 1.5003 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2405 0 1 0 2.0004 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2406 0 1 0 2.50051 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2407 0 1 0 3.00061 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2408 0 1 0 3.50071 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2409 0 1 0 4.00081 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2410 0 1 0 4.50091 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2411 0 1 0 5.00101 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2412 0 1 0 5.50111 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2413 0 1 0 6.00121 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2414 0 1 0 6.50132 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2415 0 1 0 7.00142 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2416 0 1 0 7.50152 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2417 0 1 0 8.00162 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2418 0 1 0 8.50172 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2419 0 1 0 9.00182 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2420 0 1 0 9.50192 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2421 0 1 0 10.002 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2422 0 1 0 10.5021 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2423 0 1 0 11.0022 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2424 0 1 0 11.5023 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2425 0 1 0 12.0024 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2426 0 1 0 12.5025 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2427 0 1 0 13.0026 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2428 0 1 0 13.5027 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2429 0 1 0 14.0028 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2430 0 1 0 14.5029 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2431 0 1 0 15.003 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2432 0 1 0 15.5031 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2433 0 1 0 16.0032 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2434 0 1 0 16.5033 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2435 0 1 0 17.0034 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2436 0 1 0 17.5035 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2437 0 1 0 18.0036 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2438 0 1 0 18.5037 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2439 0 1 0 19.0038 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2440 0 1 0 19.5039 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2441 0 1 0 20.004 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2442 0 1 0 20.5041 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2443 0 1 0 21.0042 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2444 0 1 0 21.5043 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2445 0 1 0 22.0045 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2446 0 1 0 22.5046 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2447 0 1 0 23.0047 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2448 0 1 0 23.5048 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2449 0 1 0 24.0049 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2450 0 1 0 24.505 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2451 0 1 0 25.0051 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2452 0 1 0 25.5052 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2453 0 1 0 26.0053 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2454 0 1 0 26.5054 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2455 0 1 0 27.0055 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2456 0 1 0 27.5056 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2457 0 1 0 28.0057 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2458 0 1 0 28.5058 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2459 0 1 0 29.0059 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2460 0 1 0 29.506 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2461 0 1 0 30.0061 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2462 0 1 0 30.5062 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2463 0 1 0 31.0063 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2464 0 1 0 31.5064 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2465 0 1 0 32.0065 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2466 0 1 0 32.5066 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2467 0 1 0 33.0067 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2468 0 1 0 33.5068 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2469 0 1 0 34.0069 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2470 0 1 0 34.507 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2471 0 1 0 35.0071 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2472 0 1 0 35.5072 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2473 0 1 0 36.0073 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2474 0 1 0 36.5074 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2475 0 1 0 37.0075 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2476 0 1 0 37.5076 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2477 0 1 0 38.0077 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2478 0 1 0 38.5078 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2479 0 1 0 39.0079 8.66201 30.002 0 0 -1 0.866 8 6 1 0 +2480 0 1 0 39.508 9.52821 30.002 0 0 -1 0.866 8 6 1 0 +2481 0 1 0 0 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2482 0 1 0 0.500101 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2483 0 1 0 1.0002 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2484 0 1 0 1.5003 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2485 0 1 0 2.0004 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2486 0 1 0 2.50051 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2487 0 1 0 3.00061 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2488 0 1 0 3.50071 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2489 0 1 0 4.00081 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2490 0 1 0 4.50091 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2491 0 1 0 5.00101 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2492 0 1 0 5.50111 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2493 0 1 0 6.00121 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2494 0 1 0 6.50132 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2495 0 1 0 7.00142 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2496 0 1 0 7.50152 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2497 0 1 0 8.00162 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2498 0 1 0 8.50172 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2499 0 1 0 9.00182 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2500 0 1 0 9.50192 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2501 0 1 0 10.002 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2502 0 1 0 10.5021 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2503 0 1 0 11.0022 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2504 0 1 0 11.5023 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2505 0 1 0 12.0024 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2506 0 1 0 12.5025 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2507 0 1 0 13.0026 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2508 0 1 0 13.5027 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2509 0 1 0 14.0028 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2510 0 1 0 14.5029 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2511 0 1 0 15.003 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2512 0 1 0 15.5031 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2513 0 1 0 16.0032 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2514 0 1 0 16.5033 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2515 0 1 0 17.0034 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2516 0 1 0 17.5035 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2517 0 1 0 18.0036 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2518 0 1 0 18.5037 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2519 0 1 0 19.0038 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2520 0 1 0 19.5039 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2521 0 1 0 20.004 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2522 0 1 0 20.5041 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2523 0 1 0 21.0042 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2524 0 1 0 21.5043 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2525 0 1 0 22.0045 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2526 0 1 0 22.5046 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2527 0 1 0 23.0047 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2528 0 1 0 23.5048 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2529 0 1 0 24.0049 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2530 0 1 0 24.505 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2531 0 1 0 25.0051 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2532 0 1 0 25.5052 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2533 0 1 0 26.0053 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2534 0 1 0 26.5054 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2535 0 1 0 27.0055 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2536 0 1 0 27.5056 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2537 0 1 0 28.0057 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2538 0 1 0 28.5058 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2539 0 1 0 29.0059 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2540 0 1 0 29.506 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2541 0 1 0 30.0061 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2542 0 1 0 30.5062 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2543 0 1 0 31.0063 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2544 0 1 0 31.5064 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2545 0 1 0 32.0065 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2546 0 1 0 32.5066 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2547 0 1 0 33.0067 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2548 0 1 0 33.5068 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2549 0 1 0 34.0069 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2550 0 1 0 34.507 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2551 0 1 0 35.0071 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2552 0 1 0 35.5072 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2553 0 1 0 36.0073 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2554 0 1 0 36.5074 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2555 0 1 0 37.0075 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2556 0 1 0 37.5076 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2557 0 1 0 38.0077 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2558 0 1 0 38.5078 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2559 0 1 0 39.0079 10.3944 30.002 0 0 -1 0.866 8 6 1 0 +2560 0 1 0 39.508 11.2606 30.002 0 0 -1 0.866 8 6 1 0 +2561 0 1 0 0 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2562 0 1 0 0.500101 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2563 0 1 0 1.0002 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2564 0 1 0 1.5003 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2565 0 1 0 2.0004 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2566 0 1 0 2.50051 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2567 0 1 0 3.00061 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2568 0 1 0 3.50071 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2569 0 1 0 4.00081 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2570 0 1 0 4.50091 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2571 0 1 0 5.00101 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2572 0 1 0 5.50111 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2573 0 1 0 6.00121 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2574 0 1 0 6.50132 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2575 0 1 0 7.00142 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2576 0 1 0 7.50152 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2577 0 1 0 8.00162 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2578 0 1 0 8.50172 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2579 0 1 0 9.00182 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2580 0 1 0 9.50192 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2581 0 1 0 10.002 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2582 0 1 0 10.5021 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2583 0 1 0 11.0022 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2584 0 1 0 11.5023 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2585 0 1 0 12.0024 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2586 0 1 0 12.5025 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2587 0 1 0 13.0026 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2588 0 1 0 13.5027 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2589 0 1 0 14.0028 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2590 0 1 0 14.5029 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2591 0 1 0 15.003 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2592 0 1 0 15.5031 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2593 0 1 0 16.0032 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2594 0 1 0 16.5033 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2595 0 1 0 17.0034 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2596 0 1 0 17.5035 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2597 0 1 0 18.0036 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2598 0 1 0 18.5037 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2599 0 1 0 19.0038 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2600 0 1 0 19.5039 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2601 0 1 0 20.004 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2602 0 1 0 20.5041 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2603 0 1 0 21.0042 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2604 0 1 0 21.5043 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2605 0 1 0 22.0045 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2606 0 1 0 22.5046 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2607 0 1 0 23.0047 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2608 0 1 0 23.5048 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2609 0 1 0 24.0049 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2610 0 1 0 24.505 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2611 0 1 0 25.0051 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2612 0 1 0 25.5052 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2613 0 1 0 26.0053 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2614 0 1 0 26.5054 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2615 0 1 0 27.0055 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2616 0 1 0 27.5056 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2617 0 1 0 28.0057 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2618 0 1 0 28.5058 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2619 0 1 0 29.0059 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2620 0 1 0 29.506 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2621 0 1 0 30.0061 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2622 0 1 0 30.5062 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2623 0 1 0 31.0063 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2624 0 1 0 31.5064 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2625 0 1 0 32.0065 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2626 0 1 0 32.5066 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2627 0 1 0 33.0067 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2628 0 1 0 33.5068 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2629 0 1 0 34.0069 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2630 0 1 0 34.507 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2631 0 1 0 35.0071 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2632 0 1 0 35.5072 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2633 0 1 0 36.0073 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2634 0 1 0 36.5074 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2635 0 1 0 37.0075 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2636 0 1 0 37.5076 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2637 0 1 0 38.0077 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2638 0 1 0 38.5078 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2639 0 1 0 39.0079 12.1268 30.002 0 0 -1 0.866 8 6 1 0 +2640 0 1 0 39.508 12.993 30.002 0 0 -1 0.866 8 6 1 0 +2641 0 1 0 0 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2642 0 1 0 0.500101 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2643 0 1 0 1.0002 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2644 0 1 0 1.5003 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2645 0 1 0 2.0004 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2646 0 1 0 2.50051 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2647 0 1 0 3.00061 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2648 0 1 0 3.50071 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2649 0 1 0 4.00081 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2650 0 1 0 4.50091 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2651 0 1 0 5.00101 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2652 0 1 0 5.50111 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2653 0 1 0 6.00121 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2654 0 1 0 6.50132 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2655 0 1 0 7.00142 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2656 0 1 0 7.50152 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2657 0 1 0 8.00162 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2658 0 1 0 8.50172 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2659 0 1 0 9.00182 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2660 0 1 0 9.50192 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2661 0 1 0 10.002 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2662 0 1 0 10.5021 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2663 0 1 0 11.0022 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2664 0 1 0 11.5023 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2665 0 1 0 12.0024 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2666 0 1 0 12.5025 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2667 0 1 0 13.0026 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2668 0 1 0 13.5027 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2669 0 1 0 14.0028 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2670 0 1 0 14.5029 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2671 0 1 0 15.003 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2672 0 1 0 15.5031 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2673 0 1 0 16.0032 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2674 0 1 0 16.5033 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2675 0 1 0 17.0034 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2676 0 1 0 17.5035 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2677 0 1 0 18.0036 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2678 0 1 0 18.5037 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2679 0 1 0 19.0038 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2680 0 1 0 19.5039 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2681 0 1 0 20.004 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2682 0 1 0 20.5041 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2683 0 1 0 21.0042 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2684 0 1 0 21.5043 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2685 0 1 0 22.0045 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2686 0 1 0 22.5046 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2687 0 1 0 23.0047 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2688 0 1 0 23.5048 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2689 0 1 0 24.0049 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2690 0 1 0 24.505 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2691 0 1 0 25.0051 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2692 0 1 0 25.5052 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2693 0 1 0 26.0053 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2694 0 1 0 26.5054 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2695 0 1 0 27.0055 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2696 0 1 0 27.5056 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2697 0 1 0 28.0057 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2698 0 1 0 28.5058 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2699 0 1 0 29.0059 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2700 0 1 0 29.506 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2701 0 1 0 30.0061 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2702 0 1 0 30.5062 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2703 0 1 0 31.0063 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2704 0 1 0 31.5064 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2705 0 1 0 32.0065 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2706 0 1 0 32.5066 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2707 0 1 0 33.0067 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2708 0 1 0 33.5068 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2709 0 1 0 34.0069 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2710 0 1 0 34.507 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2711 0 1 0 35.0071 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2712 0 1 0 35.5072 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2713 0 1 0 36.0073 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2714 0 1 0 36.5074 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2715 0 1 0 37.0075 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2716 0 1 0 37.5076 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2717 0 1 0 38.0077 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2718 0 1 0 38.5078 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2719 0 1 0 39.0079 13.8592 30.002 0 0 -1 0.866 8 6 1 0 +2720 0 1 0 39.508 14.7254 30.002 0 0 -1 0.866 8 6 1 0 +2721 0 1 0 0 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2722 0 1 0 0.500101 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2723 0 1 0 1.0002 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2724 0 1 0 1.5003 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2725 0 1 0 2.0004 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2726 0 1 0 2.50051 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2727 0 1 0 3.00061 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2728 0 1 0 3.50071 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2729 0 1 0 4.00081 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2730 0 1 0 4.50091 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2731 0 1 0 5.00101 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2732 0 1 0 5.50111 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2733 0 1 0 6.00121 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2734 0 1 0 6.50132 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2735 0 1 0 7.00142 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2736 0 1 0 7.50152 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2737 0 1 0 8.00162 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2738 0 1 0 8.50172 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2739 0 1 0 9.00182 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2740 0 1 0 9.50192 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2741 0 1 0 10.002 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2742 0 1 0 10.5021 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2743 0 1 0 11.0022 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2744 0 1 0 11.5023 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2745 0 1 0 12.0024 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2746 0 1 0 12.5025 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2747 0 1 0 13.0026 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2748 0 1 0 13.5027 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2749 0 1 0 14.0028 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2750 0 1 0 14.5029 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2751 0 1 0 15.003 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2752 0 1 0 15.5031 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2753 0 1 0 16.0032 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2754 0 1 0 16.5033 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2755 0 1 0 17.0034 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2756 0 1 0 17.5035 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2757 0 1 0 18.0036 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2758 0 1 0 18.5037 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2759 0 1 0 19.0038 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2760 0 1 0 19.5039 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2761 0 1 0 20.004 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2762 0 1 0 20.5041 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2763 0 1 0 21.0042 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2764 0 1 0 21.5043 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2765 0 1 0 22.0045 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2766 0 1 0 22.5046 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2767 0 1 0 23.0047 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2768 0 1 0 23.5048 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2769 0 1 0 24.0049 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2770 0 1 0 24.505 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2771 0 1 0 25.0051 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2772 0 1 0 25.5052 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2773 0 1 0 26.0053 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2774 0 1 0 26.5054 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2775 0 1 0 27.0055 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2776 0 1 0 27.5056 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2777 0 1 0 28.0057 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2778 0 1 0 28.5058 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2779 0 1 0 29.0059 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2780 0 1 0 29.506 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2781 0 1 0 30.0061 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2782 0 1 0 30.5062 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2783 0 1 0 31.0063 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2784 0 1 0 31.5064 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2785 0 1 0 32.0065 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2786 0 1 0 32.5066 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2787 0 1 0 33.0067 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2788 0 1 0 33.5068 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2789 0 1 0 34.0069 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2790 0 1 0 34.507 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2791 0 1 0 35.0071 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2792 0 1 0 35.5072 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2793 0 1 0 36.0073 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2794 0 1 0 36.5074 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2795 0 1 0 37.0075 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2796 0 1 0 37.5076 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2797 0 1 0 38.0077 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2798 0 1 0 38.5078 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2799 0 1 0 39.0079 15.5916 30.002 0 0 -1 0.866 8 6 1 0 +2800 0 1 0 39.508 16.4578 30.002 0 0 -1 0.866 8 6 1 0 +2801 0 1 0 0 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2802 0 1 0 0.500101 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2803 0 1 0 1.0002 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2804 0 1 0 1.5003 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2805 0 1 0 2.0004 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2806 0 1 0 2.50051 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2807 0 1 0 3.00061 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2808 0 1 0 3.50071 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2809 0 1 0 4.00081 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2810 0 1 0 4.50091 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2811 0 1 0 5.00101 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2812 0 1 0 5.50111 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2813 0 1 0 6.00121 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2814 0 1 0 6.50132 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2815 0 1 0 7.00142 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2816 0 1 0 7.50152 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2817 0 1 0 8.00162 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2818 0 1 0 8.50172 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2819 0 1 0 9.00182 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2820 0 1 0 9.50192 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2821 0 1 0 10.002 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2822 0 1 0 10.5021 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2823 0 1 0 11.0022 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2824 0 1 0 11.5023 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2825 0 1 0 12.0024 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2826 0 1 0 12.5025 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2827 0 1 0 13.0026 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2828 0 1 0 13.5027 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2829 0 1 0 14.0028 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2830 0 1 0 14.5029 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2831 0 1 0 15.003 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2832 0 1 0 15.5031 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2833 0 1 0 16.0032 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2834 0 1 0 16.5033 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2835 0 1 0 17.0034 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2836 0 1 0 17.5035 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2837 0 1 0 18.0036 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2838 0 1 0 18.5037 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2839 0 1 0 19.0038 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2840 0 1 0 19.5039 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2841 0 1 0 20.004 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2842 0 1 0 20.5041 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2843 0 1 0 21.0042 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2844 0 1 0 21.5043 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2845 0 1 0 22.0045 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2846 0 1 0 22.5046 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2847 0 1 0 23.0047 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2848 0 1 0 23.5048 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2849 0 1 0 24.0049 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2850 0 1 0 24.505 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2851 0 1 0 25.0051 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2852 0 1 0 25.5052 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2853 0 1 0 26.0053 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2854 0 1 0 26.5054 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2855 0 1 0 27.0055 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2856 0 1 0 27.5056 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2857 0 1 0 28.0057 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2858 0 1 0 28.5058 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2859 0 1 0 29.0059 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2860 0 1 0 29.506 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2861 0 1 0 30.0061 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2862 0 1 0 30.5062 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2863 0 1 0 31.0063 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2864 0 1 0 31.5064 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2865 0 1 0 32.0065 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2866 0 1 0 32.5066 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2867 0 1 0 33.0067 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2868 0 1 0 33.5068 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2869 0 1 0 34.0069 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2870 0 1 0 34.507 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2871 0 1 0 35.0071 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2872 0 1 0 35.5072 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2873 0 1 0 36.0073 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2874 0 1 0 36.5074 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2875 0 1 0 37.0075 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2876 0 1 0 37.5076 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2877 0 1 0 38.0077 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2878 0 1 0 38.5078 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2879 0 1 0 39.0079 17.324 30.002 0 0 -1 0.866 8 6 1 0 +2880 0 1 0 39.508 18.1902 30.002 0 0 -1 0.866 8 6 1 0 +2881 0 1 0 0 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2882 0 1 0 0.500101 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2883 0 1 0 1.0002 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2884 0 1 0 1.5003 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2885 0 1 0 2.0004 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2886 0 1 0 2.50051 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2887 0 1 0 3.00061 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2888 0 1 0 3.50071 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2889 0 1 0 4.00081 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2890 0 1 0 4.50091 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2891 0 1 0 5.00101 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2892 0 1 0 5.50111 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2893 0 1 0 6.00121 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2894 0 1 0 6.50132 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2895 0 1 0 7.00142 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2896 0 1 0 7.50152 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2897 0 1 0 8.00162 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2898 0 1 0 8.50172 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2899 0 1 0 9.00182 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2900 0 1 0 9.50192 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2901 0 1 0 10.002 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2902 0 1 0 10.5021 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2903 0 1 0 11.0022 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2904 0 1 0 11.5023 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2905 0 1 0 12.0024 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2906 0 1 0 12.5025 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2907 0 1 0 13.0026 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2908 0 1 0 13.5027 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2909 0 1 0 14.0028 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2910 0 1 0 14.5029 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2911 0 1 0 15.003 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2912 0 1 0 15.5031 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2913 0 1 0 16.0032 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2914 0 1 0 16.5033 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2915 0 1 0 17.0034 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2916 0 1 0 17.5035 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2917 0 1 0 18.0036 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2918 0 1 0 18.5037 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2919 0 1 0 19.0038 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2920 0 1 0 19.5039 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2921 0 1 0 20.004 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2922 0 1 0 20.5041 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2923 0 1 0 21.0042 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2924 0 1 0 21.5043 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2925 0 1 0 22.0045 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2926 0 1 0 22.5046 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2927 0 1 0 23.0047 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2928 0 1 0 23.5048 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2929 0 1 0 24.0049 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2930 0 1 0 24.505 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2931 0 1 0 25.0051 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2932 0 1 0 25.5052 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2933 0 1 0 26.0053 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2934 0 1 0 26.5054 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2935 0 1 0 27.0055 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2936 0 1 0 27.5056 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2937 0 1 0 28.0057 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2938 0 1 0 28.5058 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2939 0 1 0 29.0059 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2940 0 1 0 29.506 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2941 0 1 0 30.0061 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2942 0 1 0 30.5062 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2943 0 1 0 31.0063 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2944 0 1 0 31.5064 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2945 0 1 0 32.0065 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2946 0 1 0 32.5066 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2947 0 1 0 33.0067 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2948 0 1 0 33.5068 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2949 0 1 0 34.0069 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2950 0 1 0 34.507 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2951 0 1 0 35.0071 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2952 0 1 0 35.5072 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2953 0 1 0 36.0073 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2954 0 1 0 36.5074 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2955 0 1 0 37.0075 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2956 0 1 0 37.5076 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2957 0 1 0 38.0077 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2958 0 1 0 38.5078 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2959 0 1 0 39.0079 19.0564 30.002 0 0 -1 0.866 8 6 1 0 +2960 0 1 0 39.508 19.9226 30.002 0 0 -1 0.866 8 6 1 0 +2961 0 1 0 0 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2962 0 1 0 0.500101 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2963 0 1 0 1.0002 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2964 0 1 0 1.5003 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2965 0 1 0 2.0004 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2966 0 1 0 2.50051 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2967 0 1 0 3.00061 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2968 0 1 0 3.50071 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2969 0 1 0 4.00081 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2970 0 1 0 4.50091 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2971 0 1 0 5.00101 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2972 0 1 0 5.50111 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2973 0 1 0 6.00121 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2974 0 1 0 6.50132 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2975 0 1 0 7.00142 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2976 0 1 0 7.50152 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2977 0 1 0 8.00162 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2978 0 1 0 8.50172 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2979 0 1 0 9.00182 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2980 0 1 0 9.50192 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2981 0 1 0 10.002 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2982 0 1 0 10.5021 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2983 0 1 0 11.0022 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2984 0 1 0 11.5023 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2985 0 1 0 12.0024 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2986 0 1 0 12.5025 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2987 0 1 0 13.0026 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2988 0 1 0 13.5027 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2989 0 1 0 14.0028 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2990 0 1 0 14.5029 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2991 0 1 0 15.003 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2992 0 1 0 15.5031 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2993 0 1 0 16.0032 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2994 0 1 0 16.5033 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2995 0 1 0 17.0034 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2996 0 1 0 17.5035 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2997 0 1 0 18.0036 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +2998 0 1 0 18.5037 21.655 30.002 0 0 -1 0.866 8 6 1 0 +2999 0 1 0 19.0038 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3000 0 1 0 19.5039 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3001 0 1 0 20.004 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3002 0 1 0 20.5041 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3003 0 1 0 21.0042 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3004 0 1 0 21.5043 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3005 0 1 0 22.0045 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3006 0 1 0 22.5046 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3007 0 1 0 23.0047 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3008 0 1 0 23.5048 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3009 0 1 0 24.0049 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3010 0 1 0 24.505 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3011 0 1 0 25.0051 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3012 0 1 0 25.5052 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3013 0 1 0 26.0053 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3014 0 1 0 26.5054 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3015 0 1 0 27.0055 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3016 0 1 0 27.5056 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3017 0 1 0 28.0057 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3018 0 1 0 28.5058 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3019 0 1 0 29.0059 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3020 0 1 0 29.506 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3021 0 1 0 30.0061 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3022 0 1 0 30.5062 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3023 0 1 0 31.0063 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3024 0 1 0 31.5064 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3025 0 1 0 32.0065 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3026 0 1 0 32.5066 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3027 0 1 0 33.0067 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3028 0 1 0 33.5068 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3029 0 1 0 34.0069 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3030 0 1 0 34.507 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3031 0 1 0 35.0071 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3032 0 1 0 35.5072 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3033 0 1 0 36.0073 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3034 0 1 0 36.5074 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3035 0 1 0 37.0075 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3036 0 1 0 37.5076 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3037 0 1 0 38.0077 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3038 0 1 0 38.5078 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3039 0 1 0 39.0079 20.7888 30.002 0 0 -1 0.866 8 6 1 0 +3040 0 1 0 39.508 21.655 30.002 0 0 -1 0.866 8 6 1 0 +3041 0 1 0 0 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3042 0 1 0 0.500101 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3043 0 1 0 1.0002 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3044 0 1 0 1.5003 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3045 0 1 0 2.0004 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3046 0 1 0 2.50051 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3047 0 1 0 3.00061 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3048 0 1 0 3.50071 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3049 0 1 0 4.00081 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3050 0 1 0 4.50091 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3051 0 1 0 5.00101 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3052 0 1 0 5.50111 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3053 0 1 0 6.00121 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3054 0 1 0 6.50132 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3055 0 1 0 7.00142 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3056 0 1 0 7.50152 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3057 0 1 0 8.00162 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3058 0 1 0 8.50172 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3059 0 1 0 9.00182 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3060 0 1 0 9.50192 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3061 0 1 0 10.002 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3062 0 1 0 10.5021 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3063 0 1 0 11.0022 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3064 0 1 0 11.5023 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3065 0 1 0 12.0024 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3066 0 1 0 12.5025 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3067 0 1 0 13.0026 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3068 0 1 0 13.5027 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3069 0 1 0 14.0028 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3070 0 1 0 14.5029 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3071 0 1 0 15.003 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3072 0 1 0 15.5031 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3073 0 1 0 16.0032 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3074 0 1 0 16.5033 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3075 0 1 0 17.0034 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3076 0 1 0 17.5035 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3077 0 1 0 18.0036 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3078 0 1 0 18.5037 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3079 0 1 0 19.0038 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3080 0 1 0 19.5039 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3081 0 1 0 20.004 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3082 0 1 0 20.5041 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3083 0 1 0 21.0042 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3084 0 1 0 21.5043 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3085 0 1 0 22.0045 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3086 0 1 0 22.5046 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3087 0 1 0 23.0047 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3088 0 1 0 23.5048 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3089 0 1 0 24.0049 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3090 0 1 0 24.505 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3091 0 1 0 25.0051 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3092 0 1 0 25.5052 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3093 0 1 0 26.0053 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3094 0 1 0 26.5054 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3095 0 1 0 27.0055 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3096 0 1 0 27.5056 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3097 0 1 0 28.0057 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3098 0 1 0 28.5058 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3099 0 1 0 29.0059 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3100 0 1 0 29.506 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3101 0 1 0 30.0061 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3102 0 1 0 30.5062 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3103 0 1 0 31.0063 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3104 0 1 0 31.5064 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3105 0 1 0 32.0065 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3106 0 1 0 32.5066 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3107 0 1 0 33.0067 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3108 0 1 0 33.5068 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3109 0 1 0 34.0069 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3110 0 1 0 34.507 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3111 0 1 0 35.0071 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3112 0 1 0 35.5072 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3113 0 1 0 36.0073 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3114 0 1 0 36.5074 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3115 0 1 0 37.0075 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3116 0 1 0 37.5076 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3117 0 1 0 38.0077 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3118 0 1 0 38.5078 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3119 0 1 0 39.0079 22.5212 30.002 0 0 -1 0.866 8 6 1 0 +3120 0 1 0 39.508 23.3874 30.002 0 0 -1 0.866 8 6 1 0 +3121 0 1 0 0 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3122 0 1 0 0.500101 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3123 0 1 0 1.0002 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3124 0 1 0 1.5003 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3125 0 1 0 2.0004 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3126 0 1 0 2.50051 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3127 0 1 0 3.00061 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3128 0 1 0 3.50071 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3129 0 1 0 4.00081 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3130 0 1 0 4.50091 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3131 0 1 0 5.00101 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3132 0 1 0 5.50111 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3133 0 1 0 6.00121 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3134 0 1 0 6.50132 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3135 0 1 0 7.00142 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3136 0 1 0 7.50152 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3137 0 1 0 8.00162 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3138 0 1 0 8.50172 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3139 0 1 0 9.00182 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3140 0 1 0 9.50192 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3141 0 1 0 10.002 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3142 0 1 0 10.5021 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3143 0 1 0 11.0022 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3144 0 1 0 11.5023 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3145 0 1 0 12.0024 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3146 0 1 0 12.5025 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3147 0 1 0 13.0026 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3148 0 1 0 13.5027 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3149 0 1 0 14.0028 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3150 0 1 0 14.5029 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3151 0 1 0 15.003 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3152 0 1 0 15.5031 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3153 0 1 0 16.0032 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3154 0 1 0 16.5033 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3155 0 1 0 17.0034 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3156 0 1 0 17.5035 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3157 0 1 0 18.0036 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3158 0 1 0 18.5037 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3159 0 1 0 19.0038 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3160 0 1 0 19.5039 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3161 0 1 0 20.004 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3162 0 1 0 20.5041 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3163 0 1 0 21.0042 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3164 0 1 0 21.5043 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3165 0 1 0 22.0045 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3166 0 1 0 22.5046 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3167 0 1 0 23.0047 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3168 0 1 0 23.5048 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3169 0 1 0 24.0049 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3170 0 1 0 24.505 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3171 0 1 0 25.0051 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3172 0 1 0 25.5052 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3173 0 1 0 26.0053 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3174 0 1 0 26.5054 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3175 0 1 0 27.0055 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3176 0 1 0 27.5056 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3177 0 1 0 28.0057 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3178 0 1 0 28.5058 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3179 0 1 0 29.0059 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3180 0 1 0 29.506 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3181 0 1 0 30.0061 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3182 0 1 0 30.5062 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3183 0 1 0 31.0063 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3184 0 1 0 31.5064 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3185 0 1 0 32.0065 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3186 0 1 0 32.5066 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3187 0 1 0 33.0067 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3188 0 1 0 33.5068 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3189 0 1 0 34.0069 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3190 0 1 0 34.507 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3191 0 1 0 35.0071 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3192 0 1 0 35.5072 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3193 0 1 0 36.0073 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3194 0 1 0 36.5074 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3195 0 1 0 37.0075 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3196 0 1 0 37.5076 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3197 0 1 0 38.0077 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3198 0 1 0 38.5078 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3199 0 1 0 39.0079 24.2536 30.002 0 0 -1 0.866 8 6 1 0 +3200 0 1 0 39.508 25.1198 30.002 0 0 -1 0.866 8 6 1 0 +3201 0 1 0 0 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3202 0 1 0 0.500101 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3203 0 1 0 1.0002 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3204 0 1 0 1.5003 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3205 0 1 0 2.0004 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3206 0 1 0 2.50051 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3207 0 1 0 3.00061 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3208 0 1 0 3.50071 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3209 0 1 0 4.00081 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3210 0 1 0 4.50091 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3211 0 1 0 5.00101 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3212 0 1 0 5.50111 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3213 0 1 0 6.00121 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3214 0 1 0 6.50132 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3215 0 1 0 7.00142 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3216 0 1 0 7.50152 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3217 0 1 0 8.00162 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3218 0 1 0 8.50172 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3219 0 1 0 9.00182 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3220 0 1 0 9.50192 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3221 0 1 0 10.002 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3222 0 1 0 10.5021 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3223 0 1 0 11.0022 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3224 0 1 0 11.5023 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3225 0 1 0 12.0024 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3226 0 1 0 12.5025 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3227 0 1 0 13.0026 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3228 0 1 0 13.5027 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3229 0 1 0 14.0028 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3230 0 1 0 14.5029 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3231 0 1 0 15.003 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3232 0 1 0 15.5031 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3233 0 1 0 16.0032 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3234 0 1 0 16.5033 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3235 0 1 0 17.0034 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3236 0 1 0 17.5035 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3237 0 1 0 18.0036 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3238 0 1 0 18.5037 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3239 0 1 0 19.0038 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3240 0 1 0 19.5039 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3241 0 1 0 20.004 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3242 0 1 0 20.5041 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3243 0 1 0 21.0042 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3244 0 1 0 21.5043 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3245 0 1 0 22.0045 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3246 0 1 0 22.5046 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3247 0 1 0 23.0047 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3248 0 1 0 23.5048 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3249 0 1 0 24.0049 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3250 0 1 0 24.505 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3251 0 1 0 25.0051 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3252 0 1 0 25.5052 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3253 0 1 0 26.0053 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3254 0 1 0 26.5054 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3255 0 1 0 27.0055 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3256 0 1 0 27.5056 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3257 0 1 0 28.0057 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3258 0 1 0 28.5058 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3259 0 1 0 29.0059 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3260 0 1 0 29.506 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3261 0 1 0 30.0061 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3262 0 1 0 30.5062 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3263 0 1 0 31.0063 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3264 0 1 0 31.5064 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3265 0 1 0 32.0065 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3266 0 1 0 32.5066 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3267 0 1 0 33.0067 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3268 0 1 0 33.5068 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3269 0 1 0 34.0069 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3270 0 1 0 34.507 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3271 0 1 0 35.0071 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3272 0 1 0 35.5072 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3273 0 1 0 36.0073 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3274 0 1 0 36.5074 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3275 0 1 0 37.0075 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3276 0 1 0 37.5076 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3277 0 1 0 38.0077 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3278 0 1 0 38.5078 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3279 0 1 0 39.0079 25.986 30.002 0 0 -1 0.866 8 6 1 0 +3280 0 1 0 39.508 26.8522 30.002 0 0 -1 0.866 8 6 1 0 +3281 0 1 0 0 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3282 0 1 0 0.500101 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3283 0 1 0 1.0002 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3284 0 1 0 1.5003 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3285 0 1 0 2.0004 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3286 0 1 0 2.50051 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3287 0 1 0 3.00061 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3288 0 1 0 3.50071 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3289 0 1 0 4.00081 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3290 0 1 0 4.50091 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3291 0 1 0 5.00101 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3292 0 1 0 5.50111 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3293 0 1 0 6.00121 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3294 0 1 0 6.50132 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3295 0 1 0 7.00142 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3296 0 1 0 7.50152 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3297 0 1 0 8.00162 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3298 0 1 0 8.50172 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3299 0 1 0 9.00182 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3300 0 1 0 9.50192 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3301 0 1 0 10.002 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3302 0 1 0 10.5021 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3303 0 1 0 11.0022 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3304 0 1 0 11.5023 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3305 0 1 0 12.0024 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3306 0 1 0 12.5025 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3307 0 1 0 13.0026 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3308 0 1 0 13.5027 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3309 0 1 0 14.0028 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3310 0 1 0 14.5029 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3311 0 1 0 15.003 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3312 0 1 0 15.5031 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3313 0 1 0 16.0032 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3314 0 1 0 16.5033 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3315 0 1 0 17.0034 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3316 0 1 0 17.5035 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3317 0 1 0 18.0036 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3318 0 1 0 18.5037 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3319 0 1 0 19.0038 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3320 0 1 0 19.5039 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3321 0 1 0 20.004 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3322 0 1 0 20.5041 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3323 0 1 0 21.0042 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3324 0 1 0 21.5043 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3325 0 1 0 22.0045 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3326 0 1 0 22.5046 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3327 0 1 0 23.0047 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3328 0 1 0 23.5048 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3329 0 1 0 24.0049 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3330 0 1 0 24.505 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3331 0 1 0 25.0051 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3332 0 1 0 25.5052 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3333 0 1 0 26.0053 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3334 0 1 0 26.5054 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3335 0 1 0 27.0055 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3336 0 1 0 27.5056 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3337 0 1 0 28.0057 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3338 0 1 0 28.5058 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3339 0 1 0 29.0059 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3340 0 1 0 29.506 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3341 0 1 0 30.0061 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3342 0 1 0 30.5062 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3343 0 1 0 31.0063 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3344 0 1 0 31.5064 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3345 0 1 0 32.0065 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3346 0 1 0 32.5066 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3347 0 1 0 33.0067 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3348 0 1 0 33.5068 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3349 0 1 0 34.0069 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3350 0 1 0 34.507 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3351 0 1 0 35.0071 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3352 0 1 0 35.5072 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3353 0 1 0 36.0073 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3354 0 1 0 36.5074 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3355 0 1 0 37.0075 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3356 0 1 0 37.5076 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3357 0 1 0 38.0077 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3358 0 1 0 38.5078 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3359 0 1 0 39.0079 27.7184 30.002 0 0 -1 0.866 8 6 1 0 +3360 0 1 0 39.508 28.5846 30.002 0 0 -1 0.866 8 6 1 0 +3361 0 1 0 0 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3362 0 1 0 0.500101 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3363 0 1 0 1.0002 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3364 0 1 0 1.5003 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3365 0 1 0 2.0004 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3366 0 1 0 2.50051 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3367 0 1 0 3.00061 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3368 0 1 0 3.50071 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3369 0 1 0 4.00081 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3370 0 1 0 4.50091 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3371 0 1 0 5.00101 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3372 0 1 0 5.50111 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3373 0 1 0 6.00121 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3374 0 1 0 6.50132 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3375 0 1 0 7.00142 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3376 0 1 0 7.50152 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3377 0 1 0 8.00162 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3378 0 1 0 8.50172 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3379 0 1 0 9.00182 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3380 0 1 0 9.50192 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3381 0 1 0 10.002 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3382 0 1 0 10.5021 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3383 0 1 0 11.0022 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3384 0 1 0 11.5023 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3385 0 1 0 12.0024 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3386 0 1 0 12.5025 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3387 0 1 0 13.0026 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3388 0 1 0 13.5027 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3389 0 1 0 14.0028 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3390 0 1 0 14.5029 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3391 0 1 0 15.003 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3392 0 1 0 15.5031 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3393 0 1 0 16.0032 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3394 0 1 0 16.5033 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3395 0 1 0 17.0034 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3396 0 1 0 17.5035 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3397 0 1 0 18.0036 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3398 0 1 0 18.5037 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3399 0 1 0 19.0038 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3400 0 1 0 19.5039 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3401 0 1 0 20.004 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3402 0 1 0 20.5041 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3403 0 1 0 21.0042 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3404 0 1 0 21.5043 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3405 0 1 0 22.0045 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3406 0 1 0 22.5046 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3407 0 1 0 23.0047 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3408 0 1 0 23.5048 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3409 0 1 0 24.0049 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3410 0 1 0 24.505 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3411 0 1 0 25.0051 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3412 0 1 0 25.5052 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3413 0 1 0 26.0053 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3414 0 1 0 26.5054 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3415 0 1 0 27.0055 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3416 0 1 0 27.5056 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3417 0 1 0 28.0057 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3418 0 1 0 28.5058 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3419 0 1 0 29.0059 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3420 0 1 0 29.506 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3421 0 1 0 30.0061 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3422 0 1 0 30.5062 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3423 0 1 0 31.0063 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3424 0 1 0 31.5064 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3425 0 1 0 32.0065 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3426 0 1 0 32.5066 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3427 0 1 0 33.0067 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3428 0 1 0 33.5068 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3429 0 1 0 34.0069 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3430 0 1 0 34.507 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3431 0 1 0 35.0071 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3432 0 1 0 35.5072 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3433 0 1 0 36.0073 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3434 0 1 0 36.5074 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3435 0 1 0 37.0075 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3436 0 1 0 37.5076 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3437 0 1 0 38.0077 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3438 0 1 0 38.5078 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3439 0 1 0 39.0079 29.4508 30.002 0 0 -1 0.866 8 6 1 0 +3440 0 1 0 39.508 30.317 30.002 0 0 -1 0.866 8 6 1 0 +3441 0 1 0 0 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3442 0 1 0 0.500101 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3443 0 1 0 1.0002 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3444 0 1 0 1.5003 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3445 0 1 0 2.0004 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3446 0 1 0 2.50051 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3447 0 1 0 3.00061 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3448 0 1 0 3.50071 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3449 0 1 0 4.00081 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3450 0 1 0 4.50091 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3451 0 1 0 5.00101 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3452 0 1 0 5.50111 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3453 0 1 0 6.00121 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3454 0 1 0 6.50132 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3455 0 1 0 7.00142 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3456 0 1 0 7.50152 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3457 0 1 0 8.00162 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3458 0 1 0 8.50172 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3459 0 1 0 9.00182 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3460 0 1 0 9.50192 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3461 0 1 0 10.002 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3462 0 1 0 10.5021 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3463 0 1 0 11.0022 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3464 0 1 0 11.5023 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3465 0 1 0 12.0024 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3466 0 1 0 12.5025 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3467 0 1 0 13.0026 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3468 0 1 0 13.5027 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3469 0 1 0 14.0028 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3470 0 1 0 14.5029 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3471 0 1 0 15.003 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3472 0 1 0 15.5031 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3473 0 1 0 16.0032 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3474 0 1 0 16.5033 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3475 0 1 0 17.0034 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3476 0 1 0 17.5035 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3477 0 1 0 18.0036 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3478 0 1 0 18.5037 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3479 0 1 0 19.0038 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3480 0 1 0 19.5039 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3481 0 1 0 20.004 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3482 0 1 0 20.5041 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3483 0 1 0 21.0042 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3484 0 1 0 21.5043 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3485 0 1 0 22.0045 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3486 0 1 0 22.5046 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3487 0 1 0 23.0047 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3488 0 1 0 23.5048 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3489 0 1 0 24.0049 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3490 0 1 0 24.505 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3491 0 1 0 25.0051 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3492 0 1 0 25.5052 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3493 0 1 0 26.0053 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3494 0 1 0 26.5054 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3495 0 1 0 27.0055 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3496 0 1 0 27.5056 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3497 0 1 0 28.0057 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3498 0 1 0 28.5058 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3499 0 1 0 29.0059 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3500 0 1 0 29.506 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3501 0 1 0 30.0061 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3502 0 1 0 30.5062 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3503 0 1 0 31.0063 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3504 0 1 0 31.5064 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3505 0 1 0 32.0065 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3506 0 1 0 32.5066 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3507 0 1 0 33.0067 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3508 0 1 0 33.5068 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3509 0 1 0 34.0069 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3510 0 1 0 34.507 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3511 0 1 0 35.0071 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3512 0 1 0 35.5072 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3513 0 1 0 36.0073 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3514 0 1 0 36.5074 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3515 0 1 0 37.0075 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3516 0 1 0 37.5076 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3517 0 1 0 38.0077 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3518 0 1 0 38.5078 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3519 0 1 0 39.0079 31.1832 30.002 0 0 -1 0.866 8 6 1 0 +3520 0 1 0 39.508 32.0494 30.002 0 0 -1 0.866 8 6 1 0 +3521 0 1 0 0 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3522 0 1 0 0.500101 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3523 0 1 0 1.0002 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3524 0 1 0 1.5003 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3525 0 1 0 2.0004 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3526 0 1 0 2.50051 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3527 0 1 0 3.00061 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3528 0 1 0 3.50071 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3529 0 1 0 4.00081 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3530 0 1 0 4.50091 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3531 0 1 0 5.00101 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3532 0 1 0 5.50111 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3533 0 1 0 6.00121 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3534 0 1 0 6.50132 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3535 0 1 0 7.00142 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3536 0 1 0 7.50152 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3537 0 1 0 8.00162 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3538 0 1 0 8.50172 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3539 0 1 0 9.00182 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3540 0 1 0 9.50192 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3541 0 1 0 10.002 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3542 0 1 0 10.5021 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3543 0 1 0 11.0022 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3544 0 1 0 11.5023 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3545 0 1 0 12.0024 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3546 0 1 0 12.5025 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3547 0 1 0 13.0026 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3548 0 1 0 13.5027 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3549 0 1 0 14.0028 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3550 0 1 0 14.5029 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3551 0 1 0 15.003 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3552 0 1 0 15.5031 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3553 0 1 0 16.0032 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3554 0 1 0 16.5033 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3555 0 1 0 17.0034 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3556 0 1 0 17.5035 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3557 0 1 0 18.0036 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3558 0 1 0 18.5037 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3559 0 1 0 19.0038 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3560 0 1 0 19.5039 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3561 0 1 0 20.004 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3562 0 1 0 20.5041 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3563 0 1 0 21.0042 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3564 0 1 0 21.5043 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3565 0 1 0 22.0045 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3566 0 1 0 22.5046 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3567 0 1 0 23.0047 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3568 0 1 0 23.5048 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3569 0 1 0 24.0049 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3570 0 1 0 24.505 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3571 0 1 0 25.0051 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3572 0 1 0 25.5052 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3573 0 1 0 26.0053 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3574 0 1 0 26.5054 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3575 0 1 0 27.0055 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3576 0 1 0 27.5056 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3577 0 1 0 28.0057 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3578 0 1 0 28.5058 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3579 0 1 0 29.0059 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3580 0 1 0 29.506 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3581 0 1 0 30.0061 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3582 0 1 0 30.5062 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3583 0 1 0 31.0063 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3584 0 1 0 31.5064 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3585 0 1 0 32.0065 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3586 0 1 0 32.5066 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3587 0 1 0 33.0067 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3588 0 1 0 33.5068 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3589 0 1 0 34.0069 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3590 0 1 0 34.507 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3591 0 1 0 35.0071 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3592 0 1 0 35.5072 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3593 0 1 0 36.0073 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3594 0 1 0 36.5074 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3595 0 1 0 37.0075 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3596 0 1 0 37.5076 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3597 0 1 0 38.0077 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3598 0 1 0 38.5078 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3599 0 1 0 39.0079 32.9156 30.002 0 0 -1 0.866 8 6 1 0 +3600 0 1 0 39.508 33.7818 30.002 0 0 -1 0.866 8 6 1 0 +3601 0 1 0 0 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3602 0 1 0 0.500101 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3603 0 1 0 1.0002 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3604 0 1 0 1.5003 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3605 0 1 0 2.0004 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3606 0 1 0 2.50051 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3607 0 1 0 3.00061 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3608 0 1 0 3.50071 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3609 0 1 0 4.00081 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3610 0 1 0 4.50091 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3611 0 1 0 5.00101 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3612 0 1 0 5.50111 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3613 0 1 0 6.00121 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3614 0 1 0 6.50132 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3615 0 1 0 7.00142 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3616 0 1 0 7.50152 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3617 0 1 0 8.00162 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3618 0 1 0 8.50172 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3619 0 1 0 9.00182 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3620 0 1 0 9.50192 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3621 0 1 0 10.002 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3622 0 1 0 10.5021 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3623 0 1 0 11.0022 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3624 0 1 0 11.5023 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3625 0 1 0 12.0024 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3626 0 1 0 12.5025 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3627 0 1 0 13.0026 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3628 0 1 0 13.5027 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3629 0 1 0 14.0028 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3630 0 1 0 14.5029 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3631 0 1 0 15.003 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3632 0 1 0 15.5031 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3633 0 1 0 16.0032 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3634 0 1 0 16.5033 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3635 0 1 0 17.0034 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3636 0 1 0 17.5035 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3637 0 1 0 18.0036 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3638 0 1 0 18.5037 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3639 0 1 0 19.0038 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3640 0 1 0 19.5039 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3641 0 1 0 20.004 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3642 0 1 0 20.5041 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3643 0 1 0 21.0042 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3644 0 1 0 21.5043 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3645 0 1 0 22.0045 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3646 0 1 0 22.5046 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3647 0 1 0 23.0047 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3648 0 1 0 23.5048 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3649 0 1 0 24.0049 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3650 0 1 0 24.505 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3651 0 1 0 25.0051 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3652 0 1 0 25.5052 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3653 0 1 0 26.0053 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3654 0 1 0 26.5054 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3655 0 1 0 27.0055 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3656 0 1 0 27.5056 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3657 0 1 0 28.0057 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3658 0 1 0 28.5058 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3659 0 1 0 29.0059 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3660 0 1 0 29.506 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3661 0 1 0 30.0061 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3662 0 1 0 30.5062 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3663 0 1 0 31.0063 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3664 0 1 0 31.5064 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3665 0 1 0 32.0065 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3666 0 1 0 32.5066 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3667 0 1 0 33.0067 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3668 0 1 0 33.5068 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3669 0 1 0 34.0069 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3670 0 1 0 34.507 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3671 0 1 0 35.0071 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3672 0 1 0 35.5072 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3673 0 1 0 36.0073 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3674 0 1 0 36.5074 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3675 0 1 0 37.0075 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3676 0 1 0 37.5076 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3677 0 1 0 38.0077 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3678 0 1 0 38.5078 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3679 0 1 0 39.0079 34.648 30.002 0 0 -1 0.866 8 6 1 0 +3680 0 1 0 39.508 35.5142 30.002 0 0 -1 0.866 8 6 1 0 +3681 0 1 0 0 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3682 0 1 0 0.500101 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3683 0 1 0 1.0002 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3684 0 1 0 1.5003 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3685 0 1 0 2.0004 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3686 0 1 0 2.50051 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3687 0 1 0 3.00061 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3688 0 1 0 3.50071 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3689 0 1 0 4.00081 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3690 0 1 0 4.50091 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3691 0 1 0 5.00101 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3692 0 1 0 5.50111 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3693 0 1 0 6.00121 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3694 0 1 0 6.50132 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3695 0 1 0 7.00142 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3696 0 1 0 7.50152 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3697 0 1 0 8.00162 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3698 0 1 0 8.50172 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3699 0 1 0 9.00182 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3700 0 1 0 9.50192 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3701 0 1 0 10.002 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3702 0 1 0 10.5021 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3703 0 1 0 11.0022 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3704 0 1 0 11.5023 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3705 0 1 0 12.0024 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3706 0 1 0 12.5025 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3707 0 1 0 13.0026 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3708 0 1 0 13.5027 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3709 0 1 0 14.0028 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3710 0 1 0 14.5029 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3711 0 1 0 15.003 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3712 0 1 0 15.5031 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3713 0 1 0 16.0032 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3714 0 1 0 16.5033 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3715 0 1 0 17.0034 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3716 0 1 0 17.5035 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3717 0 1 0 18.0036 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3718 0 1 0 18.5037 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3719 0 1 0 19.0038 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3720 0 1 0 19.5039 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3721 0 1 0 20.004 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3722 0 1 0 20.5041 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3723 0 1 0 21.0042 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3724 0 1 0 21.5043 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3725 0 1 0 22.0045 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3726 0 1 0 22.5046 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3727 0 1 0 23.0047 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3728 0 1 0 23.5048 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3729 0 1 0 24.0049 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3730 0 1 0 24.505 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3731 0 1 0 25.0051 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3732 0 1 0 25.5052 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3733 0 1 0 26.0053 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3734 0 1 0 26.5054 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3735 0 1 0 27.0055 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3736 0 1 0 27.5056 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3737 0 1 0 28.0057 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3738 0 1 0 28.5058 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3739 0 1 0 29.0059 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3740 0 1 0 29.506 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3741 0 1 0 30.0061 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3742 0 1 0 30.5062 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3743 0 1 0 31.0063 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3744 0 1 0 31.5064 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3745 0 1 0 32.0065 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3746 0 1 0 32.5066 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3747 0 1 0 33.0067 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3748 0 1 0 33.5068 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3749 0 1 0 34.0069 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3750 0 1 0 34.507 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3751 0 1 0 35.0071 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3752 0 1 0 35.5072 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3753 0 1 0 36.0073 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3754 0 1 0 36.5074 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3755 0 1 0 37.0075 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3756 0 1 0 37.5076 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3757 0 1 0 38.0077 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3758 0 1 0 38.5078 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3759 0 1 0 39.0079 36.3804 30.002 0 0 -1 0.866 8 6 1 0 +3760 0 1 0 39.508 37.2466 30.002 0 0 -1 0.866 8 6 1 0 +3761 0 1 0 0 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3762 0 1 0 0.500101 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3763 0 1 0 1.0002 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3764 0 1 0 1.5003 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3765 0 1 0 2.0004 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3766 0 1 0 2.50051 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3767 0 1 0 3.00061 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3768 0 1 0 3.50071 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3769 0 1 0 4.00081 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3770 0 1 0 4.50091 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3771 0 1 0 5.00101 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3772 0 1 0 5.50111 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3773 0 1 0 6.00121 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3774 0 1 0 6.50132 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3775 0 1 0 7.00142 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3776 0 1 0 7.50152 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3777 0 1 0 8.00162 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3778 0 1 0 8.50172 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3779 0 1 0 9.00182 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3780 0 1 0 9.50192 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3781 0 1 0 10.002 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3782 0 1 0 10.5021 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3783 0 1 0 11.0022 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3784 0 1 0 11.5023 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3785 0 1 0 12.0024 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3786 0 1 0 12.5025 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3787 0 1 0 13.0026 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3788 0 1 0 13.5027 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3789 0 1 0 14.0028 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3790 0 1 0 14.5029 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3791 0 1 0 15.003 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3792 0 1 0 15.5031 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3793 0 1 0 16.0032 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3794 0 1 0 16.5033 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3795 0 1 0 17.0034 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3796 0 1 0 17.5035 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3797 0 1 0 18.0036 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3798 0 1 0 18.5037 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3799 0 1 0 19.0038 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3800 0 1 0 19.5039 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3801 0 1 0 20.004 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3802 0 1 0 20.5041 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3803 0 1 0 21.0042 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3804 0 1 0 21.5043 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3805 0 1 0 22.0045 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3806 0 1 0 22.5046 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3807 0 1 0 23.0047 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3808 0 1 0 23.5048 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3809 0 1 0 24.0049 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3810 0 1 0 24.505 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3811 0 1 0 25.0051 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3812 0 1 0 25.5052 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3813 0 1 0 26.0053 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3814 0 1 0 26.5054 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3815 0 1 0 27.0055 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3816 0 1 0 27.5056 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3817 0 1 0 28.0057 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3818 0 1 0 28.5058 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3819 0 1 0 29.0059 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3820 0 1 0 29.506 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3821 0 1 0 30.0061 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3822 0 1 0 30.5062 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3823 0 1 0 31.0063 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3824 0 1 0 31.5064 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3825 0 1 0 32.0065 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3826 0 1 0 32.5066 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3827 0 1 0 33.0067 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3828 0 1 0 33.5068 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3829 0 1 0 34.0069 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3830 0 1 0 34.507 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3831 0 1 0 35.0071 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3832 0 1 0 35.5072 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3833 0 1 0 36.0073 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3834 0 1 0 36.5074 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3835 0 1 0 37.0075 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3836 0 1 0 37.5076 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3837 0 1 0 38.0077 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3838 0 1 0 38.5078 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3839 0 1 0 39.0079 38.1128 30.002 0 0 -1 0.866 8 6 1 0 +3840 0 1 0 39.508 38.979 30.002 0 0 -1 0.866 8 6 1 0 +3841 0 1 0 0 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3842 0 1 0 0.500101 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3843 0 1 0 1.0002 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3844 0 1 0 1.5003 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3845 0 1 0 2.0004 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3846 0 1 0 2.50051 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3847 0 1 0 3.00061 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3848 0 1 0 3.50071 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3849 0 1 0 4.00081 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3850 0 1 0 4.50091 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3851 0 1 0 5.00101 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3852 0 1 0 5.50111 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3853 0 1 0 6.00121 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3854 0 1 0 6.50132 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3855 0 1 0 7.00142 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3856 0 1 0 7.50152 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3857 0 1 0 8.00162 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3858 0 1 0 8.50172 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3859 0 1 0 9.00182 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3860 0 1 0 9.50192 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3861 0 1 0 10.002 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3862 0 1 0 10.5021 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3863 0 1 0 11.0022 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3864 0 1 0 11.5023 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3865 0 1 0 12.0024 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3866 0 1 0 12.5025 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3867 0 1 0 13.0026 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3868 0 1 0 13.5027 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3869 0 1 0 14.0028 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3870 0 1 0 14.5029 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3871 0 1 0 15.003 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3872 0 1 0 15.5031 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3873 0 1 0 16.0032 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3874 0 1 0 16.5033 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3875 0 1 0 17.0034 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3876 0 1 0 17.5035 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3877 0 1 0 18.0036 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3878 0 1 0 18.5037 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3879 0 1 0 19.0038 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3880 0 1 0 19.5039 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3881 0 1 0 20.004 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3882 0 1 0 20.5041 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3883 0 1 0 21.0042 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3884 0 1 0 21.5043 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3885 0 1 0 22.0045 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3886 0 1 0 22.5046 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3887 0 1 0 23.0047 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3888 0 1 0 23.5048 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3889 0 1 0 24.0049 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3890 0 1 0 24.505 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3891 0 1 0 25.0051 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3892 0 1 0 25.5052 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3893 0 1 0 26.0053 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3894 0 1 0 26.5054 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3895 0 1 0 27.0055 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3896 0 1 0 27.5056 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3897 0 1 0 28.0057 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3898 0 1 0 28.5058 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3899 0 1 0 29.0059 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3900 0 1 0 29.506 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3901 0 1 0 30.0061 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3902 0 1 0 30.5062 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3903 0 1 0 31.0063 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3904 0 1 0 31.5064 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3905 0 1 0 32.0065 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3906 0 1 0 32.5066 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3907 0 1 0 33.0067 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3908 0 1 0 33.5068 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3909 0 1 0 34.0069 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3910 0 1 0 34.507 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3911 0 1 0 35.0071 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3912 0 1 0 35.5072 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3913 0 1 0 36.0073 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3914 0 1 0 36.5074 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3915 0 1 0 37.0075 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3916 0 1 0 37.5076 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3917 0 1 0 38.0077 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3918 0 1 0 38.5078 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3919 0 1 0 39.0079 39.8452 30.002 0 0 -1 0.866 8 6 1 0 +3920 0 1 0 39.508 40.7114 30.002 0 0 -1 0.866 8 6 1 0 +3921 0 1 0 0 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3922 0 1 0 0.500101 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3923 0 1 0 1.0002 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3924 0 1 0 1.5003 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3925 0 1 0 2.0004 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3926 0 1 0 2.50051 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3927 0 1 0 3.00061 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3928 0 1 0 3.50071 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3929 0 1 0 4.00081 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3930 0 1 0 4.50091 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3931 0 1 0 5.00101 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3932 0 1 0 5.50111 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3933 0 1 0 6.00121 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3934 0 1 0 6.50132 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3935 0 1 0 7.00142 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3936 0 1 0 7.50152 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3937 0 1 0 8.00162 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3938 0 1 0 8.50172 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3939 0 1 0 9.00182 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3940 0 1 0 9.50192 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3941 0 1 0 10.002 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3942 0 1 0 10.5021 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3943 0 1 0 11.0022 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3944 0 1 0 11.5023 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3945 0 1 0 12.0024 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3946 0 1 0 12.5025 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3947 0 1 0 13.0026 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3948 0 1 0 13.5027 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3949 0 1 0 14.0028 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3950 0 1 0 14.5029 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3951 0 1 0 15.003 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3952 0 1 0 15.5031 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3953 0 1 0 16.0032 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3954 0 1 0 16.5033 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3955 0 1 0 17.0034 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3956 0 1 0 17.5035 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3957 0 1 0 18.0036 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3958 0 1 0 18.5037 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3959 0 1 0 19.0038 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3960 0 1 0 19.5039 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3961 0 1 0 20.004 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3962 0 1 0 20.5041 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3963 0 1 0 21.0042 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3964 0 1 0 21.5043 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3965 0 1 0 22.0045 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3966 0 1 0 22.5046 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3967 0 1 0 23.0047 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3968 0 1 0 23.5048 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3969 0 1 0 24.0049 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3970 0 1 0 24.505 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3971 0 1 0 25.0051 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3972 0 1 0 25.5052 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3973 0 1 0 26.0053 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3974 0 1 0 26.5054 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3975 0 1 0 27.0055 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3976 0 1 0 27.5056 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3977 0 1 0 28.0057 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3978 0 1 0 28.5058 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3979 0 1 0 29.0059 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3980 0 1 0 29.506 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3981 0 1 0 30.0061 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3982 0 1 0 30.5062 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3983 0 1 0 31.0063 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3984 0 1 0 31.5064 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3985 0 1 0 32.0065 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3986 0 1 0 32.5066 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3987 0 1 0 33.0067 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3988 0 1 0 33.5068 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3989 0 1 0 34.0069 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3990 0 1 0 34.507 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3991 0 1 0 35.0071 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3992 0 1 0 35.5072 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3993 0 1 0 36.0073 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3994 0 1 0 36.5074 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3995 0 1 0 37.0075 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3996 0 1 0 37.5076 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3997 0 1 0 38.0077 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +3998 0 1 0 38.5078 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +3999 0 1 0 39.0079 41.5776 30.002 0 0 -1 0.866 8 6 1 0 +4000 0 1 0 39.508 42.4438 30.002 0 0 -1 0.866 8 6 1 0 +4001 0 2 1 15 20 15 0 0 1 0.866 8 6 10 0 +4002 0 3 -1 25 20 25 0 0 1 0.866 8 6 10 0 diff --git a/examples/USER/dielectric/data.sphere b/examples/USER/dielectric/data.sphere new file mode 100644 index 0000000000..152d5ff41a --- /dev/null +++ b/examples/USER/dielectric/data.sphere @@ -0,0 +1,2582 @@ +LAMMPS data file: 2563 atoms for a single point charge near a dielectric sphere, 2564 for two opposite charges + +2563 atoms +3 atom types + +0.000000 100.000000 xlo xhi +0.000000 100.000000 ylo yhi +0.000000 100.000000 zlo zhi + + +Masses + +1 1 +2 1 +3 1 + +Atoms # dielectric: id mol type q x y z normx normy normz area_per_patch ed em epsilon curvature + +1 1 1 0 50 55.2573 41.4935 0 0.525731 -0.850651 0.490491 45 57.5 1 0 +2 1 1 0 50.4064 55.7206 41.8079 0.0406403 0.572055 -0.819208 0.490491 45 57.5 1 0 +3 1 1 0 49.5936 55.7206 41.8079 -0.0406403 0.572055 -0.819208 0.490491 45 57.5 1 0 +4 1 1 0 50.8109 56.1564 42.1616 0.081086 0.615642 -0.783843 0.490491 45 57.5 1 0 +5 1 1 0 50 56.1768 42.1357 0 0.617676 -0.786433 0.490491 45 57.5 1 0 +6 1 1 0 49.1891 56.1564 42.1616 -0.081086 0.615642 -0.783843 0.490491 45 57.5 1 0 +7 1 1 0 51.2114 56.5628 42.5527 0.121144 0.656282 -0.744727 0.490491 45 57.5 1 0 +8 1 1 0 50.4064 56.6088 42.5061 0.0406418 0.660883 -0.749387 0.490491 45 57.5 1 0 +9 1 1 0 51.6062 56.9378 42.9795 0.160622 0.69378 -0.702047 0.490491 45 57.5 1 0 +10 1 1 0 50.8057 57.0062 42.9103 0.0805729 0.700622 -0.708969 0.490491 45 57.5 1 0 +11 1 1 0 50 57.0291 42.8872 0 0.702907 -0.711282 0.490491 45 57.5 1 0 +12 1 1 0 49.5936 56.6088 42.5061 -0.0406418 0.660883 -0.749387 0.490491 45 57.5 1 0 +13 1 1 0 48.7886 56.5628 42.5527 -0.121144 0.656282 -0.744727 0.490491 45 57.5 1 0 +14 1 1 0 49.1943 57.0062 42.9103 -0.0805729 0.700622 -0.708969 0.490491 45 57.5 1 0 +15 1 1 0 48.3938 56.9378 42.9795 -0.160622 0.69378 -0.702047 0.490491 45 57.5 1 0 +16 1 1 0 51.9933 57.2796 43.4399 0.199331 0.727959 -0.656006 0.490491 45 57.5 1 0 +17 1 1 0 51.2119 57.3889 43.3716 0.121192 0.738887 -0.662842 0.490491 45 57.5 1 0 +18 1 1 0 52.3709 57.5865 43.9317 0.237086 0.758652 -0.606825 0.490491 45 57.5 1 0 +19 1 1 0 51.5961 57.7184 43.8454 0.159613 0.771841 -0.615456 0.490491 45 57.5 1 0 +20 1 1 0 50.8114 57.802 43.7976 0.0811417 0.780205 -0.620239 0.490491 45 57.5 1 0 +21 1 1 0 52.7371 57.8572 44.4526 0.273706 0.785715 -0.55474 0.490491 45 57.5 1 0 +22 1 1 0 51.9727 58.015 44.3549 0.197274 0.801504 -0.564513 0.490491 45 57.5 1 0 +23 1 1 0 53.0902 58.0902 45 0.309017 0.809017 -0.5 0.490491 45 57.5 1 0 +24 1 1 0 52.3345 58.2715 44.888 0.233445 0.827147 -0.511205 0.490491 45 57.5 1 0 +25 1 1 0 51.5643 58.4018 44.8074 0.156434 0.840178 -0.519259 0.490491 45 57.5 1 0 +26 1 1 0 51.1908 58.1217 44.2886 0.119078 0.81217 -0.57114 0.490491 45 57.5 1 0 +27 1 1 0 50.4067 58.1752 44.2554 0.040675 0.817523 -0.574458 0.490491 45 57.5 1 0 +28 1 1 0 50.7846 58.4803 44.7589 0.0784592 0.848029 -0.52411 0.490491 45 57.5 1 0 +29 1 1 0 50 58.5065 44.7427 0 0.850651 -0.525731 0.490491 45 57.5 1 0 +30 1 1 0 48.7881 57.3889 43.3716 -0.121192 0.738887 -0.662842 0.490491 45 57.5 1 0 +31 1 1 0 48.0067 57.2796 43.4399 -0.199331 0.727959 -0.656006 0.490491 45 57.5 1 0 +32 1 1 0 49.1886 57.802 43.7976 -0.0811417 0.780205 -0.620239 0.490491 45 57.5 1 0 +33 1 1 0 48.4039 57.7184 43.8454 -0.159613 0.771841 -0.615456 0.490491 45 57.5 1 0 +34 1 1 0 47.6291 57.5865 43.9317 -0.237086 0.758652 -0.606825 0.490491 45 57.5 1 0 +35 1 1 0 49.5933 58.1752 44.2554 -0.040675 0.817523 -0.574458 0.490491 45 57.5 1 0 +36 1 1 0 48.8092 58.1217 44.2886 -0.119078 0.81217 -0.57114 0.490491 45 57.5 1 0 +37 1 1 0 49.2154 58.4803 44.7589 -0.0784592 0.848029 -0.52411 0.490491 45 57.5 1 0 +38 1 1 0 48.4357 58.4018 44.8074 -0.156434 0.840178 -0.519259 0.490491 45 57.5 1 0 +39 1 1 0 48.0273 58.015 44.3549 -0.197274 0.801504 -0.564513 0.490491 45 57.5 1 0 +40 1 1 0 47.2629 57.8572 44.4526 -0.273706 0.785715 -0.55474 0.490491 45 57.5 1 0 +41 1 1 0 47.6655 58.2715 44.888 -0.233445 0.827147 -0.511205 0.490491 45 57.5 1 0 +42 1 1 0 46.9098 58.0902 45 -0.309017 0.809017 -0.5 0.490491 45 57.5 1 0 +43 1 1 0 50.4068 57.435 43.325 0.0406769 0.743496 -0.667502 0.490491 45 57.5 1 0 +44 1 1 0 50 57.8279 43.7771 0 0.782786 -0.622291 0.490491 45 57.5 1 0 +45 1 1 0 49.5932 57.435 43.325 -0.0406769 0.743496 -0.667502 0.490491 45 57.5 1 0 +46 1 1 0 53.4285 58.2845 45.5713 0.342848 0.828447 -0.442867 0.490491 45 57.5 1 0 +47 1 1 0 52.7469 58.5264 45.5554 0.274694 0.85264 -0.444464 0.490491 45 57.5 1 0 +48 1 1 0 53.7504 58.4391 46.1639 0.375038 0.843912 -0.383614 0.490491 45 57.5 1 0 +49 1 1 0 53.0766 58.6973 46.1409 0.307659 0.869725 -0.385906 0.490491 45 57.5 1 0 +50 1 1 0 52.3868 58.9101 46.1381 0.238677 0.891007 -0.386187 0.490491 45 57.5 1 0 +51 1 1 0 54.0543 58.5534 46.7748 0.405434 0.855337 -0.322525 0.490491 45 57.5 1 0 +52 1 1 0 53.3921 58.8284 46.7514 0.339209 0.882837 -0.324863 0.490491 45 57.5 1 0 +53 1 1 0 54.3389 58.6267 47.4011 0.433888 0.862669 -0.259892 0.490491 45 57.5 1 0 +54 1 1 0 53.6852 58.9174 47.3734 0.368518 0.891742 -0.262661 0.490491 45 57.5 1 0 +55 1 1 0 53.0126 59.1624 47.3592 0.301258 0.916244 -0.264082 0.490491 45 57.5 1 0 +56 1 1 0 52.7063 59.0583 46.7407 0.270627 0.905832 -0.325929 0.490491 45 57.5 1 0 +57 1 1 0 52.0119 59.2388 46.7447 0.201189 0.92388 -0.32553 0.490491 45 57.5 1 0 +58 1 1 0 52.3245 59.3605 47.3585 0.232455 0.93605 -0.264151 0.490491 45 57.5 1 0 +59 1 1 0 51.6246 59.5106 47.3713 0.16246 0.951057 -0.262865 0.490491 45 57.5 1 0 +60 1 1 0 54.6027 58.6587 48.0398 0.460266 0.865871 -0.196015 0.490491 45 57.5 1 0 +61 1 1 0 53.9735 58.964 48.0359 0.39735 0.896401 -0.196412 0.490491 45 57.5 1 0 +62 1 1 0 54.8444 58.6493 48.688 0.484441 0.864929 -0.1312 0.490491 45 57.5 1 0 +63 1 1 0 54.2236 58.968 48.6825 0.422363 0.896801 -0.131749 0.490491 45 57.5 1 0 +64 1 1 0 53.5823 59.243 48.6834 0.358229 0.924305 -0.131656 0.490491 45 57.5 1 0 +65 1 1 0 55.063 58.5985 49.3424 0.506298 0.859848 -0.0657577 0.490491 45 57.5 1 0 +66 1 1 0 54.4537 58.9293 49.3418 0.445365 0.892927 -0.0658169 0.490491 45 57.5 1 0 +67 1 1 0 55.2573 58.5065 50 0.525731 0.850651 0 0.490491 45 57.5 1 0 +68 1 1 0 54.6566 58.8497 50 0.465657 0.884965 0 0.490491 45 57.5 1 0 +69 1 1 0 54.0336 59.1504 50 0.403355 0.915043 0 0.490491 45 57.5 1 0 +70 1 1 0 53.8172 59.2192 49.3401 0.381722 0.921919 -0.0659886 0.490491 45 57.5 1 0 +71 1 1 0 53.1678 59.462 49.3396 0.316778 0.946198 -0.0660427 0.490491 45 57.5 1 0 +72 1 1 0 53.3912 59.4074 50 0.339122 0.940742 0 0.490491 45 57.5 1 0 +73 1 1 0 52.7327 59.6194 50 0.273267 0.961938 0 0.490491 45 57.5 1 0 +74 1 1 0 51.9178 59.6119 48.0166 0.19178 0.961188 -0.198337 0.490491 45 57.5 1 0 +75 1 1 0 51.2273 59.7237 48.0142 0.122729 0.97237 -0.198581 0.490491 45 57.5 1 0 +76 1 1 0 52.2012 59.6639 48.6721 0.220117 0.966393 -0.132792 0.490491 45 57.5 1 0 +77 1 1 0 51.5155 59.7943 48.6674 0.151549 0.979426 -0.133256 0.490491 45 57.5 1 0 +78 1 1 0 50.8224 59.8769 48.6693 0.0822422 0.987688 -0.133071 0.490491 45 57.5 1 0 +79 1 1 0 52.4733 59.6664 49.3343 0.247326 0.966643 -0.0665668 0.490491 45 57.5 1 0 +80 1 1 0 51.796 59.8148 49.334 0.179596 0.981483 -0.0666046 0.490491 45 57.5 1 0 +81 1 1 0 52.061 59.7853 50 0.206103 0.97853 0 0.490491 45 57.5 1 0 +82 1 1 0 51.3795 59.9044 50 0.137952 0.990439 0 0.490491 45 57.5 1 0 +83 1 1 0 51.1039 59.9165 49.3329 0.110385 0.991648 -0.0667095 0.490491 45 57.5 1 0 +84 1 1 0 50.4125 59.9692 49.3326 0.0412479 0.996917 -0.0667412 0.490491 45 57.5 1 0 +85 1 1 0 50.6914 59.9761 50 0.0691418 0.997607 0 0.490491 45 57.5 1 0 +86 1 1 0 50 60 50 0 1 0 0.490491 45 57.5 1 0 +87 1 1 0 53.3061 59.2268 48.0161 0.330606 0.922682 -0.198387 0.490491 45 57.5 1 0 +88 1 1 0 52.8993 59.4782 48.6743 0.289929 0.947822 -0.13257 0.490491 45 57.5 1 0 +89 1 1 0 52.6155 59.4443 48.0091 0.26155 0.944433 -0.199094 0.490491 45 57.5 1 0 +90 1 1 0 47.2531 58.5264 45.5554 -0.274694 0.85264 -0.444464 0.490491 45 57.5 1 0 +91 1 1 0 46.5715 58.2845 45.5713 -0.342848 0.828447 -0.442867 0.490491 45 57.5 1 0 +92 1 1 0 47.6132 58.9101 46.1381 -0.238677 0.891007 -0.386187 0.490491 45 57.5 1 0 +93 1 1 0 46.9234 58.6973 46.1409 -0.307659 0.869725 -0.385906 0.490491 45 57.5 1 0 +94 1 1 0 46.2496 58.4391 46.1639 -0.375038 0.843912 -0.383614 0.490491 45 57.5 1 0 +95 1 1 0 47.9881 59.2388 46.7447 -0.201189 0.92388 -0.32553 0.490491 45 57.5 1 0 +96 1 1 0 47.2937 59.0583 46.7407 -0.270627 0.905832 -0.325929 0.490491 45 57.5 1 0 +97 1 1 0 48.3754 59.5106 47.3713 -0.16246 0.951057 -0.262865 0.490491 45 57.5 1 0 +98 1 1 0 47.6755 59.3605 47.3585 -0.232455 0.93605 -0.264151 0.490491 45 57.5 1 0 +99 1 1 0 46.9874 59.1624 47.3592 -0.301258 0.916244 -0.264082 0.490491 45 57.5 1 0 +100 1 1 0 46.6079 58.8284 46.7514 -0.339209 0.882837 -0.324863 0.490491 45 57.5 1 0 +101 1 1 0 45.9457 58.5534 46.7748 -0.405434 0.855337 -0.322525 0.490491 45 57.5 1 0 +102 1 1 0 46.3148 58.9174 47.3734 -0.368518 0.891742 -0.262661 0.490491 45 57.5 1 0 +103 1 1 0 45.6611 58.6267 47.4011 -0.433888 0.862669 -0.259892 0.490491 45 57.5 1 0 +104 1 1 0 48.7727 59.7237 48.0142 -0.122729 0.97237 -0.198581 0.490491 45 57.5 1 0 +105 1 1 0 48.0822 59.6119 48.0166 -0.19178 0.961188 -0.198337 0.490491 45 57.5 1 0 +106 1 1 0 49.1776 59.8769 48.6693 -0.0822422 0.987688 -0.133071 0.490491 45 57.5 1 0 +107 1 1 0 48.4845 59.7943 48.6674 -0.151549 0.979426 -0.133256 0.490491 45 57.5 1 0 +108 1 1 0 47.7988 59.6639 48.6721 -0.220117 0.966393 -0.132792 0.490491 45 57.5 1 0 +109 1 1 0 49.5875 59.9692 49.3326 -0.0412479 0.996917 -0.0667412 0.490491 45 57.5 1 0 +110 1 1 0 48.8961 59.9165 49.3329 -0.110385 0.991648 -0.0667095 0.490491 45 57.5 1 0 +111 1 1 0 49.3086 59.9761 50 -0.0691418 0.997607 0 0.490491 45 57.5 1 0 +112 1 1 0 48.6205 59.9044 50 -0.137952 0.990439 0 0.490491 45 57.5 1 0 +113 1 1 0 48.204 59.8148 49.334 -0.179596 0.981483 -0.0666046 0.490491 45 57.5 1 0 +114 1 1 0 47.5267 59.6664 49.3343 -0.247326 0.966643 -0.0665668 0.490491 45 57.5 1 0 +115 1 1 0 47.939 59.7853 50 -0.206103 0.97853 0 0.490491 45 57.5 1 0 +116 1 1 0 47.2673 59.6194 50 -0.273267 0.961938 0 0.490491 45 57.5 1 0 +117 1 1 0 46.0265 58.964 48.0359 -0.39735 0.896401 -0.196412 0.490491 45 57.5 1 0 +118 1 1 0 45.3973 58.6587 48.0398 -0.460266 0.865871 -0.196015 0.490491 45 57.5 1 0 +119 1 1 0 46.4177 59.243 48.6834 -0.358229 0.924305 -0.131656 0.490491 45 57.5 1 0 +120 1 1 0 45.7764 58.968 48.6825 -0.422363 0.896801 -0.131749 0.490491 45 57.5 1 0 +121 1 1 0 45.1556 58.6493 48.688 -0.484441 0.864929 -0.1312 0.490491 45 57.5 1 0 +122 1 1 0 46.8322 59.462 49.3396 -0.316778 0.946198 -0.0660427 0.490491 45 57.5 1 0 +123 1 1 0 46.1828 59.2192 49.3401 -0.381722 0.921919 -0.0659886 0.490491 45 57.5 1 0 +124 1 1 0 46.6088 59.4074 50 -0.339122 0.940742 0 0.490491 45 57.5 1 0 +125 1 1 0 45.9664 59.1504 50 -0.403355 0.915043 0 0.490491 45 57.5 1 0 +126 1 1 0 45.5463 58.9293 49.3418 -0.445365 0.892927 -0.0658169 0.490491 45 57.5 1 0 +127 1 1 0 44.937 58.5985 49.3424 -0.506298 0.859848 -0.0657577 0.490491 45 57.5 1 0 +128 1 1 0 45.3434 58.8497 50 -0.465657 0.884965 0 0.490491 45 57.5 1 0 +129 1 1 0 44.7427 58.5065 50 -0.525731 0.850651 0 0.490491 45 57.5 1 0 +130 1 1 0 47.3845 59.4443 48.0091 -0.26155 0.944433 -0.199094 0.490491 45 57.5 1 0 +131 1 1 0 47.1007 59.4782 48.6743 -0.289929 0.947822 -0.13257 0.490491 45 57.5 1 0 +132 1 1 0 46.6939 59.2268 48.0161 -0.330606 0.922682 -0.198387 0.490491 45 57.5 1 0 +133 1 1 0 51.9823 58.6853 45.4574 0.198227 0.868535 -0.454262 0.490491 45 57.5 1 0 +134 1 1 0 51.6101 59.0484 46.0586 0.161007 0.904839 -0.394136 0.490491 45 57.5 1 0 +135 1 1 0 51.228 59.3513 46.6766 0.1228 0.93513 -0.332342 0.490491 45 57.5 1 0 +136 1 1 0 50.8232 59.1298 46.0039 0.0823235 0.912983 -0.399607 0.490491 45 57.5 1 0 +137 1 1 0 51.1976 58.7934 45.3912 0.119755 0.879344 -0.460882 0.490491 45 57.5 1 0 +138 1 1 0 50.413 58.8476 45.3579 0.0412991 0.88476 -0.464213 0.490491 45 57.5 1 0 +139 1 1 0 50.815 59.6065 47.3448 0.081501 0.960655 -0.265519 0.490491 45 57.5 1 0 +140 1 1 0 50.4125 59.7885 47.9963 0.0412506 0.978852 -0.200368 0.490491 45 57.5 1 0 +141 1 1 0 50 59.6386 47.336 0 0.963861 -0.266405 0.490491 45 57.5 1 0 +142 1 1 0 50 59.9105 48.6648 0 0.991046 -0.133524 0.490491 45 57.5 1 0 +143 1 1 0 49.5875 59.7885 47.9963 -0.0412506 0.978852 -0.200368 0.490491 45 57.5 1 0 +144 1 1 0 49.185 59.6065 47.3448 -0.081501 0.960655 -0.265519 0.490491 45 57.5 1 0 +145 1 1 0 49.587 58.8476 45.3579 -0.0412991 0.88476 -0.464213 0.490491 45 57.5 1 0 +146 1 1 0 49.1768 59.1298 46.0039 -0.0823235 0.912983 -0.399607 0.490491 45 57.5 1 0 +147 1 1 0 48.8024 58.7934 45.3912 -0.119755 0.879344 -0.460882 0.490491 45 57.5 1 0 +148 1 1 0 48.772 59.3513 46.6766 -0.1228 0.93513 -0.332342 0.490491 45 57.5 1 0 +149 1 1 0 48.3899 59.0484 46.0586 -0.161007 0.904839 -0.394136 0.490491 45 57.5 1 0 +150 1 1 0 48.0177 58.6853 45.4574 -0.198227 0.868535 -0.454262 0.490491 45 57.5 1 0 +151 1 1 0 50.413 59.4162 46.6586 0.0413021 0.941618 -0.33414 0.490491 45 57.5 1 0 +152 1 1 0 49.587 59.4162 46.6586 -0.0413021 0.941618 -0.33414 0.490491 45 57.5 1 0 +153 1 1 0 50 59.1609 45.9903 0 0.916092 -0.400968 0.490491 45 57.5 1 0 +154 1 1 0 50 55.2573 58.5065 0 0.525731 0.850651 0.490491 45 57.5 1 0 +155 1 1 0 49.5936 55.7206 58.1921 -0.0406403 0.572055 0.819208 0.490491 45 57.5 1 0 +156 1 1 0 50.4064 55.7206 58.1921 0.0406403 0.572055 0.819208 0.490491 45 57.5 1 0 +157 1 1 0 49.1891 56.1564 57.8384 -0.081086 0.615642 0.783843 0.490491 45 57.5 1 0 +158 1 1 0 50 56.1768 57.8643 0 0.617676 0.786433 0.490491 45 57.5 1 0 +159 1 1 0 50.8109 56.1564 57.8384 0.081086 0.615642 0.783843 0.490491 45 57.5 1 0 +160 1 1 0 48.7886 56.5628 57.4473 -0.121144 0.656282 0.744727 0.490491 45 57.5 1 0 +161 1 1 0 49.5936 56.6088 57.4939 -0.0406418 0.660883 0.749387 0.490491 45 57.5 1 0 +162 1 1 0 48.3938 56.9378 57.0205 -0.160622 0.69378 0.702047 0.490491 45 57.5 1 0 +163 1 1 0 49.1943 57.0062 57.0897 -0.0805729 0.700622 0.708969 0.490491 45 57.5 1 0 +164 1 1 0 50 57.0291 57.1128 0 0.702907 0.711282 0.490491 45 57.5 1 0 +165 1 1 0 50.4064 56.6088 57.4939 0.0406418 0.660883 0.749387 0.490491 45 57.5 1 0 +166 1 1 0 51.2114 56.5628 57.4473 0.121144 0.656282 0.744727 0.490491 45 57.5 1 0 +167 1 1 0 50.8057 57.0062 57.0897 0.0805729 0.700622 0.708969 0.490491 45 57.5 1 0 +168 1 1 0 51.6062 56.9378 57.0205 0.160622 0.69378 0.702047 0.490491 45 57.5 1 0 +169 1 1 0 48.0067 57.2796 56.5601 -0.199331 0.727959 0.656006 0.490491 45 57.5 1 0 +170 1 1 0 48.7881 57.3889 56.6284 -0.121192 0.738887 0.662842 0.490491 45 57.5 1 0 +171 1 1 0 47.6291 57.5865 56.0683 -0.237086 0.758652 0.606825 0.490491 45 57.5 1 0 +172 1 1 0 48.4039 57.7184 56.1546 -0.159613 0.771841 0.615456 0.490491 45 57.5 1 0 +173 1 1 0 49.1886 57.802 56.2024 -0.0811417 0.780205 0.620239 0.490491 45 57.5 1 0 +174 1 1 0 47.2629 57.8572 55.5474 -0.273706 0.785715 0.55474 0.490491 45 57.5 1 0 +175 1 1 0 48.0273 58.015 55.6451 -0.197274 0.801504 0.564513 0.490491 45 57.5 1 0 +176 1 1 0 46.9098 58.0902 55 -0.309017 0.809017 0.5 0.490491 45 57.5 1 0 +177 1 1 0 47.6655 58.2715 55.112 -0.233445 0.827147 0.511205 0.490491 45 57.5 1 0 +178 1 1 0 48.4357 58.4018 55.1926 -0.156434 0.840178 0.519259 0.490491 45 57.5 1 0 +179 1 1 0 48.8092 58.1217 55.7114 -0.119078 0.81217 0.57114 0.490491 45 57.5 1 0 +180 1 1 0 49.5933 58.1752 55.7446 -0.040675 0.817523 0.574458 0.490491 45 57.5 1 0 +181 1 1 0 49.2154 58.4803 55.2411 -0.0784592 0.848029 0.52411 0.490491 45 57.5 1 0 +182 1 1 0 50 58.5065 55.2573 0 0.850651 0.525731 0.490491 45 57.5 1 0 +183 1 1 0 51.2119 57.3889 56.6284 0.121192 0.738887 0.662842 0.490491 45 57.5 1 0 +184 1 1 0 51.9933 57.2796 56.5601 0.199331 0.727959 0.656006 0.490491 45 57.5 1 0 +185 1 1 0 50.8114 57.802 56.2024 0.0811417 0.780205 0.620239 0.490491 45 57.5 1 0 +186 1 1 0 51.5961 57.7184 56.1546 0.159613 0.771841 0.615456 0.490491 45 57.5 1 0 +187 1 1 0 52.3709 57.5865 56.0683 0.237086 0.758652 0.606825 0.490491 45 57.5 1 0 +188 1 1 0 50.4067 58.1752 55.7446 0.040675 0.817523 0.574458 0.490491 45 57.5 1 0 +189 1 1 0 51.1908 58.1217 55.7114 0.119078 0.81217 0.57114 0.490491 45 57.5 1 0 +190 1 1 0 50.7846 58.4803 55.2411 0.0784592 0.848029 0.52411 0.490491 45 57.5 1 0 +191 1 1 0 51.5643 58.4018 55.1926 0.156434 0.840178 0.519259 0.490491 45 57.5 1 0 +192 1 1 0 51.9727 58.015 55.6451 0.197274 0.801504 0.564513 0.490491 45 57.5 1 0 +193 1 1 0 52.7371 57.8572 55.5474 0.273706 0.785715 0.55474 0.490491 45 57.5 1 0 +194 1 1 0 52.3345 58.2715 55.112 0.233445 0.827147 0.511205 0.490491 45 57.5 1 0 +195 1 1 0 53.0902 58.0902 55 0.309017 0.809017 0.5 0.490491 45 57.5 1 0 +196 1 1 0 49.5932 57.435 56.675 -0.0406769 0.743496 0.667502 0.490491 45 57.5 1 0 +197 1 1 0 50 57.8279 56.2229 0 0.782786 0.622291 0.490491 45 57.5 1 0 +198 1 1 0 50.4068 57.435 56.675 0.0406769 0.743496 0.667502 0.490491 45 57.5 1 0 +199 1 1 0 46.5715 58.2845 54.4287 -0.342848 0.828447 0.442867 0.490491 45 57.5 1 0 +200 1 1 0 47.2531 58.5264 54.4446 -0.274694 0.85264 0.444464 0.490491 45 57.5 1 0 +201 1 1 0 46.2496 58.4391 53.8361 -0.375038 0.843912 0.383614 0.490491 45 57.5 1 0 +202 1 1 0 46.9234 58.6973 53.8591 -0.307659 0.869725 0.385906 0.490491 45 57.5 1 0 +203 1 1 0 47.6132 58.9101 53.8619 -0.238677 0.891007 0.386187 0.490491 45 57.5 1 0 +204 1 1 0 45.9457 58.5534 53.2252 -0.405434 0.855337 0.322525 0.490491 45 57.5 1 0 +205 1 1 0 46.6079 58.8284 53.2486 -0.339209 0.882837 0.324863 0.490491 45 57.5 1 0 +206 1 1 0 45.6611 58.6267 52.5989 -0.433888 0.862669 0.259892 0.490491 45 57.5 1 0 +207 1 1 0 46.3148 58.9174 52.6266 -0.368518 0.891742 0.262661 0.490491 45 57.5 1 0 +208 1 1 0 46.9874 59.1624 52.6408 -0.301258 0.916244 0.264082 0.490491 45 57.5 1 0 +209 1 1 0 47.2937 59.0583 53.2593 -0.270627 0.905832 0.325929 0.490491 45 57.5 1 0 +210 1 1 0 47.9881 59.2388 53.2553 -0.201189 0.92388 0.32553 0.490491 45 57.5 1 0 +211 1 1 0 47.6755 59.3605 52.6415 -0.232455 0.93605 0.264151 0.490491 45 57.5 1 0 +212 1 1 0 48.3754 59.5106 52.6287 -0.16246 0.951057 0.262865 0.490491 45 57.5 1 0 +213 1 1 0 45.3973 58.6587 51.9602 -0.460266 0.865871 0.196015 0.490491 45 57.5 1 0 +214 1 1 0 46.0265 58.964 51.9641 -0.39735 0.896401 0.196412 0.490491 45 57.5 1 0 +215 1 1 0 45.1556 58.6493 51.312 -0.484441 0.864929 0.1312 0.490491 45 57.5 1 0 +216 1 1 0 45.7764 58.968 51.3175 -0.422363 0.896801 0.131749 0.490491 45 57.5 1 0 +217 1 1 0 46.4177 59.243 51.3166 -0.358229 0.924305 0.131656 0.490491 45 57.5 1 0 +218 1 1 0 44.937 58.5985 50.6576 -0.506298 0.859848 0.0657577 0.490491 45 57.5 1 0 +219 1 1 0 45.5463 58.9293 50.6582 -0.445365 0.892927 0.0658169 0.490491 45 57.5 1 0 +220 1 1 0 46.1828 59.2192 50.6599 -0.381722 0.921919 0.0659886 0.490491 45 57.5 1 0 +221 1 1 0 46.8322 59.462 50.6604 -0.316778 0.946198 0.0660427 0.490491 45 57.5 1 0 +222 1 1 0 48.0822 59.6119 51.9834 -0.19178 0.961188 0.198337 0.490491 45 57.5 1 0 +223 1 1 0 48.7727 59.7237 51.9858 -0.122729 0.97237 0.198581 0.490491 45 57.5 1 0 +224 1 1 0 47.7988 59.6639 51.3279 -0.220117 0.966393 0.132792 0.490491 45 57.5 1 0 +225 1 1 0 48.4845 59.7943 51.3326 -0.151549 0.979426 0.133256 0.490491 45 57.5 1 0 +226 1 1 0 49.1776 59.8769 51.3307 -0.0822422 0.987688 0.133071 0.490491 45 57.5 1 0 +227 1 1 0 47.5267 59.6664 50.6657 -0.247326 0.966643 0.0665668 0.490491 45 57.5 1 0 +228 1 1 0 48.204 59.8148 50.666 -0.179596 0.981483 0.0666046 0.490491 45 57.5 1 0 +229 1 1 0 48.8961 59.9165 50.6671 -0.110385 0.991648 0.0667095 0.490491 45 57.5 1 0 +230 1 1 0 49.5875 59.9692 50.6674 -0.0412479 0.996917 0.0667412 0.490491 45 57.5 1 0 +231 1 1 0 46.6939 59.2268 51.9839 -0.330606 0.922682 0.198387 0.490491 45 57.5 1 0 +232 1 1 0 47.1007 59.4782 51.3257 -0.289929 0.947822 0.13257 0.490491 45 57.5 1 0 +233 1 1 0 47.3845 59.4443 51.9909 -0.26155 0.944433 0.199094 0.490491 45 57.5 1 0 +234 1 1 0 52.7469 58.5264 54.4446 0.274694 0.85264 0.444464 0.490491 45 57.5 1 0 +235 1 1 0 53.4285 58.2845 54.4287 0.342848 0.828447 0.442867 0.490491 45 57.5 1 0 +236 1 1 0 52.3868 58.9101 53.8619 0.238677 0.891007 0.386187 0.490491 45 57.5 1 0 +237 1 1 0 53.0766 58.6973 53.8591 0.307659 0.869725 0.385906 0.490491 45 57.5 1 0 +238 1 1 0 53.7504 58.4391 53.8361 0.375038 0.843912 0.383614 0.490491 45 57.5 1 0 +239 1 1 0 52.0119 59.2388 53.2553 0.201189 0.92388 0.32553 0.490491 45 57.5 1 0 +240 1 1 0 52.7063 59.0583 53.2593 0.270627 0.905832 0.325929 0.490491 45 57.5 1 0 +241 1 1 0 51.6246 59.5106 52.6287 0.16246 0.951057 0.262865 0.490491 45 57.5 1 0 +242 1 1 0 52.3245 59.3605 52.6415 0.232455 0.93605 0.264151 0.490491 45 57.5 1 0 +243 1 1 0 53.0126 59.1624 52.6408 0.301258 0.916244 0.264082 0.490491 45 57.5 1 0 +244 1 1 0 53.3921 58.8284 53.2486 0.339209 0.882837 0.324863 0.490491 45 57.5 1 0 +245 1 1 0 54.0543 58.5534 53.2252 0.405434 0.855337 0.322525 0.490491 45 57.5 1 0 +246 1 1 0 53.6852 58.9174 52.6266 0.368518 0.891742 0.262661 0.490491 45 57.5 1 0 +247 1 1 0 54.3389 58.6267 52.5989 0.433888 0.862669 0.259892 0.490491 45 57.5 1 0 +248 1 1 0 51.2273 59.7237 51.9858 0.122729 0.97237 0.198581 0.490491 45 57.5 1 0 +249 1 1 0 51.9178 59.6119 51.9834 0.19178 0.961188 0.198337 0.490491 45 57.5 1 0 +250 1 1 0 50.8224 59.8769 51.3307 0.0822422 0.987688 0.133071 0.490491 45 57.5 1 0 +251 1 1 0 51.5155 59.7943 51.3326 0.151549 0.979426 0.133256 0.490491 45 57.5 1 0 +252 1 1 0 52.2012 59.6639 51.3279 0.220117 0.966393 0.132792 0.490491 45 57.5 1 0 +253 1 1 0 50.4125 59.9692 50.6674 0.0412479 0.996917 0.0667412 0.490491 45 57.5 1 0 +254 1 1 0 51.1039 59.9165 50.6671 0.110385 0.991648 0.0667095 0.490491 45 57.5 1 0 +255 1 1 0 51.796 59.8148 50.666 0.179596 0.981483 0.0666046 0.490491 45 57.5 1 0 +256 1 1 0 52.4733 59.6664 50.6657 0.247326 0.966643 0.0665668 0.490491 45 57.5 1 0 +257 1 1 0 53.9735 58.964 51.9641 0.39735 0.896401 0.196412 0.490491 45 57.5 1 0 +258 1 1 0 54.6027 58.6587 51.9602 0.460266 0.865871 0.196015 0.490491 45 57.5 1 0 +259 1 1 0 53.5823 59.243 51.3166 0.358229 0.924305 0.131656 0.490491 45 57.5 1 0 +260 1 1 0 54.2236 58.968 51.3175 0.422363 0.896801 0.131749 0.490491 45 57.5 1 0 +261 1 1 0 54.8444 58.6493 51.312 0.484441 0.864929 0.1312 0.490491 45 57.5 1 0 +262 1 1 0 53.1678 59.462 50.6604 0.316778 0.946198 0.0660427 0.490491 45 57.5 1 0 +263 1 1 0 53.8172 59.2192 50.6599 0.381722 0.921919 0.0659886 0.490491 45 57.5 1 0 +264 1 1 0 54.4537 58.9293 50.6582 0.445365 0.892927 0.0658169 0.490491 45 57.5 1 0 +265 1 1 0 55.063 58.5985 50.6576 0.506298 0.859848 0.0657577 0.490491 45 57.5 1 0 +266 1 1 0 52.6155 59.4443 51.9909 0.26155 0.944433 0.199094 0.490491 45 57.5 1 0 +267 1 1 0 52.8993 59.4782 51.3257 0.289929 0.947822 0.13257 0.490491 45 57.5 1 0 +268 1 1 0 53.3061 59.2268 51.9839 0.330606 0.922682 0.198387 0.490491 45 57.5 1 0 +269 1 1 0 48.0177 58.6853 54.5426 -0.198227 0.868535 0.454262 0.490491 45 57.5 1 0 +270 1 1 0 48.3899 59.0484 53.9414 -0.161007 0.904839 0.394136 0.490491 45 57.5 1 0 +271 1 1 0 48.772 59.3513 53.3234 -0.1228 0.93513 0.332342 0.490491 45 57.5 1 0 +272 1 1 0 49.1768 59.1298 53.9961 -0.0823235 0.912983 0.399607 0.490491 45 57.5 1 0 +273 1 1 0 48.8024 58.7934 54.6088 -0.119755 0.879344 0.460882 0.490491 45 57.5 1 0 +274 1 1 0 49.587 58.8476 54.6421 -0.0412991 0.88476 0.464213 0.490491 45 57.5 1 0 +275 1 1 0 49.185 59.6065 52.6552 -0.081501 0.960655 0.265519 0.490491 45 57.5 1 0 +276 1 1 0 49.5875 59.7885 52.0037 -0.0412506 0.978852 0.200368 0.490491 45 57.5 1 0 +277 1 1 0 50 59.6386 52.664 0 0.963861 0.266405 0.490491 45 57.5 1 0 +278 1 1 0 50 59.9105 51.3352 0 0.991046 0.133524 0.490491 45 57.5 1 0 +279 1 1 0 50.4125 59.7885 52.0037 0.0412506 0.978852 0.200368 0.490491 45 57.5 1 0 +280 1 1 0 50.815 59.6065 52.6552 0.081501 0.960655 0.265519 0.490491 45 57.5 1 0 +281 1 1 0 50.413 58.8476 54.6421 0.0412991 0.88476 0.464213 0.490491 45 57.5 1 0 +282 1 1 0 50.8232 59.1298 53.9961 0.0823235 0.912983 0.399607 0.490491 45 57.5 1 0 +283 1 1 0 51.1976 58.7934 54.6088 0.119755 0.879344 0.460882 0.490491 45 57.5 1 0 +284 1 1 0 51.228 59.3513 53.3234 0.1228 0.93513 0.332342 0.490491 45 57.5 1 0 +285 1 1 0 51.6101 59.0484 53.9414 0.161007 0.904839 0.394136 0.490491 45 57.5 1 0 +286 1 1 0 51.9823 58.6853 54.5426 0.198227 0.868535 0.454262 0.490491 45 57.5 1 0 +287 1 1 0 49.587 59.4162 53.3414 -0.0413021 0.941618 0.33414 0.490491 45 57.5 1 0 +288 1 1 0 50.413 59.4162 53.3414 0.0413021 0.941618 0.33414 0.490491 45 57.5 1 0 +289 1 1 0 50 59.1609 54.0097 0 0.916092 0.400968 0.490491 45 57.5 1 0 +290 1 1 0 50 54.6566 58.8497 0 0.465657 0.884965 0.490491 45 57.5 1 0 +291 1 1 0 49.3424 55.063 58.5985 -0.0657577 0.506298 0.859848 0.490491 45 57.5 1 0 +292 1 1 0 50 54.0336 59.1504 0 0.403355 0.915043 0.490491 45 57.5 1 0 +293 1 1 0 49.3418 54.4537 58.9293 -0.0658169 0.445365 0.892927 0.490491 45 57.5 1 0 +294 1 1 0 48.688 54.8444 58.6493 -0.1312 0.484441 0.864929 0.490491 45 57.5 1 0 +295 1 1 0 50 53.3912 59.4074 0 0.339122 0.940742 0.490491 45 57.5 1 0 +296 1 1 0 49.3401 53.8172 59.2192 -0.0659885 0.381722 0.921919 0.490491 45 57.5 1 0 +297 1 1 0 50 52.7327 59.6194 0 0.273267 0.961938 0.490491 45 57.5 1 0 +298 1 1 0 49.3396 53.1678 59.462 -0.0660427 0.316778 0.946198 0.490491 45 57.5 1 0 +299 1 1 0 48.6834 53.5823 59.243 -0.131656 0.358229 0.924305 0.490491 45 57.5 1 0 +300 1 1 0 48.6825 54.2236 58.968 -0.131749 0.422363 0.896801 0.490491 45 57.5 1 0 +301 1 1 0 48.0398 54.6027 58.6587 -0.196015 0.460266 0.865871 0.490491 45 57.5 1 0 +302 1 1 0 48.0359 53.9735 58.964 -0.196412 0.39735 0.896401 0.490491 45 57.5 1 0 +303 1 1 0 47.4011 54.3389 58.6267 -0.259892 0.433888 0.862669 0.490491 45 57.5 1 0 +304 1 1 0 50 52.061 59.7853 0 0.206103 0.97853 0.490491 45 57.5 1 0 +305 1 1 0 49.3343 52.4733 59.6664 -0.0665668 0.247326 0.966643 0.490491 45 57.5 1 0 +306 1 1 0 50 51.3795 59.9044 0 0.137952 0.990439 0.490491 45 57.5 1 0 +307 1 1 0 49.334 51.796 59.8148 -0.0666046 0.179596 0.981483 0.490491 45 57.5 1 0 +308 1 1 0 48.6721 52.2012 59.6639 -0.132792 0.220117 0.966393 0.490491 45 57.5 1 0 +309 1 1 0 50 50.6914 59.9761 0 0.0691418 0.997607 0.490491 45 57.5 1 0 +310 1 1 0 49.3329 51.1039 59.9165 -0.0667095 0.110385 0.991648 0.490491 45 57.5 1 0 +311 1 1 0 50 50 60 0 0 1 0.490491 45 57.5 1 0 +312 1 1 0 49.3326 50.4125 59.9692 -0.0667412 0.0412479 0.996917 0.490491 45 57.5 1 0 +313 1 1 0 48.6693 50.8224 59.8769 -0.133071 0.0822422 0.987688 0.490491 45 57.5 1 0 +314 1 1 0 48.6674 51.5155 59.7943 -0.133256 0.151549 0.979426 0.490491 45 57.5 1 0 +315 1 1 0 48.0166 51.9178 59.6119 -0.198337 0.19178 0.961188 0.490491 45 57.5 1 0 +316 1 1 0 48.0142 51.2273 59.7237 -0.198581 0.122729 0.97237 0.490491 45 57.5 1 0 +317 1 1 0 47.3713 51.6246 59.5106 -0.262865 0.16246 0.951057 0.490491 45 57.5 1 0 +318 1 1 0 47.3734 53.6852 58.9174 -0.262661 0.368518 0.891742 0.490491 45 57.5 1 0 +319 1 1 0 46.7748 54.0543 58.5534 -0.322525 0.405434 0.855337 0.490491 45 57.5 1 0 +320 1 1 0 47.3592 53.0126 59.1624 -0.264082 0.301258 0.916244 0.490491 45 57.5 1 0 +321 1 1 0 46.7514 53.3921 58.8284 -0.324863 0.339209 0.882837 0.490491 45 57.5 1 0 +322 1 1 0 46.1639 53.7504 58.4391 -0.383614 0.375038 0.843912 0.490491 45 57.5 1 0 +323 1 1 0 47.3585 52.3245 59.3605 -0.264151 0.232455 0.93605 0.490491 45 57.5 1 0 +324 1 1 0 46.7407 52.7063 59.0583 -0.325929 0.270627 0.905832 0.490491 45 57.5 1 0 +325 1 1 0 46.7447 52.0119 59.2388 -0.32553 0.201189 0.92388 0.490491 45 57.5 1 0 +326 1 1 0 46.1381 52.3868 58.9101 -0.386187 0.238677 0.891007 0.490491 45 57.5 1 0 +327 1 1 0 46.1409 53.0766 58.6973 -0.385906 0.307659 0.869725 0.490491 45 57.5 1 0 +328 1 1 0 45.5713 53.4285 58.2845 -0.442867 0.342848 0.828447 0.490491 45 57.5 1 0 +329 1 1 0 45.5554 52.7469 58.5264 -0.444464 0.274694 0.85264 0.490491 45 57.5 1 0 +330 1 1 0 45 53.0902 58.0902 -0.5 0.309017 0.809017 0.490491 45 57.5 1 0 +331 1 1 0 48.6743 52.8993 59.4782 -0.13257 0.289929 0.947822 0.490491 45 57.5 1 0 +332 1 1 0 48.0091 52.6155 59.4443 -0.199094 0.26155 0.944433 0.490491 45 57.5 1 0 +333 1 1 0 48.0161 53.3061 59.2268 -0.198387 0.330606 0.922682 0.490491 45 57.5 1 0 +334 1 1 0 50 49.3086 59.9761 0 -0.0691418 0.997607 0.490491 45 57.5 1 0 +335 1 1 0 49.3326 49.5875 59.9692 -0.0667412 -0.0412479 0.996917 0.490491 45 57.5 1 0 +336 1 1 0 50 48.6205 59.9044 0 -0.137952 0.990439 0.490491 45 57.5 1 0 +337 1 1 0 49.3329 48.8961 59.9165 -0.0667095 -0.110385 0.991648 0.490491 45 57.5 1 0 +338 1 1 0 48.6693 49.1776 59.8769 -0.133071 -0.0822422 0.987688 0.490491 45 57.5 1 0 +339 1 1 0 50 47.939 59.7853 0 -0.206103 0.97853 0.490491 45 57.5 1 0 +340 1 1 0 49.334 48.204 59.8148 -0.0666046 -0.179596 0.981483 0.490491 45 57.5 1 0 +341 1 1 0 50 47.2673 59.6194 0 -0.273267 0.961938 0.490491 45 57.5 1 0 +342 1 1 0 49.3343 47.5267 59.6664 -0.0665668 -0.247326 0.966643 0.490491 45 57.5 1 0 +343 1 1 0 48.6721 47.7988 59.6639 -0.132792 -0.220117 0.966393 0.490491 45 57.5 1 0 +344 1 1 0 48.6674 48.4845 59.7943 -0.133256 -0.151549 0.979426 0.490491 45 57.5 1 0 +345 1 1 0 48.0142 48.7727 59.7237 -0.198581 -0.122729 0.97237 0.490491 45 57.5 1 0 +346 1 1 0 48.0166 48.0822 59.6119 -0.198337 -0.19178 0.961188 0.490491 45 57.5 1 0 +347 1 1 0 47.3713 48.3754 59.5106 -0.262865 -0.16246 0.951057 0.490491 45 57.5 1 0 +348 1 1 0 50 46.6088 59.4074 0 -0.339122 0.940742 0.490491 45 57.5 1 0 +349 1 1 0 49.3396 46.8322 59.462 -0.0660427 -0.316778 0.946198 0.490491 45 57.5 1 0 +350 1 1 0 50 45.9664 59.1504 0 -0.403355 0.915043 0.490491 45 57.5 1 0 +351 1 1 0 49.3401 46.1828 59.2192 -0.0659885 -0.381722 0.921919 0.490491 45 57.5 1 0 +352 1 1 0 48.6834 46.4177 59.243 -0.131656 -0.358229 0.924305 0.490491 45 57.5 1 0 +353 1 1 0 50 45.3434 58.8497 0 -0.465657 0.884965 0.490491 45 57.5 1 0 +354 1 1 0 49.3418 45.5463 58.9293 -0.0658169 -0.445365 0.892927 0.490491 45 57.5 1 0 +355 1 1 0 50 44.7427 58.5065 0 -0.525731 0.850651 0.490491 45 57.5 1 0 +356 1 1 0 49.3424 44.937 58.5985 -0.0657577 -0.506298 0.859848 0.490491 45 57.5 1 0 +357 1 1 0 48.688 45.1556 58.6493 -0.1312 -0.484441 0.864929 0.490491 45 57.5 1 0 +358 1 1 0 48.6825 45.7764 58.968 -0.131749 -0.422363 0.896801 0.490491 45 57.5 1 0 +359 1 1 0 48.0359 46.0265 58.964 -0.196412 -0.39735 0.896401 0.490491 45 57.5 1 0 +360 1 1 0 48.0398 45.3973 58.6587 -0.196015 -0.460266 0.865871 0.490491 45 57.5 1 0 +361 1 1 0 47.4011 45.6611 58.6267 -0.259892 -0.433888 0.862669 0.490491 45 57.5 1 0 +362 1 1 0 47.3585 47.6755 59.3605 -0.264151 -0.232455 0.93605 0.490491 45 57.5 1 0 +363 1 1 0 46.7447 47.9881 59.2388 -0.32553 -0.201189 0.92388 0.490491 45 57.5 1 0 +364 1 1 0 47.3592 46.9874 59.1624 -0.264082 -0.301258 0.916244 0.490491 45 57.5 1 0 +365 1 1 0 46.7407 47.2937 59.0583 -0.325929 -0.270627 0.905832 0.490491 45 57.5 1 0 +366 1 1 0 46.1381 47.6132 58.9101 -0.386187 -0.238677 0.891007 0.490491 45 57.5 1 0 +367 1 1 0 47.3734 46.3148 58.9174 -0.262661 -0.368518 0.891742 0.490491 45 57.5 1 0 +368 1 1 0 46.7514 46.6079 58.8284 -0.324863 -0.339209 0.882837 0.490491 45 57.5 1 0 +369 1 1 0 46.7748 45.9457 58.5534 -0.322525 -0.405434 0.855337 0.490491 45 57.5 1 0 +370 1 1 0 46.1639 46.2496 58.4391 -0.383614 -0.375038 0.843912 0.490491 45 57.5 1 0 +371 1 1 0 46.1409 46.9234 58.6973 -0.385906 -0.307659 0.869725 0.490491 45 57.5 1 0 +372 1 1 0 45.5554 47.2531 58.5264 -0.444464 -0.274694 0.85264 0.490491 45 57.5 1 0 +373 1 1 0 45.5713 46.5715 58.2845 -0.442867 -0.342848 0.828447 0.490491 45 57.5 1 0 +374 1 1 0 45 46.9098 58.0902 -0.5 -0.309017 0.809017 0.490491 45 57.5 1 0 +375 1 1 0 48.6743 47.1007 59.4782 -0.13257 -0.289929 0.947822 0.490491 45 57.5 1 0 +376 1 1 0 48.0161 46.6939 59.2268 -0.198387 -0.330606 0.922682 0.490491 45 57.5 1 0 +377 1 1 0 48.0091 47.3845 59.4443 -0.199094 -0.26155 0.944433 0.490491 45 57.5 1 0 +378 1 1 0 44.888 52.3345 58.2715 -0.511205 0.233445 0.827147 0.490491 45 57.5 1 0 +379 1 1 0 44.4526 52.7371 57.8572 -0.55474 0.273706 0.785715 0.490491 45 57.5 1 0 +380 1 1 0 44.8074 51.5643 58.4018 -0.519259 0.156434 0.840178 0.490491 45 57.5 1 0 +381 1 1 0 44.3549 51.9727 58.015 -0.564513 0.197274 0.801504 0.490491 45 57.5 1 0 +382 1 1 0 43.9317 52.3709 57.5865 -0.606825 0.237086 0.758652 0.490491 45 57.5 1 0 +383 1 1 0 44.7589 50.7846 58.4803 -0.52411 0.0784592 0.848029 0.490491 45 57.5 1 0 +384 1 1 0 44.2886 51.1908 58.1217 -0.57114 0.119078 0.81217 0.490491 45 57.5 1 0 +385 1 1 0 44.7427 50 58.5065 -0.525731 0 0.850651 0.490491 45 57.5 1 0 +386 1 1 0 44.2554 50.4067 58.1752 -0.574458 0.040675 0.817523 0.490491 45 57.5 1 0 +387 1 1 0 43.7976 50.8114 57.802 -0.620239 0.0811417 0.780205 0.490491 45 57.5 1 0 +388 1 1 0 43.8454 51.5961 57.7184 -0.615456 0.159613 0.771841 0.490491 45 57.5 1 0 +389 1 1 0 43.4399 51.9933 57.2796 -0.656006 0.199331 0.727959 0.490491 45 57.5 1 0 +390 1 1 0 43.3716 51.2119 57.3889 -0.662842 0.121192 0.738887 0.490491 45 57.5 1 0 +391 1 1 0 42.9795 51.6062 56.9378 -0.702047 0.160622 0.69378 0.490491 45 57.5 1 0 +392 1 1 0 44.7589 49.2154 58.4803 -0.52411 -0.0784592 0.848029 0.490491 45 57.5 1 0 +393 1 1 0 44.2554 49.5933 58.1752 -0.574458 -0.040675 0.817523 0.490491 45 57.5 1 0 +394 1 1 0 44.8074 48.4357 58.4018 -0.519259 -0.156434 0.840178 0.490491 45 57.5 1 0 +395 1 1 0 44.2886 48.8092 58.1217 -0.57114 -0.119078 0.81217 0.490491 45 57.5 1 0 +396 1 1 0 43.7976 49.1886 57.802 -0.620239 -0.0811417 0.780205 0.490491 45 57.5 1 0 +397 1 1 0 44.888 47.6655 58.2715 -0.511205 -0.233445 0.827147 0.490491 45 57.5 1 0 +398 1 1 0 44.3549 48.0273 58.015 -0.564513 -0.197274 0.801504 0.490491 45 57.5 1 0 +399 1 1 0 44.4526 47.2629 57.8572 -0.55474 -0.273706 0.785715 0.490491 45 57.5 1 0 +400 1 1 0 43.9317 47.6291 57.5865 -0.606825 -0.237086 0.758652 0.490491 45 57.5 1 0 +401 1 1 0 43.8454 48.4039 57.7184 -0.615456 -0.159613 0.771841 0.490491 45 57.5 1 0 +402 1 1 0 43.3716 48.7881 57.3889 -0.662842 -0.121192 0.738887 0.490491 45 57.5 1 0 +403 1 1 0 43.4399 48.0067 57.2796 -0.656006 -0.199331 0.727959 0.490491 45 57.5 1 0 +404 1 1 0 42.9795 48.3938 56.9378 -0.702047 -0.160622 0.69378 0.490491 45 57.5 1 0 +405 1 1 0 42.9103 50.8057 57.0062 -0.708969 0.0805729 0.700622 0.490491 45 57.5 1 0 +406 1 1 0 42.5527 51.2114 56.5628 -0.744727 0.121144 0.656282 0.490491 45 57.5 1 0 +407 1 1 0 42.8872 50 57.0291 -0.711282 0 0.702907 0.490491 45 57.5 1 0 +408 1 1 0 42.5061 50.4064 56.6088 -0.749387 0.0406418 0.660883 0.490491 45 57.5 1 0 +409 1 1 0 42.1616 50.8109 56.1564 -0.783843 0.081086 0.615642 0.490491 45 57.5 1 0 +410 1 1 0 42.9103 49.1943 57.0062 -0.708969 -0.0805729 0.700622 0.490491 45 57.5 1 0 +411 1 1 0 42.5061 49.5936 56.6088 -0.749387 -0.0406418 0.660883 0.490491 45 57.5 1 0 +412 1 1 0 42.5527 48.7886 56.5628 -0.744727 -0.121144 0.656282 0.490491 45 57.5 1 0 +413 1 1 0 42.1616 49.1891 56.1564 -0.783843 -0.081086 0.615642 0.490491 45 57.5 1 0 +414 1 1 0 42.1357 50 56.1768 -0.786433 0 0.617676 0.490491 45 57.5 1 0 +415 1 1 0 41.8079 50.4064 55.7206 -0.819207 0.0406403 0.572055 0.490491 45 57.5 1 0 +416 1 1 0 41.8079 49.5936 55.7206 -0.819207 -0.0406403 0.572055 0.490491 45 57.5 1 0 +417 1 1 0 41.4935 50 55.2573 -0.850651 0 0.525731 0.490491 45 57.5 1 0 +418 1 1 0 43.7771 50 57.8279 -0.622291 0 0.782786 0.490491 45 57.5 1 0 +419 1 1 0 43.325 49.5932 57.435 -0.667502 -0.0406769 0.743496 0.490491 45 57.5 1 0 +420 1 1 0 43.325 50.4068 57.435 -0.667502 0.0406769 0.743496 0.490491 45 57.5 1 0 +421 1 1 0 48.6648 50 59.9105 -0.133524 0 0.991046 0.490491 45 57.5 1 0 +422 1 1 0 47.9963 49.5875 59.7885 -0.200368 -0.0412506 0.978852 0.490491 45 57.5 1 0 +423 1 1 0 47.3448 49.185 59.6065 -0.265519 -0.081501 0.960655 0.490491 45 57.5 1 0 +424 1 1 0 47.336 50 59.6386 -0.266405 0 0.963861 0.490491 45 57.5 1 0 +425 1 1 0 47.9963 50.4125 59.7885 -0.200368 0.0412506 0.978852 0.490491 45 57.5 1 0 +426 1 1 0 47.3448 50.815 59.6065 -0.265519 0.081501 0.960655 0.490491 45 57.5 1 0 +427 1 1 0 46.6766 48.772 59.3513 -0.332342 -0.1228 0.93513 0.490491 45 57.5 1 0 +428 1 1 0 46.0586 48.3899 59.0484 -0.394136 -0.161007 0.904839 0.490491 45 57.5 1 0 +429 1 1 0 46.0039 49.1768 59.1298 -0.399607 -0.0823235 0.912983 0.490491 45 57.5 1 0 +430 1 1 0 45.4574 48.0177 58.6853 -0.454262 -0.198227 0.868535 0.490491 45 57.5 1 0 +431 1 1 0 45.3912 48.8024 58.7934 -0.460882 -0.119755 0.879344 0.490491 45 57.5 1 0 +432 1 1 0 45.3579 49.587 58.8476 -0.464213 -0.0412991 0.88476 0.490491 45 57.5 1 0 +433 1 1 0 46.6766 51.228 59.3513 -0.332342 0.1228 0.93513 0.490491 45 57.5 1 0 +434 1 1 0 46.0039 50.8232 59.1298 -0.399607 0.0823235 0.912983 0.490491 45 57.5 1 0 +435 1 1 0 46.0586 51.6101 59.0484 -0.394136 0.161007 0.904839 0.490491 45 57.5 1 0 +436 1 1 0 45.3579 50.413 58.8476 -0.464213 0.0412991 0.88476 0.490491 45 57.5 1 0 +437 1 1 0 45.3912 51.1976 58.7934 -0.460882 0.119755 0.879344 0.490491 45 57.5 1 0 +438 1 1 0 45.4574 51.9823 58.6853 -0.454262 0.198227 0.868535 0.490491 45 57.5 1 0 +439 1 1 0 46.6586 49.587 59.4162 -0.33414 -0.0413021 0.941618 0.490491 45 57.5 1 0 +440 1 1 0 45.9903 50 59.1609 -0.400968 0 0.916092 0.490491 45 57.5 1 0 +441 1 1 0 46.6586 50.413 59.4162 -0.33414 0.0413021 0.941618 0.490491 45 57.5 1 0 +442 1 1 0 50.6576 55.063 58.5985 0.0657577 0.506298 0.859848 0.490491 45 57.5 1 0 +443 1 1 0 51.312 54.8444 58.6493 0.1312 0.484441 0.864929 0.490491 45 57.5 1 0 +444 1 1 0 50.6582 54.4537 58.9293 0.0658169 0.445365 0.892927 0.490491 45 57.5 1 0 +445 1 1 0 51.9602 54.6027 58.6587 0.196015 0.460266 0.865871 0.490491 45 57.5 1 0 +446 1 1 0 51.3175 54.2236 58.968 0.131749 0.422363 0.896801 0.490491 45 57.5 1 0 +447 1 1 0 52.5989 54.3389 58.6267 0.259892 0.433888 0.862669 0.490491 45 57.5 1 0 +448 1 1 0 51.9641 53.9735 58.964 0.196412 0.39735 0.896401 0.490491 45 57.5 1 0 +449 1 1 0 51.3166 53.5823 59.243 0.131656 0.358229 0.924305 0.490491 45 57.5 1 0 +450 1 1 0 50.6599 53.8172 59.2192 0.0659885 0.381722 0.921919 0.490491 45 57.5 1 0 +451 1 1 0 50.6604 53.1678 59.462 0.0660427 0.316778 0.946198 0.490491 45 57.5 1 0 +452 1 1 0 53.2252 54.0543 58.5534 0.322525 0.405434 0.855337 0.490491 45 57.5 1 0 +453 1 1 0 52.6266 53.6852 58.9174 0.262661 0.368518 0.891742 0.490491 45 57.5 1 0 +454 1 1 0 53.8361 53.7504 58.4391 0.383614 0.375038 0.843912 0.490491 45 57.5 1 0 +455 1 1 0 53.2486 53.3921 58.8284 0.324863 0.339209 0.882837 0.490491 45 57.5 1 0 +456 1 1 0 52.6408 53.0126 59.1624 0.264082 0.301258 0.916244 0.490491 45 57.5 1 0 +457 1 1 0 54.4287 53.4285 58.2845 0.442867 0.342848 0.828447 0.490491 45 57.5 1 0 +458 1 1 0 53.8591 53.0766 58.6973 0.385906 0.307659 0.869725 0.490491 45 57.5 1 0 +459 1 1 0 55 53.0902 58.0902 0.5 0.309017 0.809017 0.490491 45 57.5 1 0 +460 1 1 0 54.4446 52.7469 58.5264 0.444464 0.274694 0.85264 0.490491 45 57.5 1 0 +461 1 1 0 53.8619 52.3868 58.9101 0.386187 0.238677 0.891007 0.490491 45 57.5 1 0 +462 1 1 0 53.2593 52.7063 59.0583 0.325929 0.270627 0.905832 0.490491 45 57.5 1 0 +463 1 1 0 52.6415 52.3245 59.3605 0.264151 0.232455 0.93605 0.490491 45 57.5 1 0 +464 1 1 0 53.2553 52.0119 59.2388 0.32553 0.201189 0.92388 0.490491 45 57.5 1 0 +465 1 1 0 52.6287 51.6246 59.5106 0.262865 0.16246 0.951057 0.490491 45 57.5 1 0 +466 1 1 0 50.6657 52.4733 59.6664 0.0665668 0.247326 0.966643 0.490491 45 57.5 1 0 +467 1 1 0 51.3279 52.2012 59.6639 0.132792 0.220117 0.966393 0.490491 45 57.5 1 0 +468 1 1 0 50.666 51.796 59.8148 0.0666046 0.179596 0.981483 0.490491 45 57.5 1 0 +469 1 1 0 51.9834 51.9178 59.6119 0.198337 0.19178 0.961188 0.490491 45 57.5 1 0 +470 1 1 0 51.3326 51.5155 59.7943 0.133256 0.151549 0.979426 0.490491 45 57.5 1 0 +471 1 1 0 51.9858 51.2273 59.7237 0.198581 0.122729 0.97237 0.490491 45 57.5 1 0 +472 1 1 0 51.3307 50.8224 59.8769 0.133071 0.0822422 0.987688 0.490491 45 57.5 1 0 +473 1 1 0 50.6671 51.1039 59.9165 0.0667095 0.110385 0.991648 0.490491 45 57.5 1 0 +474 1 1 0 50.6674 50.4125 59.9692 0.0667412 0.0412479 0.996917 0.490491 45 57.5 1 0 +475 1 1 0 51.9839 53.3061 59.2268 0.198387 0.330606 0.922682 0.490491 45 57.5 1 0 +476 1 1 0 51.9909 52.6155 59.4443 0.199094 0.26155 0.944433 0.490491 45 57.5 1 0 +477 1 1 0 51.3257 52.8993 59.4782 0.13257 0.289929 0.947822 0.490491 45 57.5 1 0 +478 1 1 0 55.5474 52.7371 57.8572 0.55474 0.273706 0.785715 0.490491 45 57.5 1 0 +479 1 1 0 55.112 52.3345 58.2715 0.511205 0.233445 0.827147 0.490491 45 57.5 1 0 +480 1 1 0 56.0683 52.3709 57.5865 0.606825 0.237086 0.758652 0.490491 45 57.5 1 0 +481 1 1 0 55.6451 51.9727 58.015 0.564513 0.197274 0.801504 0.490491 45 57.5 1 0 +482 1 1 0 55.1926 51.5643 58.4018 0.519259 0.156434 0.840178 0.490491 45 57.5 1 0 +483 1 1 0 56.5601 51.9933 57.2796 0.656006 0.199331 0.727959 0.490491 45 57.5 1 0 +484 1 1 0 56.1546 51.5961 57.7184 0.615456 0.159613 0.771841 0.490491 45 57.5 1 0 +485 1 1 0 57.0205 51.6062 56.9378 0.702047 0.160622 0.69378 0.490491 45 57.5 1 0 +486 1 1 0 56.6284 51.2119 57.3889 0.662842 0.121192 0.738887 0.490491 45 57.5 1 0 +487 1 1 0 56.2024 50.8114 57.802 0.620239 0.0811417 0.780205 0.490491 45 57.5 1 0 +488 1 1 0 55.7114 51.1908 58.1217 0.57114 0.119078 0.81217 0.490491 45 57.5 1 0 +489 1 1 0 55.2411 50.7846 58.4803 0.52411 0.0784592 0.848029 0.490491 45 57.5 1 0 +490 1 1 0 55.7446 50.4067 58.1752 0.574458 0.040675 0.817523 0.490491 45 57.5 1 0 +491 1 1 0 55.2573 50 58.5065 0.525731 0 0.850651 0.490491 45 57.5 1 0 +492 1 1 0 57.4473 51.2114 56.5628 0.744727 0.121144 0.656282 0.490491 45 57.5 1 0 +493 1 1 0 57.0897 50.8057 57.0062 0.708969 0.0805729 0.700622 0.490491 45 57.5 1 0 +494 1 1 0 57.8384 50.8109 56.1564 0.783843 0.081086 0.615642 0.490491 45 57.5 1 0 +495 1 1 0 57.4939 50.4064 56.6088 0.749387 0.0406418 0.660883 0.490491 45 57.5 1 0 +496 1 1 0 57.1128 50 57.0291 0.711282 0 0.702907 0.490491 45 57.5 1 0 +497 1 1 0 58.1921 50.4064 55.7206 0.819207 0.0406403 0.572055 0.490491 45 57.5 1 0 +498 1 1 0 57.8643 50 56.1768 0.786433 0 0.617676 0.490491 45 57.5 1 0 +499 1 1 0 58.5065 50 55.2573 0.850651 0 0.525731 0.490491 45 57.5 1 0 +500 1 1 0 58.1921 49.5936 55.7206 0.819207 -0.0406403 0.572055 0.490491 45 57.5 1 0 +501 1 1 0 57.8384 49.1891 56.1564 0.783843 -0.081086 0.615642 0.490491 45 57.5 1 0 +502 1 1 0 57.4939 49.5936 56.6088 0.749387 -0.0406418 0.660883 0.490491 45 57.5 1 0 +503 1 1 0 57.0897 49.1943 57.0062 0.708969 -0.0805729 0.700622 0.490491 45 57.5 1 0 +504 1 1 0 57.4473 48.7886 56.5628 0.744727 -0.121144 0.656282 0.490491 45 57.5 1 0 +505 1 1 0 57.0205 48.3938 56.9378 0.702047 -0.160622 0.69378 0.490491 45 57.5 1 0 +506 1 1 0 55.7446 49.5933 58.1752 0.574458 -0.040675 0.817523 0.490491 45 57.5 1 0 +507 1 1 0 55.2411 49.2154 58.4803 0.52411 -0.0784592 0.848029 0.490491 45 57.5 1 0 +508 1 1 0 56.2024 49.1886 57.802 0.620239 -0.0811417 0.780205 0.490491 45 57.5 1 0 +509 1 1 0 55.7114 48.8092 58.1217 0.57114 -0.119078 0.81217 0.490491 45 57.5 1 0 +510 1 1 0 55.1926 48.4357 58.4018 0.519259 -0.156434 0.840178 0.490491 45 57.5 1 0 +511 1 1 0 56.6284 48.7881 57.3889 0.662842 -0.121192 0.738887 0.490491 45 57.5 1 0 +512 1 1 0 56.1546 48.4039 57.7184 0.615456 -0.159613 0.771841 0.490491 45 57.5 1 0 +513 1 1 0 56.5601 48.0067 57.2796 0.656006 -0.199331 0.727959 0.490491 45 57.5 1 0 +514 1 1 0 56.0683 47.6291 57.5865 0.606825 -0.237086 0.758652 0.490491 45 57.5 1 0 +515 1 1 0 55.6451 48.0273 58.015 0.564513 -0.197274 0.801504 0.490491 45 57.5 1 0 +516 1 1 0 55.112 47.6655 58.2715 0.511205 -0.233445 0.827147 0.490491 45 57.5 1 0 +517 1 1 0 55.5474 47.2629 57.8572 0.55474 -0.273706 0.785715 0.490491 45 57.5 1 0 +518 1 1 0 55 46.9098 58.0902 0.5 -0.309017 0.809017 0.490491 45 57.5 1 0 +519 1 1 0 56.675 50.4068 57.435 0.667502 0.0406769 0.743496 0.490491 45 57.5 1 0 +520 1 1 0 56.675 49.5932 57.435 0.667502 -0.0406769 0.743496 0.490491 45 57.5 1 0 +521 1 1 0 56.2229 50 57.8279 0.622291 0 0.782786 0.490491 45 57.5 1 0 +522 1 1 0 50.6674 49.5875 59.9692 0.0667412 -0.0412479 0.996917 0.490491 45 57.5 1 0 +523 1 1 0 51.3307 49.1776 59.8769 0.133071 -0.0822422 0.987688 0.490491 45 57.5 1 0 +524 1 1 0 50.6671 48.8961 59.9165 0.0667095 -0.110385 0.991648 0.490491 45 57.5 1 0 +525 1 1 0 51.9858 48.7727 59.7237 0.198581 -0.122729 0.97237 0.490491 45 57.5 1 0 +526 1 1 0 51.3326 48.4845 59.7943 0.133256 -0.151549 0.979426 0.490491 45 57.5 1 0 +527 1 1 0 52.6287 48.3754 59.5106 0.262865 -0.16246 0.951057 0.490491 45 57.5 1 0 +528 1 1 0 51.9834 48.0822 59.6119 0.198337 -0.19178 0.961188 0.490491 45 57.5 1 0 +529 1 1 0 51.3279 47.7988 59.6639 0.132792 -0.220117 0.966393 0.490491 45 57.5 1 0 +530 1 1 0 50.666 48.204 59.8148 0.0666046 -0.179596 0.981483 0.490491 45 57.5 1 0 +531 1 1 0 50.6657 47.5267 59.6664 0.0665668 -0.247326 0.966643 0.490491 45 57.5 1 0 +532 1 1 0 53.2553 47.9881 59.2388 0.32553 -0.201189 0.92388 0.490491 45 57.5 1 0 +533 1 1 0 52.6415 47.6755 59.3605 0.264151 -0.232455 0.93605 0.490491 45 57.5 1 0 +534 1 1 0 53.8619 47.6132 58.9101 0.386187 -0.238677 0.891007 0.490491 45 57.5 1 0 +535 1 1 0 53.2593 47.2937 59.0583 0.325929 -0.270627 0.905832 0.490491 45 57.5 1 0 +536 1 1 0 52.6408 46.9874 59.1624 0.264082 -0.301258 0.916244 0.490491 45 57.5 1 0 +537 1 1 0 54.4446 47.2531 58.5264 0.444464 -0.274694 0.85264 0.490491 45 57.5 1 0 +538 1 1 0 53.8591 46.9234 58.6973 0.385906 -0.307659 0.869725 0.490491 45 57.5 1 0 +539 1 1 0 54.4287 46.5715 58.2845 0.442867 -0.342848 0.828447 0.490491 45 57.5 1 0 +540 1 1 0 53.8361 46.2496 58.4391 0.383614 -0.375038 0.843912 0.490491 45 57.5 1 0 +541 1 1 0 53.2486 46.6079 58.8284 0.324863 -0.339209 0.882837 0.490491 45 57.5 1 0 +542 1 1 0 52.6266 46.3148 58.9174 0.262661 -0.368518 0.891742 0.490491 45 57.5 1 0 +543 1 1 0 53.2252 45.9457 58.5534 0.322525 -0.405434 0.855337 0.490491 45 57.5 1 0 +544 1 1 0 52.5989 45.6611 58.6267 0.259892 -0.433888 0.862669 0.490491 45 57.5 1 0 +545 1 1 0 50.6604 46.8322 59.462 0.0660427 -0.316778 0.946198 0.490491 45 57.5 1 0 +546 1 1 0 51.3166 46.4177 59.243 0.131656 -0.358229 0.924305 0.490491 45 57.5 1 0 +547 1 1 0 50.6599 46.1828 59.2192 0.0659885 -0.381722 0.921919 0.490491 45 57.5 1 0 +548 1 1 0 51.9641 46.0265 58.964 0.196412 -0.39735 0.896401 0.490491 45 57.5 1 0 +549 1 1 0 51.3175 45.7764 58.968 0.131749 -0.422363 0.896801 0.490491 45 57.5 1 0 +550 1 1 0 51.9602 45.3973 58.6587 0.196015 -0.460266 0.865871 0.490491 45 57.5 1 0 +551 1 1 0 51.312 45.1556 58.6493 0.1312 -0.484441 0.864929 0.490491 45 57.5 1 0 +552 1 1 0 50.6582 45.5463 58.9293 0.0658169 -0.445365 0.892927 0.490491 45 57.5 1 0 +553 1 1 0 50.6576 44.937 58.5985 0.0657577 -0.506298 0.859848 0.490491 45 57.5 1 0 +554 1 1 0 51.9909 47.3845 59.4443 0.199094 -0.26155 0.944433 0.490491 45 57.5 1 0 +555 1 1 0 51.9839 46.6939 59.2268 0.198387 -0.330606 0.922682 0.490491 45 57.5 1 0 +556 1 1 0 51.3257 47.1007 59.4782 0.13257 -0.289929 0.947822 0.490491 45 57.5 1 0 +557 1 1 0 54.5426 51.9823 58.6853 0.454262 0.198227 0.868535 0.490491 45 57.5 1 0 +558 1 1 0 54.6088 51.1976 58.7934 0.460882 0.119755 0.879344 0.490491 45 57.5 1 0 +559 1 1 0 54.6421 50.413 58.8476 0.464213 0.0412991 0.88476 0.490491 45 57.5 1 0 +560 1 1 0 53.9961 50.8232 59.1298 0.399607 0.0823235 0.912983 0.490491 45 57.5 1 0 +561 1 1 0 53.9414 51.6101 59.0484 0.394136 0.161007 0.904839 0.490491 45 57.5 1 0 +562 1 1 0 53.3234 51.228 59.3513 0.332342 0.1228 0.93513 0.490491 45 57.5 1 0 +563 1 1 0 54.6421 49.587 58.8476 0.464213 -0.0412991 0.88476 0.490491 45 57.5 1 0 +564 1 1 0 54.6088 48.8024 58.7934 0.460882 -0.119755 0.879344 0.490491 45 57.5 1 0 +565 1 1 0 53.9961 49.1768 59.1298 0.399607 -0.0823235 0.912983 0.490491 45 57.5 1 0 +566 1 1 0 54.5426 48.0177 58.6853 0.454262 -0.198227 0.868535 0.490491 45 57.5 1 0 +567 1 1 0 53.9414 48.3899 59.0484 0.394136 -0.161007 0.904839 0.490491 45 57.5 1 0 +568 1 1 0 53.3234 48.772 59.3513 0.332342 -0.1228 0.93513 0.490491 45 57.5 1 0 +569 1 1 0 52.6552 50.815 59.6065 0.265519 0.081501 0.960655 0.490491 45 57.5 1 0 +570 1 1 0 52.664 50 59.6386 0.266405 0 0.963861 0.490491 45 57.5 1 0 +571 1 1 0 52.0037 50.4125 59.7885 0.200368 0.0412506 0.978852 0.490491 45 57.5 1 0 +572 1 1 0 52.6552 49.185 59.6065 0.265519 -0.081501 0.960655 0.490491 45 57.5 1 0 +573 1 1 0 52.0037 49.5875 59.7885 0.200368 -0.0412506 0.978852 0.490491 45 57.5 1 0 +574 1 1 0 51.3352 50 59.9105 0.133524 0 0.991046 0.490491 45 57.5 1 0 +575 1 1 0 54.0097 50 59.1609 0.400968 0 0.916092 0.490491 45 57.5 1 0 +576 1 1 0 53.3414 49.587 59.4162 0.33414 -0.0413021 0.941618 0.490491 45 57.5 1 0 +577 1 1 0 53.3414 50.413 59.4162 0.33414 0.0413021 0.941618 0.490491 45 57.5 1 0 +578 1 1 0 50 54.6566 41.1503 0 0.465657 -0.884965 0.490491 45 57.5 1 0 +579 1 1 0 50.6576 55.063 41.4015 0.0657577 0.506298 -0.859848 0.490491 45 57.5 1 0 +580 1 1 0 50 54.0336 40.8496 0 0.403355 -0.915043 0.490491 45 57.5 1 0 +581 1 1 0 50.6582 54.4537 41.0707 0.0658169 0.445365 -0.892927 0.490491 45 57.5 1 0 +582 1 1 0 51.312 54.8444 41.3507 0.1312 0.484441 -0.864929 0.490491 45 57.5 1 0 +583 1 1 0 50 53.3912 40.5926 0 0.339122 -0.940742 0.490491 45 57.5 1 0 +584 1 1 0 50.6599 53.8172 40.7808 0.0659885 0.381722 -0.921919 0.490491 45 57.5 1 0 +585 1 1 0 50 52.7327 40.3806 0 0.273267 -0.961938 0.490491 45 57.5 1 0 +586 1 1 0 50.6604 53.1678 40.538 0.0660427 0.316778 -0.946198 0.490491 45 57.5 1 0 +587 1 1 0 51.3166 53.5823 40.757 0.131656 0.358229 -0.924305 0.490491 45 57.5 1 0 +588 1 1 0 51.3175 54.2236 41.032 0.131749 0.422363 -0.896801 0.490491 45 57.5 1 0 +589 1 1 0 51.9602 54.6027 41.3413 0.196015 0.460266 -0.865871 0.490491 45 57.5 1 0 +590 1 1 0 51.9641 53.9735 41.036 0.196412 0.39735 -0.896401 0.490491 45 57.5 1 0 +591 1 1 0 52.5989 54.3389 41.3733 0.259892 0.433888 -0.862669 0.490491 45 57.5 1 0 +592 1 1 0 50 52.061 40.2147 0 0.206103 -0.97853 0.490491 45 57.5 1 0 +593 1 1 0 50.6657 52.4733 40.3336 0.0665668 0.247326 -0.966643 0.490491 45 57.5 1 0 +594 1 1 0 50 51.3795 40.0956 0 0.137952 -0.990439 0.490491 45 57.5 1 0 +595 1 1 0 50.666 51.796 40.1852 0.0666046 0.179596 -0.981483 0.490491 45 57.5 1 0 +596 1 1 0 51.3279 52.2012 40.3361 0.132792 0.220117 -0.966393 0.490491 45 57.5 1 0 +597 1 1 0 50 50.6914 40.0239 0 0.0691418 -0.997607 0.490491 45 57.5 1 0 +598 1 1 0 50.6671 51.1039 40.0835 0.0667095 0.110385 -0.991648 0.490491 45 57.5 1 0 +599 1 1 0 50 50 40 0 0 -1 0.490491 45 57.5 1 0 +600 1 1 0 50.6674 50.4125 40.0308 0.0667412 0.0412479 -0.996917 0.490491 45 57.5 1 0 +601 1 1 0 51.3307 50.8224 40.1231 0.133071 0.0822422 -0.987688 0.490491 45 57.5 1 0 +602 1 1 0 51.3326 51.5155 40.2057 0.133256 0.151549 -0.979426 0.490491 45 57.5 1 0 +603 1 1 0 51.9834 51.9178 40.3881 0.198337 0.19178 -0.961188 0.490491 45 57.5 1 0 +604 1 1 0 51.9858 51.2273 40.2763 0.198581 0.122729 -0.97237 0.490491 45 57.5 1 0 +605 1 1 0 52.6287 51.6246 40.4894 0.262865 0.16246 -0.951057 0.490491 45 57.5 1 0 +606 1 1 0 52.6266 53.6852 41.0826 0.262661 0.368518 -0.891742 0.490491 45 57.5 1 0 +607 1 1 0 53.2252 54.0543 41.4466 0.322525 0.405434 -0.855337 0.490491 45 57.5 1 0 +608 1 1 0 52.6408 53.0126 40.8376 0.264082 0.301258 -0.916244 0.490491 45 57.5 1 0 +609 1 1 0 53.2486 53.3921 41.1716 0.324863 0.339209 -0.882837 0.490491 45 57.5 1 0 +610 1 1 0 53.8361 53.7504 41.5609 0.383614 0.375038 -0.843912 0.490491 45 57.5 1 0 +611 1 1 0 52.6415 52.3245 40.6395 0.264151 0.232455 -0.93605 0.490491 45 57.5 1 0 +612 1 1 0 53.2593 52.7063 40.9417 0.325929 0.270627 -0.905832 0.490491 45 57.5 1 0 +613 1 1 0 53.2553 52.0119 40.7612 0.32553 0.201189 -0.92388 0.490491 45 57.5 1 0 +614 1 1 0 53.8619 52.3868 41.0899 0.386187 0.238677 -0.891007 0.490491 45 57.5 1 0 +615 1 1 0 53.8591 53.0766 41.3027 0.385906 0.307659 -0.869725 0.490491 45 57.5 1 0 +616 1 1 0 54.4287 53.4285 41.7155 0.442867 0.342848 -0.828447 0.490491 45 57.5 1 0 +617 1 1 0 54.4446 52.7469 41.4736 0.444464 0.274694 -0.85264 0.490491 45 57.5 1 0 +618 1 1 0 55 53.0902 41.9098 0.5 0.309017 -0.809017 0.490491 45 57.5 1 0 +619 1 1 0 51.3257 52.8993 40.5218 0.13257 0.289929 -0.947822 0.490491 45 57.5 1 0 +620 1 1 0 51.9909 52.6155 40.5557 0.199094 0.26155 -0.944433 0.490491 45 57.5 1 0 +621 1 1 0 51.9839 53.3061 40.7732 0.198387 0.330606 -0.922682 0.490491 45 57.5 1 0 +622 1 1 0 50 49.3086 40.0239 0 -0.0691418 -0.997607 0.490491 45 57.5 1 0 +623 1 1 0 50.6674 49.5875 40.0308 0.0667412 -0.0412479 -0.996917 0.490491 45 57.5 1 0 +624 1 1 0 50 48.6205 40.0956 0 -0.137952 -0.990439 0.490491 45 57.5 1 0 +625 1 1 0 50.6671 48.8961 40.0835 0.0667095 -0.110385 -0.991648 0.490491 45 57.5 1 0 +626 1 1 0 51.3307 49.1776 40.1231 0.133071 -0.0822422 -0.987688 0.490491 45 57.5 1 0 +627 1 1 0 50 47.939 40.2147 0 -0.206103 -0.97853 0.490491 45 57.5 1 0 +628 1 1 0 50.666 48.204 40.1852 0.0666046 -0.179596 -0.981483 0.490491 45 57.5 1 0 +629 1 1 0 50 47.2673 40.3806 0 -0.273267 -0.961938 0.490491 45 57.5 1 0 +630 1 1 0 50.6657 47.5267 40.3336 0.0665668 -0.247326 -0.966643 0.490491 45 57.5 1 0 +631 1 1 0 51.3279 47.7988 40.3361 0.132792 -0.220117 -0.966393 0.490491 45 57.5 1 0 +632 1 1 0 51.3326 48.4845 40.2057 0.133256 -0.151549 -0.979426 0.490491 45 57.5 1 0 +633 1 1 0 51.9858 48.7727 40.2763 0.198581 -0.122729 -0.97237 0.490491 45 57.5 1 0 +634 1 1 0 51.9834 48.0822 40.3881 0.198337 -0.19178 -0.961188 0.490491 45 57.5 1 0 +635 1 1 0 52.6287 48.3754 40.4894 0.262865 -0.16246 -0.951057 0.490491 45 57.5 1 0 +636 1 1 0 50 46.6088 40.5926 0 -0.339122 -0.940742 0.490491 45 57.5 1 0 +637 1 1 0 50.6604 46.8322 40.538 0.0660427 -0.316778 -0.946198 0.490491 45 57.5 1 0 +638 1 1 0 50 45.9664 40.8496 0 -0.403355 -0.915043 0.490491 45 57.5 1 0 +639 1 1 0 50.6599 46.1828 40.7808 0.0659885 -0.381722 -0.921919 0.490491 45 57.5 1 0 +640 1 1 0 51.3166 46.4177 40.757 0.131656 -0.358229 -0.924305 0.490491 45 57.5 1 0 +641 1 1 0 50 45.3434 41.1503 0 -0.465657 -0.884965 0.490491 45 57.5 1 0 +642 1 1 0 50.6582 45.5463 41.0707 0.0658169 -0.445365 -0.892927 0.490491 45 57.5 1 0 +643 1 1 0 50 44.7427 41.4935 0 -0.525731 -0.850651 0.490491 45 57.5 1 0 +644 1 1 0 50.6576 44.937 41.4015 0.0657577 -0.506298 -0.859848 0.490491 45 57.5 1 0 +645 1 1 0 51.312 45.1556 41.3507 0.1312 -0.484441 -0.864929 0.490491 45 57.5 1 0 +646 1 1 0 51.3175 45.7764 41.032 0.131749 -0.422363 -0.896801 0.490491 45 57.5 1 0 +647 1 1 0 51.9641 46.0265 41.036 0.196412 -0.39735 -0.896401 0.490491 45 57.5 1 0 +648 1 1 0 51.9602 45.3973 41.3413 0.196015 -0.460266 -0.865871 0.490491 45 57.5 1 0 +649 1 1 0 52.5989 45.6611 41.3733 0.259892 -0.433888 -0.862669 0.490491 45 57.5 1 0 +650 1 1 0 52.6415 47.6755 40.6395 0.264151 -0.232455 -0.93605 0.490491 45 57.5 1 0 +651 1 1 0 53.2553 47.9881 40.7612 0.32553 -0.201189 -0.92388 0.490491 45 57.5 1 0 +652 1 1 0 52.6408 46.9874 40.8376 0.264082 -0.301258 -0.916244 0.490491 45 57.5 1 0 +653 1 1 0 53.2593 47.2937 40.9417 0.325929 -0.270627 -0.905832 0.490491 45 57.5 1 0 +654 1 1 0 53.8619 47.6132 41.0899 0.386187 -0.238677 -0.891007 0.490491 45 57.5 1 0 +655 1 1 0 52.6266 46.3148 41.0826 0.262661 -0.368518 -0.891742 0.490491 45 57.5 1 0 +656 1 1 0 53.2486 46.6079 41.1716 0.324863 -0.339209 -0.882837 0.490491 45 57.5 1 0 +657 1 1 0 53.2252 45.9457 41.4466 0.322525 -0.405434 -0.855337 0.490491 45 57.5 1 0 +658 1 1 0 53.8361 46.2496 41.5609 0.383614 -0.375038 -0.843912 0.490491 45 57.5 1 0 +659 1 1 0 53.8591 46.9234 41.3027 0.385906 -0.307659 -0.869725 0.490491 45 57.5 1 0 +660 1 1 0 54.4446 47.2531 41.4736 0.444464 -0.274694 -0.85264 0.490491 45 57.5 1 0 +661 1 1 0 54.4287 46.5715 41.7155 0.442867 -0.342848 -0.828447 0.490491 45 57.5 1 0 +662 1 1 0 55 46.9098 41.9098 0.5 -0.309017 -0.809017 0.490491 45 57.5 1 0 +663 1 1 0 51.3257 47.1007 40.5218 0.13257 -0.289929 -0.947822 0.490491 45 57.5 1 0 +664 1 1 0 51.9839 46.6939 40.7732 0.198387 -0.330606 -0.922682 0.490491 45 57.5 1 0 +665 1 1 0 51.9909 47.3845 40.5557 0.199094 -0.26155 -0.944433 0.490491 45 57.5 1 0 +666 1 1 0 55.112 52.3345 41.7285 0.511205 0.233445 -0.827147 0.490491 45 57.5 1 0 +667 1 1 0 55.5474 52.7371 42.1428 0.55474 0.273706 -0.785715 0.490491 45 57.5 1 0 +668 1 1 0 55.1926 51.5643 41.5982 0.519259 0.156434 -0.840178 0.490491 45 57.5 1 0 +669 1 1 0 55.6451 51.9727 41.985 0.564513 0.197274 -0.801504 0.490491 45 57.5 1 0 +670 1 1 0 56.0683 52.3709 42.4135 0.606825 0.237086 -0.758652 0.490491 45 57.5 1 0 +671 1 1 0 55.2411 50.7846 41.5197 0.52411 0.0784592 -0.848029 0.490491 45 57.5 1 0 +672 1 1 0 55.7114 51.1908 41.8783 0.57114 0.119078 -0.81217 0.490491 45 57.5 1 0 +673 1 1 0 55.2573 50 41.4935 0.525731 0 -0.850651 0.490491 45 57.5 1 0 +674 1 1 0 55.7446 50.4067 41.8248 0.574458 0.040675 -0.817523 0.490491 45 57.5 1 0 +675 1 1 0 56.2024 50.8114 42.198 0.620239 0.0811417 -0.780205 0.490491 45 57.5 1 0 +676 1 1 0 56.1546 51.5961 42.2816 0.615456 0.159613 -0.771841 0.490491 45 57.5 1 0 +677 1 1 0 56.5601 51.9933 42.7204 0.656006 0.199331 -0.727959 0.490491 45 57.5 1 0 +678 1 1 0 56.6284 51.2119 42.6111 0.662842 0.121192 -0.738887 0.490491 45 57.5 1 0 +679 1 1 0 57.0205 51.6062 43.0622 0.702047 0.160622 -0.69378 0.490491 45 57.5 1 0 +680 1 1 0 55.2411 49.2154 41.5197 0.52411 -0.0784592 -0.848029 0.490491 45 57.5 1 0 +681 1 1 0 55.7446 49.5933 41.8248 0.574458 -0.040675 -0.817523 0.490491 45 57.5 1 0 +682 1 1 0 55.1926 48.4357 41.5982 0.519259 -0.156434 -0.840178 0.490491 45 57.5 1 0 +683 1 1 0 55.7114 48.8092 41.8783 0.57114 -0.119078 -0.81217 0.490491 45 57.5 1 0 +684 1 1 0 56.2024 49.1886 42.198 0.620239 -0.0811417 -0.780205 0.490491 45 57.5 1 0 +685 1 1 0 55.112 47.6655 41.7285 0.511205 -0.233445 -0.827147 0.490491 45 57.5 1 0 +686 1 1 0 55.6451 48.0273 41.985 0.564513 -0.197274 -0.801504 0.490491 45 57.5 1 0 +687 1 1 0 55.5474 47.2629 42.1428 0.55474 -0.273706 -0.785715 0.490491 45 57.5 1 0 +688 1 1 0 56.0683 47.6291 42.4135 0.606825 -0.237086 -0.758652 0.490491 45 57.5 1 0 +689 1 1 0 56.1546 48.4039 42.2816 0.615456 -0.159613 -0.771841 0.490491 45 57.5 1 0 +690 1 1 0 56.6284 48.7881 42.6111 0.662842 -0.121192 -0.738887 0.490491 45 57.5 1 0 +691 1 1 0 56.5601 48.0067 42.7204 0.656006 -0.199331 -0.727959 0.490491 45 57.5 1 0 +692 1 1 0 57.0205 48.3938 43.0622 0.702047 -0.160622 -0.69378 0.490491 45 57.5 1 0 +693 1 1 0 57.0897 50.8057 42.9938 0.708969 0.0805729 -0.700622 0.490491 45 57.5 1 0 +694 1 1 0 57.4473 51.2114 43.4372 0.744727 0.121144 -0.656282 0.490491 45 57.5 1 0 +695 1 1 0 57.1128 50 42.9709 0.711282 0 -0.702907 0.490491 45 57.5 1 0 +696 1 1 0 57.4939 50.4064 43.3912 0.749387 0.0406418 -0.660883 0.490491 45 57.5 1 0 +697 1 1 0 57.8384 50.8109 43.8436 0.783843 0.081086 -0.615642 0.490491 45 57.5 1 0 +698 1 1 0 57.0897 49.1943 42.9938 0.708969 -0.0805729 -0.700622 0.490491 45 57.5 1 0 +699 1 1 0 57.4939 49.5936 43.3912 0.749387 -0.0406418 -0.660883 0.490491 45 57.5 1 0 +700 1 1 0 57.4473 48.7886 43.4372 0.744727 -0.121144 -0.656282 0.490491 45 57.5 1 0 +701 1 1 0 57.8384 49.1891 43.8436 0.783843 -0.081086 -0.615642 0.490491 45 57.5 1 0 +702 1 1 0 57.8643 50 43.8232 0.786433 0 -0.617676 0.490491 45 57.5 1 0 +703 1 1 0 58.1921 50.4064 44.2794 0.819207 0.0406403 -0.572055 0.490491 45 57.5 1 0 +704 1 1 0 58.1921 49.5936 44.2794 0.819207 -0.0406403 -0.572055 0.490491 45 57.5 1 0 +705 1 1 0 58.5065 50 44.7427 0.850651 0 -0.525731 0.490491 45 57.5 1 0 +706 1 1 0 56.2229 50 42.1721 0.622291 0 -0.782786 0.490491 45 57.5 1 0 +707 1 1 0 56.675 49.5932 42.565 0.667502 -0.0406769 -0.743496 0.490491 45 57.5 1 0 +708 1 1 0 56.675 50.4068 42.565 0.667502 0.0406769 -0.743496 0.490491 45 57.5 1 0 +709 1 1 0 51.3352 50 40.0895 0.133524 0 -0.991046 0.490491 45 57.5 1 0 +710 1 1 0 52.0037 49.5875 40.2115 0.200368 -0.0412506 -0.978852 0.490491 45 57.5 1 0 +711 1 1 0 52.6552 49.185 40.3935 0.265519 -0.081501 -0.960655 0.490491 45 57.5 1 0 +712 1 1 0 52.664 50 40.3614 0.266405 0 -0.963861 0.490491 45 57.5 1 0 +713 1 1 0 52.0037 50.4125 40.2115 0.200368 0.0412506 -0.978852 0.490491 45 57.5 1 0 +714 1 1 0 52.6552 50.815 40.3935 0.265519 0.081501 -0.960655 0.490491 45 57.5 1 0 +715 1 1 0 53.3234 48.772 40.6487 0.332342 -0.1228 -0.93513 0.490491 45 57.5 1 0 +716 1 1 0 53.9414 48.3899 40.9516 0.394136 -0.161007 -0.904839 0.490491 45 57.5 1 0 +717 1 1 0 53.9961 49.1768 40.8702 0.399607 -0.0823235 -0.912983 0.490491 45 57.5 1 0 +718 1 1 0 54.5426 48.0177 41.3147 0.454262 -0.198227 -0.868535 0.490491 45 57.5 1 0 +719 1 1 0 54.6088 48.8024 41.2066 0.460882 -0.119755 -0.879344 0.490491 45 57.5 1 0 +720 1 1 0 54.6421 49.587 41.1524 0.464213 -0.0412991 -0.88476 0.490491 45 57.5 1 0 +721 1 1 0 53.3234 51.228 40.6487 0.332342 0.1228 -0.93513 0.490491 45 57.5 1 0 +722 1 1 0 53.9961 50.8232 40.8702 0.399607 0.0823235 -0.912983 0.490491 45 57.5 1 0 +723 1 1 0 53.9414 51.6101 40.9516 0.394136 0.161007 -0.904839 0.490491 45 57.5 1 0 +724 1 1 0 54.6421 50.413 41.1524 0.464213 0.0412991 -0.88476 0.490491 45 57.5 1 0 +725 1 1 0 54.6088 51.1976 41.2066 0.460882 0.119755 -0.879344 0.490491 45 57.5 1 0 +726 1 1 0 54.5426 51.9823 41.3147 0.454262 0.198227 -0.868535 0.490491 45 57.5 1 0 +727 1 1 0 53.3414 49.587 40.5838 0.33414 -0.0413021 -0.941618 0.490491 45 57.5 1 0 +728 1 1 0 54.0097 50 40.8391 0.400968 0 -0.916092 0.490491 45 57.5 1 0 +729 1 1 0 53.3414 50.413 40.5838 0.33414 0.0413021 -0.941618 0.490491 45 57.5 1 0 +730 1 1 0 49.3424 55.063 41.4015 -0.0657577 0.506298 -0.859848 0.490491 45 57.5 1 0 +731 1 1 0 48.688 54.8444 41.3507 -0.1312 0.484441 -0.864929 0.490491 45 57.5 1 0 +732 1 1 0 49.3418 54.4537 41.0707 -0.0658169 0.445365 -0.892927 0.490491 45 57.5 1 0 +733 1 1 0 48.0398 54.6027 41.3413 -0.196015 0.460266 -0.865871 0.490491 45 57.5 1 0 +734 1 1 0 48.6825 54.2236 41.032 -0.131749 0.422363 -0.896801 0.490491 45 57.5 1 0 +735 1 1 0 47.4011 54.3389 41.3733 -0.259892 0.433888 -0.862669 0.490491 45 57.5 1 0 +736 1 1 0 48.0359 53.9735 41.036 -0.196412 0.39735 -0.896401 0.490491 45 57.5 1 0 +737 1 1 0 48.6834 53.5823 40.757 -0.131656 0.358229 -0.924305 0.490491 45 57.5 1 0 +738 1 1 0 49.3401 53.8172 40.7808 -0.0659885 0.381722 -0.921919 0.490491 45 57.5 1 0 +739 1 1 0 49.3396 53.1678 40.538 -0.0660427 0.316778 -0.946198 0.490491 45 57.5 1 0 +740 1 1 0 46.7748 54.0543 41.4466 -0.322525 0.405434 -0.855337 0.490491 45 57.5 1 0 +741 1 1 0 47.3734 53.6852 41.0826 -0.262661 0.368518 -0.891742 0.490491 45 57.5 1 0 +742 1 1 0 46.1639 53.7504 41.5609 -0.383614 0.375038 -0.843912 0.490491 45 57.5 1 0 +743 1 1 0 46.7514 53.3921 41.1716 -0.324863 0.339209 -0.882837 0.490491 45 57.5 1 0 +744 1 1 0 47.3592 53.0126 40.8376 -0.264082 0.301258 -0.916244 0.490491 45 57.5 1 0 +745 1 1 0 45.5713 53.4285 41.7155 -0.442867 0.342848 -0.828447 0.490491 45 57.5 1 0 +746 1 1 0 46.1409 53.0766 41.3027 -0.385906 0.307659 -0.869725 0.490491 45 57.5 1 0 +747 1 1 0 45 53.0902 41.9098 -0.5 0.309017 -0.809017 0.490491 45 57.5 1 0 +748 1 1 0 45.5554 52.7469 41.4736 -0.444464 0.274694 -0.85264 0.490491 45 57.5 1 0 +749 1 1 0 46.1381 52.3868 41.0899 -0.386187 0.238677 -0.891007 0.490491 45 57.5 1 0 +750 1 1 0 46.7407 52.7063 40.9417 -0.325929 0.270627 -0.905832 0.490491 45 57.5 1 0 +751 1 1 0 47.3585 52.3245 40.6395 -0.264151 0.232455 -0.93605 0.490491 45 57.5 1 0 +752 1 1 0 46.7447 52.0119 40.7612 -0.32553 0.201189 -0.92388 0.490491 45 57.5 1 0 +753 1 1 0 47.3713 51.6246 40.4894 -0.262865 0.16246 -0.951057 0.490491 45 57.5 1 0 +754 1 1 0 49.3343 52.4733 40.3336 -0.0665668 0.247326 -0.966643 0.490491 45 57.5 1 0 +755 1 1 0 48.6721 52.2012 40.3361 -0.132792 0.220117 -0.966393 0.490491 45 57.5 1 0 +756 1 1 0 49.334 51.796 40.1852 -0.0666046 0.179596 -0.981483 0.490491 45 57.5 1 0 +757 1 1 0 48.0166 51.9178 40.3881 -0.198337 0.19178 -0.961188 0.490491 45 57.5 1 0 +758 1 1 0 48.6674 51.5155 40.2057 -0.133256 0.151549 -0.979426 0.490491 45 57.5 1 0 +759 1 1 0 48.0142 51.2273 40.2763 -0.198581 0.122729 -0.97237 0.490491 45 57.5 1 0 +760 1 1 0 48.6693 50.8224 40.1231 -0.133071 0.0822422 -0.987688 0.490491 45 57.5 1 0 +761 1 1 0 49.3329 51.1039 40.0835 -0.0667095 0.110385 -0.991648 0.490491 45 57.5 1 0 +762 1 1 0 49.3326 50.4125 40.0308 -0.0667412 0.0412479 -0.996917 0.490491 45 57.5 1 0 +763 1 1 0 48.0161 53.3061 40.7732 -0.198387 0.330606 -0.922682 0.490491 45 57.5 1 0 +764 1 1 0 48.0091 52.6155 40.5557 -0.199094 0.26155 -0.944433 0.490491 45 57.5 1 0 +765 1 1 0 48.6743 52.8993 40.5218 -0.13257 0.289929 -0.947822 0.490491 45 57.5 1 0 +766 1 1 0 44.4526 52.7371 42.1428 -0.55474 0.273706 -0.785715 0.490491 45 57.5 1 0 +767 1 1 0 44.888 52.3345 41.7285 -0.511205 0.233445 -0.827147 0.490491 45 57.5 1 0 +768 1 1 0 43.9317 52.3709 42.4135 -0.606825 0.237086 -0.758652 0.490491 45 57.5 1 0 +769 1 1 0 44.3549 51.9727 41.985 -0.564513 0.197274 -0.801504 0.490491 45 57.5 1 0 +770 1 1 0 44.8074 51.5643 41.5982 -0.519259 0.156434 -0.840178 0.490491 45 57.5 1 0 +771 1 1 0 43.4399 51.9933 42.7204 -0.656006 0.199331 -0.727959 0.490491 45 57.5 1 0 +772 1 1 0 43.8454 51.5961 42.2816 -0.615456 0.159613 -0.771841 0.490491 45 57.5 1 0 +773 1 1 0 42.9795 51.6062 43.0622 -0.702047 0.160622 -0.69378 0.490491 45 57.5 1 0 +774 1 1 0 43.3716 51.2119 42.6111 -0.662842 0.121192 -0.738887 0.490491 45 57.5 1 0 +775 1 1 0 43.7976 50.8114 42.198 -0.620239 0.0811417 -0.780205 0.490491 45 57.5 1 0 +776 1 1 0 44.2886 51.1908 41.8783 -0.57114 0.119078 -0.81217 0.490491 45 57.5 1 0 +777 1 1 0 44.7589 50.7846 41.5197 -0.52411 0.0784592 -0.848029 0.490491 45 57.5 1 0 +778 1 1 0 44.2554 50.4067 41.8248 -0.574458 0.040675 -0.817523 0.490491 45 57.5 1 0 +779 1 1 0 44.7427 50 41.4935 -0.525731 0 -0.850651 0.490491 45 57.5 1 0 +780 1 1 0 42.5527 51.2114 43.4372 -0.744727 0.121144 -0.656282 0.490491 45 57.5 1 0 +781 1 1 0 42.9103 50.8057 42.9938 -0.708969 0.0805729 -0.700622 0.490491 45 57.5 1 0 +782 1 1 0 42.1616 50.8109 43.8436 -0.783843 0.081086 -0.615642 0.490491 45 57.5 1 0 +783 1 1 0 42.5061 50.4064 43.3912 -0.749387 0.0406418 -0.660883 0.490491 45 57.5 1 0 +784 1 1 0 42.8872 50 42.9709 -0.711282 0 -0.702907 0.490491 45 57.5 1 0 +785 1 1 0 41.8079 50.4064 44.2794 -0.819207 0.0406403 -0.572055 0.490491 45 57.5 1 0 +786 1 1 0 42.1357 50 43.8232 -0.786433 0 -0.617676 0.490491 45 57.5 1 0 +787 1 1 0 41.4935 50 44.7427 -0.850651 0 -0.525731 0.490491 45 57.5 1 0 +788 1 1 0 41.8079 49.5936 44.2794 -0.819207 -0.0406403 -0.572055 0.490491 45 57.5 1 0 +789 1 1 0 42.1616 49.1891 43.8436 -0.783843 -0.081086 -0.615642 0.490491 45 57.5 1 0 +790 1 1 0 42.5061 49.5936 43.3912 -0.749387 -0.0406418 -0.660883 0.490491 45 57.5 1 0 +791 1 1 0 42.9103 49.1943 42.9938 -0.708969 -0.0805729 -0.700622 0.490491 45 57.5 1 0 +792 1 1 0 42.5527 48.7886 43.4372 -0.744727 -0.121144 -0.656282 0.490491 45 57.5 1 0 +793 1 1 0 42.9795 48.3938 43.0622 -0.702047 -0.160622 -0.69378 0.490491 45 57.5 1 0 +794 1 1 0 44.2554 49.5933 41.8248 -0.574458 -0.040675 -0.817523 0.490491 45 57.5 1 0 +795 1 1 0 44.7589 49.2154 41.5197 -0.52411 -0.0784592 -0.848029 0.490491 45 57.5 1 0 +796 1 1 0 43.7976 49.1886 42.198 -0.620239 -0.0811417 -0.780205 0.490491 45 57.5 1 0 +797 1 1 0 44.2886 48.8092 41.8783 -0.57114 -0.119078 -0.81217 0.490491 45 57.5 1 0 +798 1 1 0 44.8074 48.4357 41.5982 -0.519259 -0.156434 -0.840178 0.490491 45 57.5 1 0 +799 1 1 0 43.3716 48.7881 42.6111 -0.662842 -0.121192 -0.738887 0.490491 45 57.5 1 0 +800 1 1 0 43.8454 48.4039 42.2816 -0.615456 -0.159613 -0.771841 0.490491 45 57.5 1 0 +801 1 1 0 43.4399 48.0067 42.7204 -0.656006 -0.199331 -0.727959 0.490491 45 57.5 1 0 +802 1 1 0 43.9317 47.6291 42.4135 -0.606825 -0.237086 -0.758652 0.490491 45 57.5 1 0 +803 1 1 0 44.3549 48.0273 41.985 -0.564513 -0.197274 -0.801504 0.490491 45 57.5 1 0 +804 1 1 0 44.888 47.6655 41.7285 -0.511205 -0.233445 -0.827147 0.490491 45 57.5 1 0 +805 1 1 0 44.4526 47.2629 42.1428 -0.55474 -0.273706 -0.785715 0.490491 45 57.5 1 0 +806 1 1 0 45 46.9098 41.9098 -0.5 -0.309017 -0.809017 0.490491 45 57.5 1 0 +807 1 1 0 43.325 50.4068 42.565 -0.667502 0.0406769 -0.743496 0.490491 45 57.5 1 0 +808 1 1 0 43.325 49.5932 42.565 -0.667502 -0.0406769 -0.743496 0.490491 45 57.5 1 0 +809 1 1 0 43.7771 50 42.1721 -0.622291 0 -0.782786 0.490491 45 57.5 1 0 +810 1 1 0 49.3326 49.5875 40.0308 -0.0667412 -0.0412479 -0.996917 0.490491 45 57.5 1 0 +811 1 1 0 48.6693 49.1776 40.1231 -0.133071 -0.0822422 -0.987688 0.490491 45 57.5 1 0 +812 1 1 0 49.3329 48.8961 40.0835 -0.0667095 -0.110385 -0.991648 0.490491 45 57.5 1 0 +813 1 1 0 48.0142 48.7727 40.2763 -0.198581 -0.122729 -0.97237 0.490491 45 57.5 1 0 +814 1 1 0 48.6674 48.4845 40.2057 -0.133256 -0.151549 -0.979426 0.490491 45 57.5 1 0 +815 1 1 0 47.3713 48.3754 40.4894 -0.262865 -0.16246 -0.951057 0.490491 45 57.5 1 0 +816 1 1 0 48.0166 48.0822 40.3881 -0.198337 -0.19178 -0.961188 0.490491 45 57.5 1 0 +817 1 1 0 48.6721 47.7988 40.3361 -0.132792 -0.220117 -0.966393 0.490491 45 57.5 1 0 +818 1 1 0 49.334 48.204 40.1852 -0.0666046 -0.179596 -0.981483 0.490491 45 57.5 1 0 +819 1 1 0 49.3343 47.5267 40.3336 -0.0665668 -0.247326 -0.966643 0.490491 45 57.5 1 0 +820 1 1 0 46.7447 47.9881 40.7612 -0.32553 -0.201189 -0.92388 0.490491 45 57.5 1 0 +821 1 1 0 47.3585 47.6755 40.6395 -0.264151 -0.232455 -0.93605 0.490491 45 57.5 1 0 +822 1 1 0 46.1381 47.6132 41.0899 -0.386187 -0.238677 -0.891007 0.490491 45 57.5 1 0 +823 1 1 0 46.7407 47.2937 40.9417 -0.325929 -0.270627 -0.905832 0.490491 45 57.5 1 0 +824 1 1 0 47.3592 46.9874 40.8376 -0.264082 -0.301258 -0.916244 0.490491 45 57.5 1 0 +825 1 1 0 45.5554 47.2531 41.4736 -0.444464 -0.274694 -0.85264 0.490491 45 57.5 1 0 +826 1 1 0 46.1409 46.9234 41.3027 -0.385906 -0.307659 -0.869725 0.490491 45 57.5 1 0 +827 1 1 0 45.5713 46.5715 41.7155 -0.442867 -0.342848 -0.828447 0.490491 45 57.5 1 0 +828 1 1 0 46.1639 46.2496 41.5609 -0.383614 -0.375038 -0.843912 0.490491 45 57.5 1 0 +829 1 1 0 46.7514 46.6079 41.1716 -0.324863 -0.339209 -0.882837 0.490491 45 57.5 1 0 +830 1 1 0 47.3734 46.3148 41.0826 -0.262661 -0.368518 -0.891742 0.490491 45 57.5 1 0 +831 1 1 0 46.7748 45.9457 41.4466 -0.322525 -0.405434 -0.855337 0.490491 45 57.5 1 0 +832 1 1 0 47.4011 45.6611 41.3733 -0.259892 -0.433888 -0.862669 0.490491 45 57.5 1 0 +833 1 1 0 49.3396 46.8322 40.538 -0.0660427 -0.316778 -0.946198 0.490491 45 57.5 1 0 +834 1 1 0 48.6834 46.4177 40.757 -0.131656 -0.358229 -0.924305 0.490491 45 57.5 1 0 +835 1 1 0 49.3401 46.1828 40.7808 -0.0659885 -0.381722 -0.921919 0.490491 45 57.5 1 0 +836 1 1 0 48.0359 46.0265 41.036 -0.196412 -0.39735 -0.896401 0.490491 45 57.5 1 0 +837 1 1 0 48.6825 45.7764 41.032 -0.131749 -0.422363 -0.896801 0.490491 45 57.5 1 0 +838 1 1 0 48.0398 45.3973 41.3413 -0.196015 -0.460266 -0.865871 0.490491 45 57.5 1 0 +839 1 1 0 48.688 45.1556 41.3507 -0.1312 -0.484441 -0.864929 0.490491 45 57.5 1 0 +840 1 1 0 49.3418 45.5463 41.0707 -0.0658169 -0.445365 -0.892927 0.490491 45 57.5 1 0 +841 1 1 0 49.3424 44.937 41.4015 -0.0657577 -0.506298 -0.859848 0.490491 45 57.5 1 0 +842 1 1 0 48.0091 47.3845 40.5557 -0.199094 -0.26155 -0.944433 0.490491 45 57.5 1 0 +843 1 1 0 48.0161 46.6939 40.7732 -0.198387 -0.330606 -0.922682 0.490491 45 57.5 1 0 +844 1 1 0 48.6743 47.1007 40.5218 -0.13257 -0.289929 -0.947822 0.490491 45 57.5 1 0 +845 1 1 0 45.4574 51.9823 41.3147 -0.454262 0.198227 -0.868535 0.490491 45 57.5 1 0 +846 1 1 0 45.3912 51.1976 41.2066 -0.460882 0.119755 -0.879344 0.490491 45 57.5 1 0 +847 1 1 0 45.3579 50.413 41.1524 -0.464213 0.0412991 -0.88476 0.490491 45 57.5 1 0 +848 1 1 0 46.0039 50.8232 40.8702 -0.399607 0.0823235 -0.912983 0.490491 45 57.5 1 0 +849 1 1 0 46.0586 51.6101 40.9516 -0.394136 0.161007 -0.904839 0.490491 45 57.5 1 0 +850 1 1 0 46.6766 51.228 40.6487 -0.332342 0.1228 -0.93513 0.490491 45 57.5 1 0 +851 1 1 0 45.3579 49.587 41.1524 -0.464213 -0.0412991 -0.88476 0.490491 45 57.5 1 0 +852 1 1 0 45.3912 48.8024 41.2066 -0.460882 -0.119755 -0.879344 0.490491 45 57.5 1 0 +853 1 1 0 46.0039 49.1768 40.8702 -0.399607 -0.0823235 -0.912983 0.490491 45 57.5 1 0 +854 1 1 0 45.4574 48.0177 41.3147 -0.454262 -0.198227 -0.868535 0.490491 45 57.5 1 0 +855 1 1 0 46.0586 48.3899 40.9516 -0.394136 -0.161007 -0.904839 0.490491 45 57.5 1 0 +856 1 1 0 46.6766 48.772 40.6487 -0.332342 -0.1228 -0.93513 0.490491 45 57.5 1 0 +857 1 1 0 47.3448 50.815 40.3935 -0.265519 0.081501 -0.960655 0.490491 45 57.5 1 0 +858 1 1 0 47.336 50 40.3614 -0.266405 0 -0.963861 0.490491 45 57.5 1 0 +859 1 1 0 47.9963 50.4125 40.2115 -0.200368 0.0412506 -0.978852 0.490491 45 57.5 1 0 +860 1 1 0 47.3448 49.185 40.3935 -0.265519 -0.081501 -0.960655 0.490491 45 57.5 1 0 +861 1 1 0 47.9963 49.5875 40.2115 -0.200368 -0.0412506 -0.978852 0.490491 45 57.5 1 0 +862 1 1 0 48.6648 50 40.0895 -0.133524 0 -0.991046 0.490491 45 57.5 1 0 +863 1 1 0 45.9903 50 40.8391 -0.400968 0 -0.916092 0.490491 45 57.5 1 0 +864 1 1 0 46.6586 49.587 40.5838 -0.33414 -0.0413021 -0.941618 0.490491 45 57.5 1 0 +865 1 1 0 46.6586 50.413 40.5838 -0.33414 0.0413021 -0.941618 0.490491 45 57.5 1 0 +866 1 1 0 50.4064 44.2794 58.1921 0.0406403 -0.572055 0.819208 0.490491 45 57.5 1 0 +867 1 1 0 49.5936 44.2794 58.1921 -0.0406403 -0.572055 0.819208 0.490491 45 57.5 1 0 +868 1 1 0 50.8109 43.8436 57.8384 0.081086 -0.615642 0.783843 0.490491 45 57.5 1 0 +869 1 1 0 50 43.8232 57.8643 0 -0.617676 0.786433 0.490491 45 57.5 1 0 +870 1 1 0 49.1891 43.8436 57.8384 -0.081086 -0.615642 0.783843 0.490491 45 57.5 1 0 +871 1 1 0 51.2114 43.4372 57.4473 0.121144 -0.656282 0.744727 0.490491 45 57.5 1 0 +872 1 1 0 50.4064 43.3912 57.4939 0.0406418 -0.660883 0.749387 0.490491 45 57.5 1 0 +873 1 1 0 51.6062 43.0622 57.0205 0.160622 -0.69378 0.702047 0.490491 45 57.5 1 0 +874 1 1 0 50.8057 42.9938 57.0897 0.0805729 -0.700622 0.708969 0.490491 45 57.5 1 0 +875 1 1 0 50 42.9709 57.1128 0 -0.702907 0.711282 0.490491 45 57.5 1 0 +876 1 1 0 49.5936 43.3912 57.4939 -0.0406418 -0.660883 0.749387 0.490491 45 57.5 1 0 +877 1 1 0 48.7886 43.4372 57.4473 -0.121144 -0.656282 0.744727 0.490491 45 57.5 1 0 +878 1 1 0 49.1943 42.9938 57.0897 -0.0805729 -0.700622 0.708969 0.490491 45 57.5 1 0 +879 1 1 0 48.3938 43.0622 57.0205 -0.160622 -0.69378 0.702047 0.490491 45 57.5 1 0 +880 1 1 0 51.9933 42.7204 56.5601 0.199331 -0.727959 0.656006 0.490491 45 57.5 1 0 +881 1 1 0 51.2119 42.6111 56.6284 0.121192 -0.738887 0.662842 0.490491 45 57.5 1 0 +882 1 1 0 52.3709 42.4135 56.0683 0.237086 -0.758652 0.606825 0.490491 45 57.5 1 0 +883 1 1 0 51.5961 42.2816 56.1546 0.159613 -0.771841 0.615456 0.490491 45 57.5 1 0 +884 1 1 0 50.8114 42.198 56.2024 0.0811417 -0.780205 0.620239 0.490491 45 57.5 1 0 +885 1 1 0 52.7371 42.1428 55.5474 0.273706 -0.785715 0.55474 0.490491 45 57.5 1 0 +886 1 1 0 51.9727 41.985 55.6451 0.197274 -0.801504 0.564513 0.490491 45 57.5 1 0 +887 1 1 0 53.0902 41.9098 55 0.309017 -0.809017 0.5 0.490491 45 57.5 1 0 +888 1 1 0 52.3345 41.7285 55.112 0.233445 -0.827147 0.511205 0.490491 45 57.5 1 0 +889 1 1 0 51.5643 41.5982 55.1926 0.156434 -0.840178 0.519259 0.490491 45 57.5 1 0 +890 1 1 0 51.1908 41.8783 55.7114 0.119078 -0.81217 0.57114 0.490491 45 57.5 1 0 +891 1 1 0 50.4067 41.8248 55.7446 0.040675 -0.817523 0.574458 0.490491 45 57.5 1 0 +892 1 1 0 50.7846 41.5197 55.2411 0.0784592 -0.848029 0.52411 0.490491 45 57.5 1 0 +893 1 1 0 50 41.4935 55.2573 0 -0.850651 0.525731 0.490491 45 57.5 1 0 +894 1 1 0 48.7881 42.6111 56.6284 -0.121192 -0.738887 0.662842 0.490491 45 57.5 1 0 +895 1 1 0 48.0067 42.7204 56.5601 -0.199331 -0.727959 0.656006 0.490491 45 57.5 1 0 +896 1 1 0 49.1886 42.198 56.2024 -0.0811417 -0.780205 0.620239 0.490491 45 57.5 1 0 +897 1 1 0 48.4039 42.2816 56.1546 -0.159613 -0.771841 0.615456 0.490491 45 57.5 1 0 +898 1 1 0 47.6291 42.4135 56.0683 -0.237086 -0.758652 0.606825 0.490491 45 57.5 1 0 +899 1 1 0 49.5933 41.8248 55.7446 -0.040675 -0.817523 0.574458 0.490491 45 57.5 1 0 +900 1 1 0 48.8092 41.8783 55.7114 -0.119078 -0.81217 0.57114 0.490491 45 57.5 1 0 +901 1 1 0 49.2154 41.5197 55.2411 -0.0784592 -0.848029 0.52411 0.490491 45 57.5 1 0 +902 1 1 0 48.4357 41.5982 55.1926 -0.156434 -0.840178 0.519259 0.490491 45 57.5 1 0 +903 1 1 0 48.0273 41.985 55.6451 -0.197274 -0.801504 0.564513 0.490491 45 57.5 1 0 +904 1 1 0 47.2629 42.1428 55.5474 -0.273706 -0.785715 0.55474 0.490491 45 57.5 1 0 +905 1 1 0 47.6655 41.7285 55.112 -0.233445 -0.827147 0.511205 0.490491 45 57.5 1 0 +906 1 1 0 46.9098 41.9098 55 -0.309017 -0.809017 0.5 0.490491 45 57.5 1 0 +907 1 1 0 50.4068 42.565 56.675 0.0406769 -0.743496 0.667502 0.490491 45 57.5 1 0 +908 1 1 0 50 42.1721 56.2229 0 -0.782786 0.622291 0.490491 45 57.5 1 0 +909 1 1 0 49.5932 42.565 56.675 -0.0406769 -0.743496 0.667502 0.490491 45 57.5 1 0 +910 1 1 0 53.4285 41.7155 54.4287 0.342848 -0.828447 0.442867 0.490491 45 57.5 1 0 +911 1 1 0 52.7469 41.4736 54.4446 0.274694 -0.85264 0.444464 0.490491 45 57.5 1 0 +912 1 1 0 53.7504 41.5609 53.8361 0.375038 -0.843912 0.383614 0.490491 45 57.5 1 0 +913 1 1 0 53.0766 41.3027 53.8591 0.307659 -0.869725 0.385906 0.490491 45 57.5 1 0 +914 1 1 0 52.3868 41.0899 53.8619 0.238677 -0.891007 0.386187 0.490491 45 57.5 1 0 +915 1 1 0 54.0543 41.4466 53.2252 0.405434 -0.855337 0.322525 0.490491 45 57.5 1 0 +916 1 1 0 53.3921 41.1716 53.2486 0.339209 -0.882837 0.324863 0.490491 45 57.5 1 0 +917 1 1 0 54.3389 41.3733 52.5989 0.433888 -0.862669 0.259892 0.490491 45 57.5 1 0 +918 1 1 0 53.6852 41.0826 52.6266 0.368518 -0.891742 0.262661 0.490491 45 57.5 1 0 +919 1 1 0 53.0126 40.8376 52.6408 0.301258 -0.916244 0.264082 0.490491 45 57.5 1 0 +920 1 1 0 52.7063 40.9417 53.2593 0.270627 -0.905832 0.325929 0.490491 45 57.5 1 0 +921 1 1 0 52.0119 40.7612 53.2553 0.201189 -0.92388 0.32553 0.490491 45 57.5 1 0 +922 1 1 0 52.3245 40.6395 52.6415 0.232455 -0.93605 0.264151 0.490491 45 57.5 1 0 +923 1 1 0 51.6246 40.4894 52.6287 0.16246 -0.951057 0.262865 0.490491 45 57.5 1 0 +924 1 1 0 54.6027 41.3413 51.9602 0.460266 -0.865871 0.196015 0.490491 45 57.5 1 0 +925 1 1 0 53.9735 41.036 51.9641 0.39735 -0.896401 0.196412 0.490491 45 57.5 1 0 +926 1 1 0 54.8444 41.3507 51.312 0.484441 -0.864929 0.1312 0.490491 45 57.5 1 0 +927 1 1 0 54.2236 41.032 51.3175 0.422363 -0.896801 0.131749 0.490491 45 57.5 1 0 +928 1 1 0 53.5823 40.757 51.3166 0.358229 -0.924305 0.131656 0.490491 45 57.5 1 0 +929 1 1 0 55.063 41.4015 50.6576 0.506298 -0.859848 0.0657577 0.490491 45 57.5 1 0 +930 1 1 0 54.4537 41.0707 50.6582 0.445365 -0.892927 0.0658169 0.490491 45 57.5 1 0 +931 1 1 0 55.2573 41.4935 50 0.525731 -0.850651 0 0.490491 45 57.5 1 0 +932 1 1 0 54.6566 41.1503 50 0.465657 -0.884965 0 0.490491 45 57.5 1 0 +933 1 1 0 54.0336 40.8496 50 0.403355 -0.915043 0 0.490491 45 57.5 1 0 +934 1 1 0 53.8172 40.7808 50.6599 0.381722 -0.921919 0.0659886 0.490491 45 57.5 1 0 +935 1 1 0 53.1678 40.538 50.6604 0.316778 -0.946198 0.0660427 0.490491 45 57.5 1 0 +936 1 1 0 53.3912 40.5926 50 0.339122 -0.940742 0 0.490491 45 57.5 1 0 +937 1 1 0 52.7327 40.3806 50 0.273267 -0.961938 0 0.490491 45 57.5 1 0 +938 1 1 0 51.9178 40.3881 51.9834 0.19178 -0.961188 0.198337 0.490491 45 57.5 1 0 +939 1 1 0 51.2273 40.2763 51.9858 0.122729 -0.97237 0.198581 0.490491 45 57.5 1 0 +940 1 1 0 52.2012 40.3361 51.3279 0.220117 -0.966393 0.132792 0.490491 45 57.5 1 0 +941 1 1 0 51.5155 40.2057 51.3326 0.151549 -0.979426 0.133256 0.490491 45 57.5 1 0 +942 1 1 0 50.8224 40.1231 51.3307 0.0822422 -0.987688 0.133071 0.490491 45 57.5 1 0 +943 1 1 0 52.4733 40.3336 50.6657 0.247326 -0.966643 0.0665668 0.490491 45 57.5 1 0 +944 1 1 0 51.796 40.1852 50.666 0.179596 -0.981483 0.0666046 0.490491 45 57.5 1 0 +945 1 1 0 52.061 40.2147 50 0.206103 -0.97853 0 0.490491 45 57.5 1 0 +946 1 1 0 51.3795 40.0956 50 0.137952 -0.990439 0 0.490491 45 57.5 1 0 +947 1 1 0 51.1039 40.0835 50.6671 0.110385 -0.991648 0.0667095 0.490491 45 57.5 1 0 +948 1 1 0 50.4125 40.0308 50.6674 0.0412479 -0.996917 0.0667412 0.490491 45 57.5 1 0 +949 1 1 0 50.6914 40.0239 50 0.0691418 -0.997607 0 0.490491 45 57.5 1 0 +950 1 1 0 50 40 50 0 -1 0 0.490491 45 57.5 1 0 +951 1 1 0 53.3061 40.7732 51.9839 0.330606 -0.922682 0.198387 0.490491 45 57.5 1 0 +952 1 1 0 52.8993 40.5218 51.3257 0.289929 -0.947822 0.13257 0.490491 45 57.5 1 0 +953 1 1 0 52.6155 40.5557 51.9909 0.26155 -0.944433 0.199094 0.490491 45 57.5 1 0 +954 1 1 0 47.2531 41.4736 54.4446 -0.274694 -0.85264 0.444464 0.490491 45 57.5 1 0 +955 1 1 0 46.5715 41.7155 54.4287 -0.342848 -0.828447 0.442867 0.490491 45 57.5 1 0 +956 1 1 0 47.6132 41.0899 53.8619 -0.238677 -0.891007 0.386187 0.490491 45 57.5 1 0 +957 1 1 0 46.9234 41.3027 53.8591 -0.307659 -0.869725 0.385906 0.490491 45 57.5 1 0 +958 1 1 0 46.2496 41.5609 53.8361 -0.375038 -0.843912 0.383614 0.490491 45 57.5 1 0 +959 1 1 0 47.9881 40.7612 53.2553 -0.201189 -0.92388 0.32553 0.490491 45 57.5 1 0 +960 1 1 0 47.2937 40.9417 53.2593 -0.270627 -0.905832 0.325929 0.490491 45 57.5 1 0 +961 1 1 0 48.3754 40.4894 52.6287 -0.16246 -0.951057 0.262865 0.490491 45 57.5 1 0 +962 1 1 0 47.6755 40.6395 52.6415 -0.232455 -0.93605 0.264151 0.490491 45 57.5 1 0 +963 1 1 0 46.9874 40.8376 52.6408 -0.301258 -0.916244 0.264082 0.490491 45 57.5 1 0 +964 1 1 0 46.6079 41.1716 53.2486 -0.339209 -0.882837 0.324863 0.490491 45 57.5 1 0 +965 1 1 0 45.9457 41.4466 53.2252 -0.405434 -0.855337 0.322525 0.490491 45 57.5 1 0 +966 1 1 0 46.3148 41.0826 52.6266 -0.368518 -0.891742 0.262661 0.490491 45 57.5 1 0 +967 1 1 0 45.6611 41.3733 52.5989 -0.433888 -0.862669 0.259892 0.490491 45 57.5 1 0 +968 1 1 0 48.7727 40.2763 51.9858 -0.122729 -0.97237 0.198581 0.490491 45 57.5 1 0 +969 1 1 0 48.0822 40.3881 51.9834 -0.19178 -0.961188 0.198337 0.490491 45 57.5 1 0 +970 1 1 0 49.1776 40.1231 51.3307 -0.0822422 -0.987688 0.133071 0.490491 45 57.5 1 0 +971 1 1 0 48.4845 40.2057 51.3326 -0.151549 -0.979426 0.133256 0.490491 45 57.5 1 0 +972 1 1 0 47.7988 40.3361 51.3279 -0.220117 -0.966393 0.132792 0.490491 45 57.5 1 0 +973 1 1 0 49.5875 40.0308 50.6674 -0.0412479 -0.996917 0.0667412 0.490491 45 57.5 1 0 +974 1 1 0 48.8961 40.0835 50.6671 -0.110385 -0.991648 0.0667095 0.490491 45 57.5 1 0 +975 1 1 0 49.3086 40.0239 50 -0.0691418 -0.997607 0 0.490491 45 57.5 1 0 +976 1 1 0 48.6205 40.0956 50 -0.137952 -0.990439 0 0.490491 45 57.5 1 0 +977 1 1 0 48.204 40.1852 50.666 -0.179596 -0.981483 0.0666046 0.490491 45 57.5 1 0 +978 1 1 0 47.5267 40.3336 50.6657 -0.247326 -0.966643 0.0665668 0.490491 45 57.5 1 0 +979 1 1 0 47.939 40.2147 50 -0.206103 -0.97853 0 0.490491 45 57.5 1 0 +980 1 1 0 47.2673 40.3806 50 -0.273267 -0.961938 0 0.490491 45 57.5 1 0 +981 1 1 0 46.0265 41.036 51.9641 -0.39735 -0.896401 0.196412 0.490491 45 57.5 1 0 +982 1 1 0 45.3973 41.3413 51.9602 -0.460266 -0.865871 0.196015 0.490491 45 57.5 1 0 +983 1 1 0 46.4177 40.757 51.3166 -0.358229 -0.924305 0.131656 0.490491 45 57.5 1 0 +984 1 1 0 45.7764 41.032 51.3175 -0.422363 -0.896801 0.131749 0.490491 45 57.5 1 0 +985 1 1 0 45.1556 41.3507 51.312 -0.484441 -0.864929 0.1312 0.490491 45 57.5 1 0 +986 1 1 0 46.8322 40.538 50.6604 -0.316778 -0.946198 0.0660427 0.490491 45 57.5 1 0 +987 1 1 0 46.1828 40.7808 50.6599 -0.381722 -0.921919 0.0659886 0.490491 45 57.5 1 0 +988 1 1 0 46.6088 40.5926 50 -0.339122 -0.940742 0 0.490491 45 57.5 1 0 +989 1 1 0 45.9664 40.8496 50 -0.403355 -0.915043 0 0.490491 45 57.5 1 0 +990 1 1 0 45.5463 41.0707 50.6582 -0.445365 -0.892927 0.0658169 0.490491 45 57.5 1 0 +991 1 1 0 44.937 41.4015 50.6576 -0.506298 -0.859848 0.0657577 0.490491 45 57.5 1 0 +992 1 1 0 45.3434 41.1503 50 -0.465657 -0.884965 0 0.490491 45 57.5 1 0 +993 1 1 0 44.7427 41.4935 50 -0.525731 -0.850651 0 0.490491 45 57.5 1 0 +994 1 1 0 47.3845 40.5557 51.9909 -0.26155 -0.944433 0.199094 0.490491 45 57.5 1 0 +995 1 1 0 47.1007 40.5218 51.3257 -0.289929 -0.947822 0.13257 0.490491 45 57.5 1 0 +996 1 1 0 46.6939 40.7732 51.9839 -0.330606 -0.922682 0.198387 0.490491 45 57.5 1 0 +997 1 1 0 51.9823 41.3147 54.5426 0.198227 -0.868535 0.454262 0.490491 45 57.5 1 0 +998 1 1 0 51.6101 40.9516 53.9414 0.161007 -0.904839 0.394136 0.490491 45 57.5 1 0 +999 1 1 0 51.228 40.6487 53.3234 0.1228 -0.93513 0.332342 0.490491 45 57.5 1 0 +1000 1 1 0 50.8232 40.8702 53.9961 0.0823235 -0.912983 0.399607 0.490491 45 57.5 1 0 +1001 1 1 0 51.1976 41.2066 54.6088 0.119755 -0.879344 0.460882 0.490491 45 57.5 1 0 +1002 1 1 0 50.413 41.1524 54.6421 0.0412991 -0.88476 0.464213 0.490491 45 57.5 1 0 +1003 1 1 0 50.815 40.3935 52.6552 0.081501 -0.960655 0.265519 0.490491 45 57.5 1 0 +1004 1 1 0 50.4125 40.2115 52.0037 0.0412506 -0.978852 0.200368 0.490491 45 57.5 1 0 +1005 1 1 0 50 40.3614 52.664 0 -0.963861 0.266405 0.490491 45 57.5 1 0 +1006 1 1 0 50 40.0895 51.3352 0 -0.991046 0.133524 0.490491 45 57.5 1 0 +1007 1 1 0 49.5875 40.2115 52.0037 -0.0412506 -0.978852 0.200368 0.490491 45 57.5 1 0 +1008 1 1 0 49.185 40.3935 52.6552 -0.081501 -0.960655 0.265519 0.490491 45 57.5 1 0 +1009 1 1 0 49.587 41.1524 54.6421 -0.0412991 -0.88476 0.464213 0.490491 45 57.5 1 0 +1010 1 1 0 49.1768 40.8702 53.9961 -0.0823235 -0.912983 0.399607 0.490491 45 57.5 1 0 +1011 1 1 0 48.8024 41.2066 54.6088 -0.119755 -0.879344 0.460882 0.490491 45 57.5 1 0 +1012 1 1 0 48.772 40.6487 53.3234 -0.1228 -0.93513 0.332342 0.490491 45 57.5 1 0 +1013 1 1 0 48.3899 40.9516 53.9414 -0.161007 -0.904839 0.394136 0.490491 45 57.5 1 0 +1014 1 1 0 48.0177 41.3147 54.5426 -0.198227 -0.868535 0.454262 0.490491 45 57.5 1 0 +1015 1 1 0 50.413 40.5838 53.3414 0.0413021 -0.941618 0.33414 0.490491 45 57.5 1 0 +1016 1 1 0 49.587 40.5838 53.3414 -0.0413021 -0.941618 0.33414 0.490491 45 57.5 1 0 +1017 1 1 0 50 40.8391 54.0097 0 -0.916092 0.400968 0.490491 45 57.5 1 0 +1018 1 1 0 49.5936 44.2794 41.8079 -0.0406403 -0.572055 -0.819208 0.490491 45 57.5 1 0 +1019 1 1 0 50.4064 44.2794 41.8079 0.0406403 -0.572055 -0.819208 0.490491 45 57.5 1 0 +1020 1 1 0 49.1891 43.8436 42.1616 -0.081086 -0.615642 -0.783843 0.490491 45 57.5 1 0 +1021 1 1 0 50 43.8232 42.1357 0 -0.617676 -0.786433 0.490491 45 57.5 1 0 +1022 1 1 0 50.8109 43.8436 42.1616 0.081086 -0.615642 -0.783843 0.490491 45 57.5 1 0 +1023 1 1 0 48.7886 43.4372 42.5527 -0.121144 -0.656282 -0.744727 0.490491 45 57.5 1 0 +1024 1 1 0 49.5936 43.3912 42.5061 -0.0406418 -0.660883 -0.749387 0.490491 45 57.5 1 0 +1025 1 1 0 48.3938 43.0622 42.9795 -0.160622 -0.69378 -0.702047 0.490491 45 57.5 1 0 +1026 1 1 0 49.1943 42.9938 42.9103 -0.0805729 -0.700622 -0.708969 0.490491 45 57.5 1 0 +1027 1 1 0 50 42.9709 42.8872 0 -0.702907 -0.711282 0.490491 45 57.5 1 0 +1028 1 1 0 50.4064 43.3912 42.5061 0.0406418 -0.660883 -0.749387 0.490491 45 57.5 1 0 +1029 1 1 0 51.2114 43.4372 42.5527 0.121144 -0.656282 -0.744727 0.490491 45 57.5 1 0 +1030 1 1 0 50.8057 42.9938 42.9103 0.0805729 -0.700622 -0.708969 0.490491 45 57.5 1 0 +1031 1 1 0 51.6062 43.0622 42.9795 0.160622 -0.69378 -0.702047 0.490491 45 57.5 1 0 +1032 1 1 0 48.0067 42.7204 43.4399 -0.199331 -0.727959 -0.656006 0.490491 45 57.5 1 0 +1033 1 1 0 48.7881 42.6111 43.3716 -0.121192 -0.738887 -0.662842 0.490491 45 57.5 1 0 +1034 1 1 0 47.6291 42.4135 43.9317 -0.237086 -0.758652 -0.606825 0.490491 45 57.5 1 0 +1035 1 1 0 48.4039 42.2816 43.8454 -0.159613 -0.771841 -0.615456 0.490491 45 57.5 1 0 +1036 1 1 0 49.1886 42.198 43.7976 -0.0811417 -0.780205 -0.620239 0.490491 45 57.5 1 0 +1037 1 1 0 47.2629 42.1428 44.4526 -0.273706 -0.785715 -0.55474 0.490491 45 57.5 1 0 +1038 1 1 0 48.0273 41.985 44.3549 -0.197274 -0.801504 -0.564513 0.490491 45 57.5 1 0 +1039 1 1 0 46.9098 41.9098 45 -0.309017 -0.809017 -0.5 0.490491 45 57.5 1 0 +1040 1 1 0 47.6655 41.7285 44.888 -0.233445 -0.827147 -0.511205 0.490491 45 57.5 1 0 +1041 1 1 0 48.4357 41.5982 44.8074 -0.156434 -0.840178 -0.519259 0.490491 45 57.5 1 0 +1042 1 1 0 48.8092 41.8783 44.2886 -0.119078 -0.81217 -0.57114 0.490491 45 57.5 1 0 +1043 1 1 0 49.5933 41.8248 44.2554 -0.040675 -0.817523 -0.574458 0.490491 45 57.5 1 0 +1044 1 1 0 49.2154 41.5197 44.7589 -0.0784592 -0.848029 -0.52411 0.490491 45 57.5 1 0 +1045 1 1 0 50 41.4935 44.7427 0 -0.850651 -0.525731 0.490491 45 57.5 1 0 +1046 1 1 0 51.2119 42.6111 43.3716 0.121192 -0.738887 -0.662842 0.490491 45 57.5 1 0 +1047 1 1 0 51.9933 42.7204 43.4399 0.199331 -0.727959 -0.656006 0.490491 45 57.5 1 0 +1048 1 1 0 50.8114 42.198 43.7976 0.0811417 -0.780205 -0.620239 0.490491 45 57.5 1 0 +1049 1 1 0 51.5961 42.2816 43.8454 0.159613 -0.771841 -0.615456 0.490491 45 57.5 1 0 +1050 1 1 0 52.3709 42.4135 43.9317 0.237086 -0.758652 -0.606825 0.490491 45 57.5 1 0 +1051 1 1 0 50.4067 41.8248 44.2554 0.040675 -0.817523 -0.574458 0.490491 45 57.5 1 0 +1052 1 1 0 51.1908 41.8783 44.2886 0.119078 -0.81217 -0.57114 0.490491 45 57.5 1 0 +1053 1 1 0 50.7846 41.5197 44.7589 0.0784592 -0.848029 -0.52411 0.490491 45 57.5 1 0 +1054 1 1 0 51.5643 41.5982 44.8074 0.156434 -0.840178 -0.519259 0.490491 45 57.5 1 0 +1055 1 1 0 51.9727 41.985 44.3549 0.197274 -0.801504 -0.564513 0.490491 45 57.5 1 0 +1056 1 1 0 52.7371 42.1428 44.4526 0.273706 -0.785715 -0.55474 0.490491 45 57.5 1 0 +1057 1 1 0 52.3345 41.7285 44.888 0.233445 -0.827147 -0.511205 0.490491 45 57.5 1 0 +1058 1 1 0 53.0902 41.9098 45 0.309017 -0.809017 -0.5 0.490491 45 57.5 1 0 +1059 1 1 0 49.5932 42.565 43.325 -0.0406769 -0.743496 -0.667502 0.490491 45 57.5 1 0 +1060 1 1 0 50 42.1721 43.7771 0 -0.782786 -0.622291 0.490491 45 57.5 1 0 +1061 1 1 0 50.4068 42.565 43.325 0.0406769 -0.743496 -0.667502 0.490491 45 57.5 1 0 +1062 1 1 0 46.5715 41.7155 45.5713 -0.342848 -0.828447 -0.442867 0.490491 45 57.5 1 0 +1063 1 1 0 47.2531 41.4736 45.5554 -0.274694 -0.85264 -0.444464 0.490491 45 57.5 1 0 +1064 1 1 0 46.2496 41.5609 46.1639 -0.375038 -0.843912 -0.383614 0.490491 45 57.5 1 0 +1065 1 1 0 46.9234 41.3027 46.1409 -0.307659 -0.869725 -0.385906 0.490491 45 57.5 1 0 +1066 1 1 0 47.6132 41.0899 46.1381 -0.238677 -0.891007 -0.386187 0.490491 45 57.5 1 0 +1067 1 1 0 45.9457 41.4466 46.7748 -0.405434 -0.855337 -0.322525 0.490491 45 57.5 1 0 +1068 1 1 0 46.6079 41.1716 46.7514 -0.339209 -0.882837 -0.324863 0.490491 45 57.5 1 0 +1069 1 1 0 45.6611 41.3733 47.4011 -0.433888 -0.862669 -0.259892 0.490491 45 57.5 1 0 +1070 1 1 0 46.3148 41.0826 47.3734 -0.368518 -0.891742 -0.262661 0.490491 45 57.5 1 0 +1071 1 1 0 46.9874 40.8376 47.3592 -0.301258 -0.916244 -0.264082 0.490491 45 57.5 1 0 +1072 1 1 0 47.2937 40.9417 46.7407 -0.270627 -0.905832 -0.325929 0.490491 45 57.5 1 0 +1073 1 1 0 47.9881 40.7612 46.7447 -0.201189 -0.92388 -0.32553 0.490491 45 57.5 1 0 +1074 1 1 0 47.6755 40.6395 47.3585 -0.232455 -0.93605 -0.264151 0.490491 45 57.5 1 0 +1075 1 1 0 48.3754 40.4894 47.3713 -0.16246 -0.951057 -0.262865 0.490491 45 57.5 1 0 +1076 1 1 0 45.3973 41.3413 48.0398 -0.460266 -0.865871 -0.196015 0.490491 45 57.5 1 0 +1077 1 1 0 46.0265 41.036 48.0359 -0.39735 -0.896401 -0.196412 0.490491 45 57.5 1 0 +1078 1 1 0 45.1556 41.3507 48.688 -0.484441 -0.864929 -0.1312 0.490491 45 57.5 1 0 +1079 1 1 0 45.7764 41.032 48.6825 -0.422363 -0.896801 -0.131749 0.490491 45 57.5 1 0 +1080 1 1 0 46.4177 40.757 48.6834 -0.358229 -0.924305 -0.131656 0.490491 45 57.5 1 0 +1081 1 1 0 44.937 41.4015 49.3424 -0.506298 -0.859848 -0.0657577 0.490491 45 57.5 1 0 +1082 1 1 0 45.5463 41.0707 49.3418 -0.445365 -0.892927 -0.0658169 0.490491 45 57.5 1 0 +1083 1 1 0 46.1828 40.7808 49.3401 -0.381722 -0.921919 -0.0659886 0.490491 45 57.5 1 0 +1084 1 1 0 46.8322 40.538 49.3396 -0.316778 -0.946198 -0.0660427 0.490491 45 57.5 1 0 +1085 1 1 0 48.0822 40.3881 48.0166 -0.19178 -0.961188 -0.198337 0.490491 45 57.5 1 0 +1086 1 1 0 48.7727 40.2763 48.0142 -0.122729 -0.97237 -0.198581 0.490491 45 57.5 1 0 +1087 1 1 0 47.7988 40.3361 48.6721 -0.220117 -0.966393 -0.132792 0.490491 45 57.5 1 0 +1088 1 1 0 48.4845 40.2057 48.6674 -0.151549 -0.979426 -0.133256 0.490491 45 57.5 1 0 +1089 1 1 0 49.1776 40.1231 48.6693 -0.0822422 -0.987688 -0.133071 0.490491 45 57.5 1 0 +1090 1 1 0 47.5267 40.3336 49.3343 -0.247326 -0.966643 -0.0665668 0.490491 45 57.5 1 0 +1091 1 1 0 48.204 40.1852 49.334 -0.179596 -0.981483 -0.0666046 0.490491 45 57.5 1 0 +1092 1 1 0 48.8961 40.0835 49.3329 -0.110385 -0.991648 -0.0667095 0.490491 45 57.5 1 0 +1093 1 1 0 49.5875 40.0308 49.3326 -0.0412479 -0.996917 -0.0667412 0.490491 45 57.5 1 0 +1094 1 1 0 46.6939 40.7732 48.0161 -0.330606 -0.922682 -0.198387 0.490491 45 57.5 1 0 +1095 1 1 0 47.1007 40.5218 48.6743 -0.289929 -0.947822 -0.13257 0.490491 45 57.5 1 0 +1096 1 1 0 47.3845 40.5557 48.0091 -0.26155 -0.944433 -0.199094 0.490491 45 57.5 1 0 +1097 1 1 0 52.7469 41.4736 45.5554 0.274694 -0.85264 -0.444464 0.490491 45 57.5 1 0 +1098 1 1 0 53.4285 41.7155 45.5713 0.342848 -0.828447 -0.442867 0.490491 45 57.5 1 0 +1099 1 1 0 52.3868 41.0899 46.1381 0.238677 -0.891007 -0.386187 0.490491 45 57.5 1 0 +1100 1 1 0 53.0766 41.3027 46.1409 0.307659 -0.869725 -0.385906 0.490491 45 57.5 1 0 +1101 1 1 0 53.7504 41.5609 46.1639 0.375038 -0.843912 -0.383614 0.490491 45 57.5 1 0 +1102 1 1 0 52.0119 40.7612 46.7447 0.201189 -0.92388 -0.32553 0.490491 45 57.5 1 0 +1103 1 1 0 52.7063 40.9417 46.7407 0.270627 -0.905832 -0.325929 0.490491 45 57.5 1 0 +1104 1 1 0 51.6246 40.4894 47.3713 0.16246 -0.951057 -0.262865 0.490491 45 57.5 1 0 +1105 1 1 0 52.3245 40.6395 47.3585 0.232455 -0.93605 -0.264151 0.490491 45 57.5 1 0 +1106 1 1 0 53.0126 40.8376 47.3592 0.301258 -0.916244 -0.264082 0.490491 45 57.5 1 0 +1107 1 1 0 53.3921 41.1716 46.7514 0.339209 -0.882837 -0.324863 0.490491 45 57.5 1 0 +1108 1 1 0 54.0543 41.4466 46.7748 0.405434 -0.855337 -0.322525 0.490491 45 57.5 1 0 +1109 1 1 0 53.6852 41.0826 47.3734 0.368518 -0.891742 -0.262661 0.490491 45 57.5 1 0 +1110 1 1 0 54.3389 41.3733 47.4011 0.433888 -0.862669 -0.259892 0.490491 45 57.5 1 0 +1111 1 1 0 51.2273 40.2763 48.0142 0.122729 -0.97237 -0.198581 0.490491 45 57.5 1 0 +1112 1 1 0 51.9178 40.3881 48.0166 0.19178 -0.961188 -0.198337 0.490491 45 57.5 1 0 +1113 1 1 0 50.8224 40.1231 48.6693 0.0822422 -0.987688 -0.133071 0.490491 45 57.5 1 0 +1114 1 1 0 51.5155 40.2057 48.6674 0.151549 -0.979426 -0.133256 0.490491 45 57.5 1 0 +1115 1 1 0 52.2012 40.3361 48.6721 0.220117 -0.966393 -0.132792 0.490491 45 57.5 1 0 +1116 1 1 0 50.4125 40.0308 49.3326 0.0412479 -0.996917 -0.0667412 0.490491 45 57.5 1 0 +1117 1 1 0 51.1039 40.0835 49.3329 0.110385 -0.991648 -0.0667095 0.490491 45 57.5 1 0 +1118 1 1 0 51.796 40.1852 49.334 0.179596 -0.981483 -0.0666046 0.490491 45 57.5 1 0 +1119 1 1 0 52.4733 40.3336 49.3343 0.247326 -0.966643 -0.0665668 0.490491 45 57.5 1 0 +1120 1 1 0 53.9735 41.036 48.0359 0.39735 -0.896401 -0.196412 0.490491 45 57.5 1 0 +1121 1 1 0 54.6027 41.3413 48.0398 0.460266 -0.865871 -0.196015 0.490491 45 57.5 1 0 +1122 1 1 0 53.5823 40.757 48.6834 0.358229 -0.924305 -0.131656 0.490491 45 57.5 1 0 +1123 1 1 0 54.2236 41.032 48.6825 0.422363 -0.896801 -0.131749 0.490491 45 57.5 1 0 +1124 1 1 0 54.8444 41.3507 48.688 0.484441 -0.864929 -0.1312 0.490491 45 57.5 1 0 +1125 1 1 0 53.1678 40.538 49.3396 0.316778 -0.946198 -0.0660427 0.490491 45 57.5 1 0 +1126 1 1 0 53.8172 40.7808 49.3401 0.381722 -0.921919 -0.0659886 0.490491 45 57.5 1 0 +1127 1 1 0 54.4537 41.0707 49.3418 0.445365 -0.892927 -0.0658169 0.490491 45 57.5 1 0 +1128 1 1 0 55.063 41.4015 49.3424 0.506298 -0.859848 -0.0657577 0.490491 45 57.5 1 0 +1129 1 1 0 52.6155 40.5557 48.0091 0.26155 -0.944433 -0.199094 0.490491 45 57.5 1 0 +1130 1 1 0 52.8993 40.5218 48.6743 0.289929 -0.947822 -0.13257 0.490491 45 57.5 1 0 +1131 1 1 0 53.3061 40.7732 48.0161 0.330606 -0.922682 -0.198387 0.490491 45 57.5 1 0 +1132 1 1 0 48.0177 41.3147 45.4574 -0.198227 -0.868535 -0.454262 0.490491 45 57.5 1 0 +1133 1 1 0 48.3899 40.9516 46.0586 -0.161007 -0.904839 -0.394136 0.490491 45 57.5 1 0 +1134 1 1 0 48.772 40.6487 46.6766 -0.1228 -0.93513 -0.332342 0.490491 45 57.5 1 0 +1135 1 1 0 49.1768 40.8702 46.0039 -0.0823235 -0.912983 -0.399607 0.490491 45 57.5 1 0 +1136 1 1 0 48.8024 41.2066 45.3912 -0.119755 -0.879344 -0.460882 0.490491 45 57.5 1 0 +1137 1 1 0 49.587 41.1524 45.3579 -0.0412991 -0.88476 -0.464213 0.490491 45 57.5 1 0 +1138 1 1 0 49.185 40.3935 47.3448 -0.081501 -0.960655 -0.265519 0.490491 45 57.5 1 0 +1139 1 1 0 49.5875 40.2115 47.9963 -0.0412506 -0.978852 -0.200368 0.490491 45 57.5 1 0 +1140 1 1 0 50 40.3614 47.336 0 -0.963861 -0.266405 0.490491 45 57.5 1 0 +1141 1 1 0 50 40.0895 48.6648 0 -0.991046 -0.133524 0.490491 45 57.5 1 0 +1142 1 1 0 50.4125 40.2115 47.9963 0.0412506 -0.978852 -0.200368 0.490491 45 57.5 1 0 +1143 1 1 0 50.815 40.3935 47.3448 0.081501 -0.960655 -0.265519 0.490491 45 57.5 1 0 +1144 1 1 0 50.413 41.1524 45.3579 0.0412991 -0.88476 -0.464213 0.490491 45 57.5 1 0 +1145 1 1 0 50.8232 40.8702 46.0039 0.0823235 -0.912983 -0.399607 0.490491 45 57.5 1 0 +1146 1 1 0 51.1976 41.2066 45.3912 0.119755 -0.879344 -0.460882 0.490491 45 57.5 1 0 +1147 1 1 0 51.228 40.6487 46.6766 0.1228 -0.93513 -0.332342 0.490491 45 57.5 1 0 +1148 1 1 0 51.6101 40.9516 46.0586 0.161007 -0.904839 -0.394136 0.490491 45 57.5 1 0 +1149 1 1 0 51.9823 41.3147 45.4574 0.198227 -0.868535 -0.454262 0.490491 45 57.5 1 0 +1150 1 1 0 49.587 40.5838 46.6586 -0.0413021 -0.941618 -0.33414 0.490491 45 57.5 1 0 +1151 1 1 0 50.413 40.5838 46.6586 0.0413021 -0.941618 -0.33414 0.490491 45 57.5 1 0 +1152 1 1 0 50 40.8391 45.9903 0 -0.916092 -0.400968 0.490491 45 57.5 1 0 +1153 1 1 0 44.2794 58.1921 50.4064 -0.572055 0.819207 0.0406403 0.490491 45 57.5 1 0 +1154 1 1 0 44.2794 58.1921 49.5936 -0.572055 0.819207 -0.0406403 0.490491 45 57.5 1 0 +1155 1 1 0 43.8436 57.8384 50.8109 -0.615642 0.783843 0.081086 0.490491 45 57.5 1 0 +1156 1 1 0 43.8232 57.8643 50 -0.617676 0.786433 0 0.490491 45 57.5 1 0 +1157 1 1 0 43.8436 57.8384 49.1891 -0.615642 0.783843 -0.081086 0.490491 45 57.5 1 0 +1158 1 1 0 43.4372 57.4473 51.2114 -0.656282 0.744727 0.121144 0.490491 45 57.5 1 0 +1159 1 1 0 43.3912 57.4939 50.4064 -0.660883 0.749387 0.0406418 0.490491 45 57.5 1 0 +1160 1 1 0 43.0622 57.0205 51.6062 -0.69378 0.702047 0.160622 0.490491 45 57.5 1 0 +1161 1 1 0 42.9938 57.0897 50.8057 -0.700622 0.708969 0.0805729 0.490491 45 57.5 1 0 +1162 1 1 0 42.9709 57.1128 50 -0.702907 0.711282 0 0.490491 45 57.5 1 0 +1163 1 1 0 43.3912 57.4939 49.5936 -0.660883 0.749387 -0.0406418 0.490491 45 57.5 1 0 +1164 1 1 0 43.4372 57.4473 48.7886 -0.656282 0.744727 -0.121144 0.490491 45 57.5 1 0 +1165 1 1 0 42.9938 57.0897 49.1943 -0.700622 0.708969 -0.0805729 0.490491 45 57.5 1 0 +1166 1 1 0 43.0622 57.0205 48.3938 -0.69378 0.702047 -0.160622 0.490491 45 57.5 1 0 +1167 1 1 0 42.7204 56.5601 51.9933 -0.727959 0.656006 0.199331 0.490491 45 57.5 1 0 +1168 1 1 0 42.6111 56.6284 51.2119 -0.738887 0.662842 0.121192 0.490491 45 57.5 1 0 +1169 1 1 0 42.4135 56.0683 52.3709 -0.758652 0.606825 0.237086 0.490491 45 57.5 1 0 +1170 1 1 0 42.2816 56.1546 51.5961 -0.771841 0.615456 0.159613 0.490491 45 57.5 1 0 +1171 1 1 0 42.198 56.2024 50.8114 -0.780205 0.620239 0.0811417 0.490491 45 57.5 1 0 +1172 1 1 0 42.1428 55.5474 52.7371 -0.785715 0.55474 0.273706 0.490491 45 57.5 1 0 +1173 1 1 0 41.985 55.6451 51.9727 -0.801504 0.564513 0.197274 0.490491 45 57.5 1 0 +1174 1 1 0 41.9098 55 53.0902 -0.809017 0.5 0.309017 0.490491 45 57.5 1 0 +1175 1 1 0 41.7285 55.112 52.3345 -0.827147 0.511205 0.233445 0.490491 45 57.5 1 0 +1176 1 1 0 41.5982 55.1926 51.5643 -0.840178 0.519259 0.156434 0.490491 45 57.5 1 0 +1177 1 1 0 41.8783 55.7114 51.1908 -0.81217 0.57114 0.119078 0.490491 45 57.5 1 0 +1178 1 1 0 41.8248 55.7446 50.4067 -0.817523 0.574458 0.040675 0.490491 45 57.5 1 0 +1179 1 1 0 41.5197 55.2411 50.7846 -0.848029 0.52411 0.0784592 0.490491 45 57.5 1 0 +1180 1 1 0 41.4935 55.2573 50 -0.850651 0.525731 0 0.490491 45 57.5 1 0 +1181 1 1 0 42.6111 56.6284 48.7881 -0.738887 0.662842 -0.121192 0.490491 45 57.5 1 0 +1182 1 1 0 42.7204 56.5601 48.0067 -0.727959 0.656006 -0.199331 0.490491 45 57.5 1 0 +1183 1 1 0 42.198 56.2024 49.1886 -0.780205 0.620239 -0.0811417 0.490491 45 57.5 1 0 +1184 1 1 0 42.2816 56.1546 48.4039 -0.771841 0.615456 -0.159613 0.490491 45 57.5 1 0 +1185 1 1 0 42.4135 56.0683 47.6291 -0.758652 0.606825 -0.237086 0.490491 45 57.5 1 0 +1186 1 1 0 41.8248 55.7446 49.5933 -0.817523 0.574458 -0.040675 0.490491 45 57.5 1 0 +1187 1 1 0 41.8783 55.7114 48.8092 -0.81217 0.57114 -0.119078 0.490491 45 57.5 1 0 +1188 1 1 0 41.5197 55.2411 49.2154 -0.848029 0.52411 -0.0784592 0.490491 45 57.5 1 0 +1189 1 1 0 41.5982 55.1926 48.4357 -0.840178 0.519259 -0.156434 0.490491 45 57.5 1 0 +1190 1 1 0 41.985 55.6451 48.0273 -0.801504 0.564513 -0.197274 0.490491 45 57.5 1 0 +1191 1 1 0 42.1428 55.5474 47.2629 -0.785715 0.55474 -0.273706 0.490491 45 57.5 1 0 +1192 1 1 0 41.7285 55.112 47.6655 -0.827147 0.511205 -0.233445 0.490491 45 57.5 1 0 +1193 1 1 0 41.9098 55 46.9098 -0.809017 0.5 -0.309017 0.490491 45 57.5 1 0 +1194 1 1 0 42.565 56.675 50.4068 -0.743496 0.667502 0.0406769 0.490491 45 57.5 1 0 +1195 1 1 0 42.1721 56.2229 50 -0.782786 0.622291 0 0.490491 45 57.5 1 0 +1196 1 1 0 42.565 56.675 49.5932 -0.743496 0.667502 -0.0406769 0.490491 45 57.5 1 0 +1197 1 1 0 41.7155 54.4287 53.4285 -0.828447 0.442867 0.342848 0.490491 45 57.5 1 0 +1198 1 1 0 41.4736 54.4446 52.7469 -0.85264 0.444464 0.274694 0.490491 45 57.5 1 0 +1199 1 1 0 41.5609 53.8361 53.7504 -0.843912 0.383614 0.375038 0.490491 45 57.5 1 0 +1200 1 1 0 41.3027 53.8591 53.0766 -0.869725 0.385906 0.307659 0.490491 45 57.5 1 0 +1201 1 1 0 41.0899 53.8619 52.3868 -0.891007 0.386187 0.238677 0.490491 45 57.5 1 0 +1202 1 1 0 41.4466 53.2252 54.0543 -0.855337 0.322525 0.405434 0.490491 45 57.5 1 0 +1203 1 1 0 41.1716 53.2486 53.3921 -0.882837 0.324863 0.339209 0.490491 45 57.5 1 0 +1204 1 1 0 41.3733 52.5989 54.3389 -0.862669 0.259892 0.433888 0.490491 45 57.5 1 0 +1205 1 1 0 41.0826 52.6266 53.6852 -0.891742 0.262661 0.368518 0.490491 45 57.5 1 0 +1206 1 1 0 40.8376 52.6408 53.0126 -0.916244 0.264082 0.301258 0.490491 45 57.5 1 0 +1207 1 1 0 40.9417 53.2593 52.7063 -0.905832 0.325929 0.270627 0.490491 45 57.5 1 0 +1208 1 1 0 40.7612 53.2553 52.0119 -0.92388 0.32553 0.201189 0.490491 45 57.5 1 0 +1209 1 1 0 40.6395 52.6415 52.3245 -0.93605 0.264151 0.232455 0.490491 45 57.5 1 0 +1210 1 1 0 40.4894 52.6287 51.6246 -0.951057 0.262865 0.16246 0.490491 45 57.5 1 0 +1211 1 1 0 41.3413 51.9602 54.6027 -0.865871 0.196015 0.460266 0.490491 45 57.5 1 0 +1212 1 1 0 41.036 51.9641 53.9735 -0.896401 0.196412 0.39735 0.490491 45 57.5 1 0 +1213 1 1 0 41.3507 51.312 54.8444 -0.864929 0.1312 0.484441 0.490491 45 57.5 1 0 +1214 1 1 0 41.032 51.3175 54.2236 -0.896801 0.131749 0.422363 0.490491 45 57.5 1 0 +1215 1 1 0 40.757 51.3166 53.5823 -0.924305 0.131656 0.358229 0.490491 45 57.5 1 0 +1216 1 1 0 41.4015 50.6576 55.063 -0.859848 0.0657577 0.506298 0.490491 45 57.5 1 0 +1217 1 1 0 41.0707 50.6582 54.4537 -0.892927 0.0658169 0.445365 0.490491 45 57.5 1 0 +1218 1 1 0 41.1503 50 54.6566 -0.884965 0 0.465657 0.490491 45 57.5 1 0 +1219 1 1 0 40.8496 50 54.0336 -0.915043 0 0.403355 0.490491 45 57.5 1 0 +1220 1 1 0 40.7808 50.6599 53.8172 -0.921919 0.0659886 0.381722 0.490491 45 57.5 1 0 +1221 1 1 0 40.538 50.6604 53.1678 -0.946198 0.0660427 0.316778 0.490491 45 57.5 1 0 +1222 1 1 0 40.5926 50 53.3912 -0.940742 0 0.339122 0.490491 45 57.5 1 0 +1223 1 1 0 40.3806 50 52.7327 -0.961938 0 0.273267 0.490491 45 57.5 1 0 +1224 1 1 0 40.3881 51.9834 51.9178 -0.961188 0.198337 0.19178 0.490491 45 57.5 1 0 +1225 1 1 0 40.2763 51.9858 51.2273 -0.97237 0.198581 0.122729 0.490491 45 57.5 1 0 +1226 1 1 0 40.3361 51.3279 52.2012 -0.966393 0.132792 0.220117 0.490491 45 57.5 1 0 +1227 1 1 0 40.2057 51.3326 51.5155 -0.979426 0.133256 0.151549 0.490491 45 57.5 1 0 +1228 1 1 0 40.1231 51.3307 50.8224 -0.987688 0.133071 0.0822422 0.490491 45 57.5 1 0 +1229 1 1 0 40.3336 50.6657 52.4733 -0.966643 0.0665668 0.247326 0.490491 45 57.5 1 0 +1230 1 1 0 40.1852 50.666 51.796 -0.981483 0.0666046 0.179596 0.490491 45 57.5 1 0 +1231 1 1 0 40.2147 50 52.061 -0.97853 0 0.206103 0.490491 45 57.5 1 0 +1232 1 1 0 40.0956 50 51.3795 -0.990439 0 0.137952 0.490491 45 57.5 1 0 +1233 1 1 0 40.0835 50.6671 51.1039 -0.991648 0.0667095 0.110385 0.490491 45 57.5 1 0 +1234 1 1 0 40.0308 50.6674 50.4125 -0.996917 0.0667412 0.0412479 0.490491 45 57.5 1 0 +1235 1 1 0 40.0239 50 50.6914 -0.997607 0 0.0691418 0.490491 45 57.5 1 0 +1236 1 1 0 40 50 50 -1 0 0 0.490491 45 57.5 1 0 +1237 1 1 0 40.7732 51.9839 53.3061 -0.922682 0.198387 0.330606 0.490491 45 57.5 1 0 +1238 1 1 0 40.5218 51.3257 52.8993 -0.947822 0.13257 0.289929 0.490491 45 57.5 1 0 +1239 1 1 0 40.5557 51.9909 52.6155 -0.944433 0.199094 0.26155 0.490491 45 57.5 1 0 +1240 1 1 0 41.4736 54.4446 47.2531 -0.85264 0.444464 -0.274694 0.490491 45 57.5 1 0 +1241 1 1 0 41.7155 54.4287 46.5715 -0.828447 0.442867 -0.342848 0.490491 45 57.5 1 0 +1242 1 1 0 41.0899 53.8619 47.6132 -0.891007 0.386187 -0.238677 0.490491 45 57.5 1 0 +1243 1 1 0 41.3027 53.8591 46.9234 -0.869725 0.385906 -0.307659 0.490491 45 57.5 1 0 +1244 1 1 0 41.5609 53.8361 46.2496 -0.843912 0.383614 -0.375038 0.490491 45 57.5 1 0 +1245 1 1 0 40.7612 53.2553 47.9881 -0.92388 0.32553 -0.201189 0.490491 45 57.5 1 0 +1246 1 1 0 40.9417 53.2593 47.2937 -0.905832 0.325929 -0.270627 0.490491 45 57.5 1 0 +1247 1 1 0 40.4894 52.6287 48.3754 -0.951057 0.262865 -0.16246 0.490491 45 57.5 1 0 +1248 1 1 0 40.6395 52.6415 47.6755 -0.93605 0.264151 -0.232455 0.490491 45 57.5 1 0 +1249 1 1 0 40.8376 52.6408 46.9874 -0.916244 0.264082 -0.301258 0.490491 45 57.5 1 0 +1250 1 1 0 41.1716 53.2486 46.6079 -0.882837 0.324863 -0.339209 0.490491 45 57.5 1 0 +1251 1 1 0 41.4466 53.2252 45.9457 -0.855337 0.322525 -0.405434 0.490491 45 57.5 1 0 +1252 1 1 0 41.0826 52.6266 46.3148 -0.891742 0.262661 -0.368518 0.490491 45 57.5 1 0 +1253 1 1 0 41.3733 52.5989 45.6611 -0.862669 0.259892 -0.433888 0.490491 45 57.5 1 0 +1254 1 1 0 40.2763 51.9858 48.7727 -0.97237 0.198581 -0.122729 0.490491 45 57.5 1 0 +1255 1 1 0 40.3881 51.9834 48.0822 -0.961188 0.198337 -0.19178 0.490491 45 57.5 1 0 +1256 1 1 0 40.1231 51.3307 49.1776 -0.987688 0.133071 -0.0822422 0.490491 45 57.5 1 0 +1257 1 1 0 40.2057 51.3326 48.4845 -0.979426 0.133256 -0.151549 0.490491 45 57.5 1 0 +1258 1 1 0 40.3361 51.3279 47.7988 -0.966393 0.132792 -0.220117 0.490491 45 57.5 1 0 +1259 1 1 0 40.0308 50.6674 49.5875 -0.996917 0.0667412 -0.0412479 0.490491 45 57.5 1 0 +1260 1 1 0 40.0835 50.6671 48.8961 -0.991648 0.0667095 -0.110385 0.490491 45 57.5 1 0 +1261 1 1 0 40.0239 50 49.3086 -0.997607 0 -0.0691418 0.490491 45 57.5 1 0 +1262 1 1 0 40.0956 50 48.6205 -0.990439 0 -0.137952 0.490491 45 57.5 1 0 +1263 1 1 0 40.1852 50.666 48.204 -0.981483 0.0666046 -0.179596 0.490491 45 57.5 1 0 +1264 1 1 0 40.3336 50.6657 47.5267 -0.966643 0.0665668 -0.247326 0.490491 45 57.5 1 0 +1265 1 1 0 40.2147 50 47.939 -0.97853 0 -0.206103 0.490491 45 57.5 1 0 +1266 1 1 0 40.3806 50 47.2673 -0.961938 0 -0.273267 0.490491 45 57.5 1 0 +1267 1 1 0 41.036 51.9641 46.0265 -0.896401 0.196412 -0.39735 0.490491 45 57.5 1 0 +1268 1 1 0 41.3413 51.9602 45.3973 -0.865871 0.196015 -0.460266 0.490491 45 57.5 1 0 +1269 1 1 0 40.757 51.3166 46.4177 -0.924305 0.131656 -0.358229 0.490491 45 57.5 1 0 +1270 1 1 0 41.032 51.3175 45.7764 -0.896801 0.131749 -0.422363 0.490491 45 57.5 1 0 +1271 1 1 0 41.3507 51.312 45.1556 -0.864929 0.1312 -0.484441 0.490491 45 57.5 1 0 +1272 1 1 0 40.538 50.6604 46.8322 -0.946198 0.0660427 -0.316778 0.490491 45 57.5 1 0 +1273 1 1 0 40.7808 50.6599 46.1828 -0.921919 0.0659886 -0.381722 0.490491 45 57.5 1 0 +1274 1 1 0 40.5926 50 46.6088 -0.940742 0 -0.339122 0.490491 45 57.5 1 0 +1275 1 1 0 40.8496 50 45.9664 -0.915043 0 -0.403355 0.490491 45 57.5 1 0 +1276 1 1 0 41.0707 50.6582 45.5463 -0.892927 0.0658169 -0.445365 0.490491 45 57.5 1 0 +1277 1 1 0 41.4015 50.6576 44.937 -0.859848 0.0657577 -0.506298 0.490491 45 57.5 1 0 +1278 1 1 0 41.1503 50 45.3434 -0.884965 0 -0.465657 0.490491 45 57.5 1 0 +1279 1 1 0 40.5557 51.9909 47.3845 -0.944433 0.199094 -0.26155 0.490491 45 57.5 1 0 +1280 1 1 0 40.5218 51.3257 47.1007 -0.947822 0.13257 -0.289929 0.490491 45 57.5 1 0 +1281 1 1 0 40.7732 51.9839 46.6939 -0.922682 0.198387 -0.330606 0.490491 45 57.5 1 0 +1282 1 1 0 41.3147 54.5426 51.9823 -0.868535 0.454262 0.198227 0.490491 45 57.5 1 0 +1283 1 1 0 40.9516 53.9414 51.6101 -0.904839 0.394136 0.161007 0.490491 45 57.5 1 0 +1284 1 1 0 40.6487 53.3234 51.228 -0.93513 0.332342 0.1228 0.490491 45 57.5 1 0 +1285 1 1 0 40.8702 53.9961 50.8232 -0.912983 0.399607 0.0823235 0.490491 45 57.5 1 0 +1286 1 1 0 41.2066 54.6088 51.1976 -0.879344 0.460882 0.119755 0.490491 45 57.5 1 0 +1287 1 1 0 41.1524 54.6421 50.413 -0.88476 0.464213 0.0412991 0.490491 45 57.5 1 0 +1288 1 1 0 40.3935 52.6552 50.815 -0.960655 0.265519 0.081501 0.490491 45 57.5 1 0 +1289 1 1 0 40.2115 52.0037 50.4125 -0.978852 0.200368 0.0412506 0.490491 45 57.5 1 0 +1290 1 1 0 40.3614 52.664 50 -0.963861 0.266405 0 0.490491 45 57.5 1 0 +1291 1 1 0 40.0895 51.3352 50 -0.991046 0.133524 0 0.490491 45 57.5 1 0 +1292 1 1 0 40.2115 52.0037 49.5875 -0.978852 0.200368 -0.0412506 0.490491 45 57.5 1 0 +1293 1 1 0 40.3935 52.6552 49.185 -0.960655 0.265519 -0.081501 0.490491 45 57.5 1 0 +1294 1 1 0 41.1524 54.6421 49.587 -0.88476 0.464213 -0.0412991 0.490491 45 57.5 1 0 +1295 1 1 0 40.8702 53.9961 49.1768 -0.912983 0.399607 -0.0823235 0.490491 45 57.5 1 0 +1296 1 1 0 41.2066 54.6088 48.8024 -0.879344 0.460882 -0.119755 0.490491 45 57.5 1 0 +1297 1 1 0 40.6487 53.3234 48.772 -0.93513 0.332342 -0.1228 0.490491 45 57.5 1 0 +1298 1 1 0 40.9516 53.9414 48.3899 -0.904839 0.394136 -0.161007 0.490491 45 57.5 1 0 +1299 1 1 0 41.3147 54.5426 48.0177 -0.868535 0.454262 -0.198227 0.490491 45 57.5 1 0 +1300 1 1 0 40.5838 53.3414 50.413 -0.941618 0.33414 0.0413021 0.490491 45 57.5 1 0 +1301 1 1 0 40.5838 53.3414 49.587 -0.941618 0.33414 -0.0413021 0.490491 45 57.5 1 0 +1302 1 1 0 40.8391 54.0097 50 -0.916092 0.400968 0 0.490491 45 57.5 1 0 +1303 1 1 0 44.2794 41.8079 49.5936 -0.572055 -0.819207 -0.0406403 0.490491 45 57.5 1 0 +1304 1 1 0 44.2794 41.8079 50.4064 -0.572055 -0.819207 0.0406403 0.490491 45 57.5 1 0 +1305 1 1 0 43.8436 42.1616 49.1891 -0.615642 -0.783843 -0.081086 0.490491 45 57.5 1 0 +1306 1 1 0 43.8232 42.1357 50 -0.617676 -0.786433 0 0.490491 45 57.5 1 0 +1307 1 1 0 43.8436 42.1616 50.8109 -0.615642 -0.783843 0.081086 0.490491 45 57.5 1 0 +1308 1 1 0 43.4372 42.5527 48.7886 -0.656282 -0.744727 -0.121144 0.490491 45 57.5 1 0 +1309 1 1 0 43.3912 42.5061 49.5936 -0.660883 -0.749387 -0.0406418 0.490491 45 57.5 1 0 +1310 1 1 0 43.0622 42.9795 48.3938 -0.69378 -0.702047 -0.160622 0.490491 45 57.5 1 0 +1311 1 1 0 42.9938 42.9103 49.1943 -0.700622 -0.708969 -0.0805729 0.490491 45 57.5 1 0 +1312 1 1 0 42.9709 42.8872 50 -0.702907 -0.711282 0 0.490491 45 57.5 1 0 +1313 1 1 0 43.3912 42.5061 50.4064 -0.660883 -0.749387 0.0406418 0.490491 45 57.5 1 0 +1314 1 1 0 43.4372 42.5527 51.2114 -0.656282 -0.744727 0.121144 0.490491 45 57.5 1 0 +1315 1 1 0 42.9938 42.9103 50.8057 -0.700622 -0.708969 0.0805729 0.490491 45 57.5 1 0 +1316 1 1 0 43.0622 42.9795 51.6062 -0.69378 -0.702047 0.160622 0.490491 45 57.5 1 0 +1317 1 1 0 42.7204 43.4399 48.0067 -0.727959 -0.656006 -0.199331 0.490491 45 57.5 1 0 +1318 1 1 0 42.6111 43.3716 48.7881 -0.738887 -0.662842 -0.121192 0.490491 45 57.5 1 0 +1319 1 1 0 42.4135 43.9317 47.6291 -0.758652 -0.606825 -0.237086 0.490491 45 57.5 1 0 +1320 1 1 0 42.2816 43.8454 48.4039 -0.771841 -0.615456 -0.159613 0.490491 45 57.5 1 0 +1321 1 1 0 42.198 43.7976 49.1886 -0.780205 -0.620239 -0.0811417 0.490491 45 57.5 1 0 +1322 1 1 0 42.1428 44.4526 47.2629 -0.785715 -0.55474 -0.273706 0.490491 45 57.5 1 0 +1323 1 1 0 41.985 44.3549 48.0273 -0.801504 -0.564513 -0.197274 0.490491 45 57.5 1 0 +1324 1 1 0 41.9098 45 46.9098 -0.809017 -0.5 -0.309017 0.490491 45 57.5 1 0 +1325 1 1 0 41.7285 44.888 47.6655 -0.827147 -0.511205 -0.233445 0.490491 45 57.5 1 0 +1326 1 1 0 41.5982 44.8074 48.4357 -0.840178 -0.519259 -0.156434 0.490491 45 57.5 1 0 +1327 1 1 0 41.8783 44.2886 48.8092 -0.81217 -0.57114 -0.119078 0.490491 45 57.5 1 0 +1328 1 1 0 41.8248 44.2554 49.5933 -0.817523 -0.574458 -0.040675 0.490491 45 57.5 1 0 +1329 1 1 0 41.5197 44.7589 49.2154 -0.848029 -0.52411 -0.0784592 0.490491 45 57.5 1 0 +1330 1 1 0 41.4935 44.7427 50 -0.850651 -0.525731 0 0.490491 45 57.5 1 0 +1331 1 1 0 42.6111 43.3716 51.2119 -0.738887 -0.662842 0.121192 0.490491 45 57.5 1 0 +1332 1 1 0 42.7204 43.4399 51.9933 -0.727959 -0.656006 0.199331 0.490491 45 57.5 1 0 +1333 1 1 0 42.198 43.7976 50.8114 -0.780205 -0.620239 0.0811417 0.490491 45 57.5 1 0 +1334 1 1 0 42.2816 43.8454 51.5961 -0.771841 -0.615456 0.159613 0.490491 45 57.5 1 0 +1335 1 1 0 42.4135 43.9317 52.3709 -0.758652 -0.606825 0.237086 0.490491 45 57.5 1 0 +1336 1 1 0 41.8248 44.2554 50.4067 -0.817523 -0.574458 0.040675 0.490491 45 57.5 1 0 +1337 1 1 0 41.8783 44.2886 51.1908 -0.81217 -0.57114 0.119078 0.490491 45 57.5 1 0 +1338 1 1 0 41.5197 44.7589 50.7846 -0.848029 -0.52411 0.0784592 0.490491 45 57.5 1 0 +1339 1 1 0 41.5982 44.8074 51.5643 -0.840178 -0.519259 0.156434 0.490491 45 57.5 1 0 +1340 1 1 0 41.985 44.3549 51.9727 -0.801504 -0.564513 0.197274 0.490491 45 57.5 1 0 +1341 1 1 0 42.1428 44.4526 52.7371 -0.785715 -0.55474 0.273706 0.490491 45 57.5 1 0 +1342 1 1 0 41.7285 44.888 52.3345 -0.827147 -0.511205 0.233445 0.490491 45 57.5 1 0 +1343 1 1 0 41.9098 45 53.0902 -0.809017 -0.5 0.309017 0.490491 45 57.5 1 0 +1344 1 1 0 42.565 43.325 49.5932 -0.743496 -0.667502 -0.0406769 0.490491 45 57.5 1 0 +1345 1 1 0 42.1721 43.7771 50 -0.782786 -0.622291 0 0.490491 45 57.5 1 0 +1346 1 1 0 42.565 43.325 50.4068 -0.743496 -0.667502 0.0406769 0.490491 45 57.5 1 0 +1347 1 1 0 41.7155 45.5713 46.5715 -0.828447 -0.442867 -0.342848 0.490491 45 57.5 1 0 +1348 1 1 0 41.4736 45.5554 47.2531 -0.85264 -0.444464 -0.274694 0.490491 45 57.5 1 0 +1349 1 1 0 41.5609 46.1639 46.2496 -0.843912 -0.383614 -0.375038 0.490491 45 57.5 1 0 +1350 1 1 0 41.3027 46.1409 46.9234 -0.869725 -0.385906 -0.307659 0.490491 45 57.5 1 0 +1351 1 1 0 41.0899 46.1381 47.6132 -0.891007 -0.386187 -0.238677 0.490491 45 57.5 1 0 +1352 1 1 0 41.4466 46.7748 45.9457 -0.855337 -0.322525 -0.405434 0.490491 45 57.5 1 0 +1353 1 1 0 41.1716 46.7514 46.6079 -0.882837 -0.324863 -0.339209 0.490491 45 57.5 1 0 +1354 1 1 0 41.3733 47.4011 45.6611 -0.862669 -0.259892 -0.433888 0.490491 45 57.5 1 0 +1355 1 1 0 41.0826 47.3734 46.3148 -0.891742 -0.262661 -0.368518 0.490491 45 57.5 1 0 +1356 1 1 0 40.8376 47.3592 46.9874 -0.916244 -0.264082 -0.301258 0.490491 45 57.5 1 0 +1357 1 1 0 40.9417 46.7407 47.2937 -0.905832 -0.325929 -0.270627 0.490491 45 57.5 1 0 +1358 1 1 0 40.7612 46.7447 47.9881 -0.92388 -0.32553 -0.201189 0.490491 45 57.5 1 0 +1359 1 1 0 40.6395 47.3585 47.6755 -0.93605 -0.264151 -0.232455 0.490491 45 57.5 1 0 +1360 1 1 0 40.4894 47.3713 48.3754 -0.951057 -0.262865 -0.16246 0.490491 45 57.5 1 0 +1361 1 1 0 41.3413 48.0398 45.3973 -0.865871 -0.196015 -0.460266 0.490491 45 57.5 1 0 +1362 1 1 0 41.036 48.0359 46.0265 -0.896401 -0.196412 -0.39735 0.490491 45 57.5 1 0 +1363 1 1 0 41.3507 48.688 45.1556 -0.864929 -0.1312 -0.484441 0.490491 45 57.5 1 0 +1364 1 1 0 41.032 48.6825 45.7764 -0.896801 -0.131749 -0.422363 0.490491 45 57.5 1 0 +1365 1 1 0 40.757 48.6834 46.4177 -0.924305 -0.131656 -0.358229 0.490491 45 57.5 1 0 +1366 1 1 0 41.4015 49.3424 44.937 -0.859848 -0.0657577 -0.506298 0.490491 45 57.5 1 0 +1367 1 1 0 41.0707 49.3418 45.5463 -0.892927 -0.0658169 -0.445365 0.490491 45 57.5 1 0 +1368 1 1 0 40.7808 49.3401 46.1828 -0.921919 -0.0659886 -0.381722 0.490491 45 57.5 1 0 +1369 1 1 0 40.538 49.3396 46.8322 -0.946198 -0.0660427 -0.316778 0.490491 45 57.5 1 0 +1370 1 1 0 40.3881 48.0166 48.0822 -0.961188 -0.198337 -0.19178 0.490491 45 57.5 1 0 +1371 1 1 0 40.2763 48.0142 48.7727 -0.97237 -0.198581 -0.122729 0.490491 45 57.5 1 0 +1372 1 1 0 40.3361 48.6721 47.7988 -0.966393 -0.132792 -0.220117 0.490491 45 57.5 1 0 +1373 1 1 0 40.2057 48.6674 48.4845 -0.979426 -0.133256 -0.151549 0.490491 45 57.5 1 0 +1374 1 1 0 40.1231 48.6693 49.1776 -0.987688 -0.133071 -0.0822422 0.490491 45 57.5 1 0 +1375 1 1 0 40.3336 49.3343 47.5267 -0.966643 -0.0665668 -0.247326 0.490491 45 57.5 1 0 +1376 1 1 0 40.1852 49.334 48.204 -0.981483 -0.0666046 -0.179596 0.490491 45 57.5 1 0 +1377 1 1 0 40.0835 49.3329 48.8961 -0.991648 -0.0667095 -0.110385 0.490491 45 57.5 1 0 +1378 1 1 0 40.0308 49.3326 49.5875 -0.996917 -0.0667412 -0.0412479 0.490491 45 57.5 1 0 +1379 1 1 0 40.7732 48.0161 46.6939 -0.922682 -0.198387 -0.330606 0.490491 45 57.5 1 0 +1380 1 1 0 40.5218 48.6743 47.1007 -0.947822 -0.13257 -0.289929 0.490491 45 57.5 1 0 +1381 1 1 0 40.5557 48.0091 47.3845 -0.944433 -0.199094 -0.26155 0.490491 45 57.5 1 0 +1382 1 1 0 41.4736 45.5554 52.7469 -0.85264 -0.444464 0.274694 0.490491 45 57.5 1 0 +1383 1 1 0 41.7155 45.5713 53.4285 -0.828447 -0.442867 0.342848 0.490491 45 57.5 1 0 +1384 1 1 0 41.0899 46.1381 52.3868 -0.891007 -0.386187 0.238677 0.490491 45 57.5 1 0 +1385 1 1 0 41.3027 46.1409 53.0766 -0.869725 -0.385906 0.307659 0.490491 45 57.5 1 0 +1386 1 1 0 41.5609 46.1639 53.7504 -0.843912 -0.383614 0.375038 0.490491 45 57.5 1 0 +1387 1 1 0 40.7612 46.7447 52.0119 -0.92388 -0.32553 0.201189 0.490491 45 57.5 1 0 +1388 1 1 0 40.9417 46.7407 52.7063 -0.905832 -0.325929 0.270627 0.490491 45 57.5 1 0 +1389 1 1 0 40.4894 47.3713 51.6246 -0.951057 -0.262865 0.16246 0.490491 45 57.5 1 0 +1390 1 1 0 40.6395 47.3585 52.3245 -0.93605 -0.264151 0.232455 0.490491 45 57.5 1 0 +1391 1 1 0 40.8376 47.3592 53.0126 -0.916244 -0.264082 0.301258 0.490491 45 57.5 1 0 +1392 1 1 0 41.1716 46.7514 53.3921 -0.882837 -0.324863 0.339209 0.490491 45 57.5 1 0 +1393 1 1 0 41.4466 46.7748 54.0543 -0.855337 -0.322525 0.405434 0.490491 45 57.5 1 0 +1394 1 1 0 41.0826 47.3734 53.6852 -0.891742 -0.262661 0.368518 0.490491 45 57.5 1 0 +1395 1 1 0 41.3733 47.4011 54.3389 -0.862669 -0.259892 0.433888 0.490491 45 57.5 1 0 +1396 1 1 0 40.2763 48.0142 51.2273 -0.97237 -0.198581 0.122729 0.490491 45 57.5 1 0 +1397 1 1 0 40.3881 48.0166 51.9178 -0.961188 -0.198337 0.19178 0.490491 45 57.5 1 0 +1398 1 1 0 40.1231 48.6693 50.8224 -0.987688 -0.133071 0.0822422 0.490491 45 57.5 1 0 +1399 1 1 0 40.2057 48.6674 51.5155 -0.979426 -0.133256 0.151549 0.490491 45 57.5 1 0 +1400 1 1 0 40.3361 48.6721 52.2012 -0.966393 -0.132792 0.220117 0.490491 45 57.5 1 0 +1401 1 1 0 40.0308 49.3326 50.4125 -0.996917 -0.0667412 0.0412479 0.490491 45 57.5 1 0 +1402 1 1 0 40.0835 49.3329 51.1039 -0.991648 -0.0667095 0.110385 0.490491 45 57.5 1 0 +1403 1 1 0 40.1852 49.334 51.796 -0.981483 -0.0666046 0.179596 0.490491 45 57.5 1 0 +1404 1 1 0 40.3336 49.3343 52.4733 -0.966643 -0.0665668 0.247326 0.490491 45 57.5 1 0 +1405 1 1 0 41.036 48.0359 53.9735 -0.896401 -0.196412 0.39735 0.490491 45 57.5 1 0 +1406 1 1 0 41.3413 48.0398 54.6027 -0.865871 -0.196015 0.460266 0.490491 45 57.5 1 0 +1407 1 1 0 40.757 48.6834 53.5823 -0.924305 -0.131656 0.358229 0.490491 45 57.5 1 0 +1408 1 1 0 41.032 48.6825 54.2236 -0.896801 -0.131749 0.422363 0.490491 45 57.5 1 0 +1409 1 1 0 41.3507 48.688 54.8444 -0.864929 -0.1312 0.484441 0.490491 45 57.5 1 0 +1410 1 1 0 40.538 49.3396 53.1678 -0.946198 -0.0660427 0.316778 0.490491 45 57.5 1 0 +1411 1 1 0 40.7808 49.3401 53.8172 -0.921919 -0.0659886 0.381722 0.490491 45 57.5 1 0 +1412 1 1 0 41.0707 49.3418 54.4537 -0.892927 -0.0658169 0.445365 0.490491 45 57.5 1 0 +1413 1 1 0 41.4015 49.3424 55.063 -0.859848 -0.0657577 0.506298 0.490491 45 57.5 1 0 +1414 1 1 0 40.5557 48.0091 52.6155 -0.944433 -0.199094 0.26155 0.490491 45 57.5 1 0 +1415 1 1 0 40.5218 48.6743 52.8993 -0.947822 -0.13257 0.289929 0.490491 45 57.5 1 0 +1416 1 1 0 40.7732 48.0161 53.3061 -0.922682 -0.198387 0.330606 0.490491 45 57.5 1 0 +1417 1 1 0 41.3147 45.4574 48.0177 -0.868535 -0.454262 -0.198227 0.490491 45 57.5 1 0 +1418 1 1 0 40.9516 46.0586 48.3899 -0.904839 -0.394136 -0.161007 0.490491 45 57.5 1 0 +1419 1 1 0 40.6487 46.6766 48.772 -0.93513 -0.332342 -0.1228 0.490491 45 57.5 1 0 +1420 1 1 0 40.8702 46.0039 49.1768 -0.912983 -0.399607 -0.0823235 0.490491 45 57.5 1 0 +1421 1 1 0 41.2066 45.3912 48.8024 -0.879344 -0.460882 -0.119755 0.490491 45 57.5 1 0 +1422 1 1 0 41.1524 45.3579 49.587 -0.88476 -0.464213 -0.0412991 0.490491 45 57.5 1 0 +1423 1 1 0 40.3935 47.3448 49.185 -0.960655 -0.265519 -0.081501 0.490491 45 57.5 1 0 +1424 1 1 0 40.2115 47.9963 49.5875 -0.978852 -0.200368 -0.0412506 0.490491 45 57.5 1 0 +1425 1 1 0 40.3614 47.336 50 -0.963861 -0.266405 0 0.490491 45 57.5 1 0 +1426 1 1 0 40.0895 48.6648 50 -0.991046 -0.133524 0 0.490491 45 57.5 1 0 +1427 1 1 0 40.2115 47.9963 50.4125 -0.978852 -0.200368 0.0412506 0.490491 45 57.5 1 0 +1428 1 1 0 40.3935 47.3448 50.815 -0.960655 -0.265519 0.081501 0.490491 45 57.5 1 0 +1429 1 1 0 41.1524 45.3579 50.413 -0.88476 -0.464213 0.0412991 0.490491 45 57.5 1 0 +1430 1 1 0 40.8702 46.0039 50.8232 -0.912983 -0.399607 0.0823235 0.490491 45 57.5 1 0 +1431 1 1 0 41.2066 45.3912 51.1976 -0.879344 -0.460882 0.119755 0.490491 45 57.5 1 0 +1432 1 1 0 40.6487 46.6766 51.228 -0.93513 -0.332342 0.1228 0.490491 45 57.5 1 0 +1433 1 1 0 40.9516 46.0586 51.6101 -0.904839 -0.394136 0.161007 0.490491 45 57.5 1 0 +1434 1 1 0 41.3147 45.4574 51.9823 -0.868535 -0.454262 0.198227 0.490491 45 57.5 1 0 +1435 1 1 0 40.5838 46.6586 49.587 -0.941618 -0.33414 -0.0413021 0.490491 45 57.5 1 0 +1436 1 1 0 40.5838 46.6586 50.413 -0.941618 -0.33414 0.0413021 0.490491 45 57.5 1 0 +1437 1 1 0 40.8391 45.9903 50 -0.916092 -0.400968 0 0.490491 45 57.5 1 0 +1438 1 1 0 55.7206 58.1921 49.5936 0.572055 0.819207 -0.0406403 0.490491 45 57.5 1 0 +1439 1 1 0 55.7206 58.1921 50.4064 0.572055 0.819207 0.0406403 0.490491 45 57.5 1 0 +1440 1 1 0 56.1564 57.8384 49.1891 0.615642 0.783843 -0.081086 0.490491 45 57.5 1 0 +1441 1 1 0 56.1768 57.8643 50 0.617676 0.786433 0 0.490491 45 57.5 1 0 +1442 1 1 0 56.1564 57.8384 50.8109 0.615642 0.783843 0.081086 0.490491 45 57.5 1 0 +1443 1 1 0 56.5628 57.4473 48.7886 0.656282 0.744727 -0.121144 0.490491 45 57.5 1 0 +1444 1 1 0 56.6088 57.4939 49.5936 0.660883 0.749387 -0.0406418 0.490491 45 57.5 1 0 +1445 1 1 0 56.9378 57.0205 48.3938 0.69378 0.702047 -0.160622 0.490491 45 57.5 1 0 +1446 1 1 0 57.0062 57.0897 49.1943 0.700622 0.708969 -0.0805729 0.490491 45 57.5 1 0 +1447 1 1 0 57.0291 57.1128 50 0.702907 0.711282 0 0.490491 45 57.5 1 0 +1448 1 1 0 56.6088 57.4939 50.4064 0.660883 0.749387 0.0406418 0.490491 45 57.5 1 0 +1449 1 1 0 56.5628 57.4473 51.2114 0.656282 0.744727 0.121144 0.490491 45 57.5 1 0 +1450 1 1 0 57.0062 57.0897 50.8057 0.700622 0.708969 0.0805729 0.490491 45 57.5 1 0 +1451 1 1 0 56.9378 57.0205 51.6062 0.69378 0.702047 0.160622 0.490491 45 57.5 1 0 +1452 1 1 0 57.2796 56.5601 48.0067 0.727959 0.656006 -0.199331 0.490491 45 57.5 1 0 +1453 1 1 0 57.3889 56.6284 48.7881 0.738887 0.662842 -0.121192 0.490491 45 57.5 1 0 +1454 1 1 0 57.5865 56.0683 47.6291 0.758652 0.606825 -0.237086 0.490491 45 57.5 1 0 +1455 1 1 0 57.7184 56.1546 48.4039 0.771841 0.615456 -0.159613 0.490491 45 57.5 1 0 +1456 1 1 0 57.802 56.2024 49.1886 0.780205 0.620239 -0.0811417 0.490491 45 57.5 1 0 +1457 1 1 0 57.8572 55.5474 47.2629 0.785715 0.55474 -0.273706 0.490491 45 57.5 1 0 +1458 1 1 0 58.015 55.6451 48.0273 0.801504 0.564513 -0.197274 0.490491 45 57.5 1 0 +1459 1 1 0 58.0902 55 46.9098 0.809017 0.5 -0.309017 0.490491 45 57.5 1 0 +1460 1 1 0 58.2715 55.112 47.6655 0.827147 0.511205 -0.233445 0.490491 45 57.5 1 0 +1461 1 1 0 58.4018 55.1926 48.4357 0.840178 0.519259 -0.156434 0.490491 45 57.5 1 0 +1462 1 1 0 58.1217 55.7114 48.8092 0.81217 0.57114 -0.119078 0.490491 45 57.5 1 0 +1463 1 1 0 58.1752 55.7446 49.5933 0.817523 0.574458 -0.040675 0.490491 45 57.5 1 0 +1464 1 1 0 58.4803 55.2411 49.2154 0.848029 0.52411 -0.0784592 0.490491 45 57.5 1 0 +1465 1 1 0 58.5065 55.2573 50 0.850651 0.525731 0 0.490491 45 57.5 1 0 +1466 1 1 0 57.3889 56.6284 51.2119 0.738887 0.662842 0.121192 0.490491 45 57.5 1 0 +1467 1 1 0 57.2796 56.5601 51.9933 0.727959 0.656006 0.199331 0.490491 45 57.5 1 0 +1468 1 1 0 57.802 56.2024 50.8114 0.780205 0.620239 0.0811417 0.490491 45 57.5 1 0 +1469 1 1 0 57.7184 56.1546 51.5961 0.771841 0.615456 0.159613 0.490491 45 57.5 1 0 +1470 1 1 0 57.5865 56.0683 52.3709 0.758652 0.606825 0.237086 0.490491 45 57.5 1 0 +1471 1 1 0 58.1752 55.7446 50.4067 0.817523 0.574458 0.040675 0.490491 45 57.5 1 0 +1472 1 1 0 58.1217 55.7114 51.1908 0.81217 0.57114 0.119078 0.490491 45 57.5 1 0 +1473 1 1 0 58.4803 55.2411 50.7846 0.848029 0.52411 0.0784592 0.490491 45 57.5 1 0 +1474 1 1 0 58.4018 55.1926 51.5643 0.840178 0.519259 0.156434 0.490491 45 57.5 1 0 +1475 1 1 0 58.015 55.6451 51.9727 0.801504 0.564513 0.197274 0.490491 45 57.5 1 0 +1476 1 1 0 57.8572 55.5474 52.7371 0.785715 0.55474 0.273706 0.490491 45 57.5 1 0 +1477 1 1 0 58.2715 55.112 52.3345 0.827147 0.511205 0.233445 0.490491 45 57.5 1 0 +1478 1 1 0 58.0902 55 53.0902 0.809017 0.5 0.309017 0.490491 45 57.5 1 0 +1479 1 1 0 57.435 56.675 49.5932 0.743496 0.667502 -0.0406769 0.490491 45 57.5 1 0 +1480 1 1 0 57.8279 56.2229 50 0.782786 0.622291 0 0.490491 45 57.5 1 0 +1481 1 1 0 57.435 56.675 50.4068 0.743496 0.667502 0.0406769 0.490491 45 57.5 1 0 +1482 1 1 0 58.2845 54.4287 46.5715 0.828447 0.442867 -0.342848 0.490491 45 57.5 1 0 +1483 1 1 0 58.5264 54.4446 47.2531 0.85264 0.444464 -0.274694 0.490491 45 57.5 1 0 +1484 1 1 0 58.4391 53.8361 46.2496 0.843912 0.383614 -0.375038 0.490491 45 57.5 1 0 +1485 1 1 0 58.6973 53.8591 46.9234 0.869725 0.385906 -0.307659 0.490491 45 57.5 1 0 +1486 1 1 0 58.9101 53.8619 47.6132 0.891007 0.386187 -0.238677 0.490491 45 57.5 1 0 +1487 1 1 0 58.5534 53.2252 45.9457 0.855337 0.322525 -0.405434 0.490491 45 57.5 1 0 +1488 1 1 0 58.8284 53.2486 46.6079 0.882837 0.324863 -0.339209 0.490491 45 57.5 1 0 +1489 1 1 0 58.6267 52.5989 45.6611 0.862669 0.259892 -0.433888 0.490491 45 57.5 1 0 +1490 1 1 0 58.9174 52.6266 46.3148 0.891742 0.262661 -0.368518 0.490491 45 57.5 1 0 +1491 1 1 0 59.1624 52.6408 46.9874 0.916244 0.264082 -0.301258 0.490491 45 57.5 1 0 +1492 1 1 0 59.0583 53.2593 47.2937 0.905832 0.325929 -0.270627 0.490491 45 57.5 1 0 +1493 1 1 0 59.2388 53.2553 47.9881 0.92388 0.32553 -0.201189 0.490491 45 57.5 1 0 +1494 1 1 0 59.3605 52.6415 47.6755 0.93605 0.264151 -0.232455 0.490491 45 57.5 1 0 +1495 1 1 0 59.5106 52.6287 48.3754 0.951057 0.262865 -0.16246 0.490491 45 57.5 1 0 +1496 1 1 0 58.6587 51.9602 45.3973 0.865871 0.196015 -0.460266 0.490491 45 57.5 1 0 +1497 1 1 0 58.964 51.9641 46.0265 0.896401 0.196412 -0.39735 0.490491 45 57.5 1 0 +1498 1 1 0 58.6493 51.312 45.1556 0.864929 0.1312 -0.484441 0.490491 45 57.5 1 0 +1499 1 1 0 58.968 51.3175 45.7764 0.896801 0.131749 -0.422363 0.490491 45 57.5 1 0 +1500 1 1 0 59.243 51.3166 46.4177 0.924305 0.131656 -0.358229 0.490491 45 57.5 1 0 +1501 1 1 0 58.5985 50.6576 44.937 0.859848 0.0657577 -0.506298 0.490491 45 57.5 1 0 +1502 1 1 0 58.9293 50.6582 45.5463 0.892927 0.0658169 -0.445365 0.490491 45 57.5 1 0 +1503 1 1 0 58.8497 50 45.3434 0.884965 0 -0.465657 0.490491 45 57.5 1 0 +1504 1 1 0 59.1504 50 45.9664 0.915043 0 -0.403355 0.490491 45 57.5 1 0 +1505 1 1 0 59.2192 50.6599 46.1828 0.921919 0.0659886 -0.381722 0.490491 45 57.5 1 0 +1506 1 1 0 59.462 50.6604 46.8322 0.946198 0.0660427 -0.316778 0.490491 45 57.5 1 0 +1507 1 1 0 59.4074 50 46.6088 0.940742 0 -0.339122 0.490491 45 57.5 1 0 +1508 1 1 0 59.6194 50 47.2673 0.961938 0 -0.273267 0.490491 45 57.5 1 0 +1509 1 1 0 59.6119 51.9834 48.0822 0.961188 0.198337 -0.19178 0.490491 45 57.5 1 0 +1510 1 1 0 59.7237 51.9858 48.7727 0.97237 0.198581 -0.122729 0.490491 45 57.5 1 0 +1511 1 1 0 59.6639 51.3279 47.7988 0.966393 0.132792 -0.220117 0.490491 45 57.5 1 0 +1512 1 1 0 59.7943 51.3326 48.4845 0.979426 0.133256 -0.151549 0.490491 45 57.5 1 0 +1513 1 1 0 59.8769 51.3307 49.1776 0.987688 0.133071 -0.0822422 0.490491 45 57.5 1 0 +1514 1 1 0 59.6664 50.6657 47.5267 0.966643 0.0665668 -0.247326 0.490491 45 57.5 1 0 +1515 1 1 0 59.8148 50.666 48.204 0.981483 0.0666046 -0.179596 0.490491 45 57.5 1 0 +1516 1 1 0 59.7853 50 47.939 0.97853 0 -0.206103 0.490491 45 57.5 1 0 +1517 1 1 0 59.9044 50 48.6205 0.990439 0 -0.137952 0.490491 45 57.5 1 0 +1518 1 1 0 59.9165 50.6671 48.8961 0.991648 0.0667095 -0.110385 0.490491 45 57.5 1 0 +1519 1 1 0 59.9692 50.6674 49.5875 0.996917 0.0667412 -0.0412479 0.490491 45 57.5 1 0 +1520 1 1 0 59.9761 50 49.3086 0.997607 0 -0.0691418 0.490491 45 57.5 1 0 +1521 1 1 0 60 50 50 1 0 0 0.490491 45 57.5 1 0 +1522 1 1 0 59.2268 51.9839 46.6939 0.922682 0.198387 -0.330606 0.490491 45 57.5 1 0 +1523 1 1 0 59.4782 51.3257 47.1007 0.947822 0.13257 -0.289929 0.490491 45 57.5 1 0 +1524 1 1 0 59.4443 51.9909 47.3845 0.944433 0.199094 -0.26155 0.490491 45 57.5 1 0 +1525 1 1 0 58.5264 54.4446 52.7469 0.85264 0.444464 0.274694 0.490491 45 57.5 1 0 +1526 1 1 0 58.2845 54.4287 53.4285 0.828447 0.442867 0.342848 0.490491 45 57.5 1 0 +1527 1 1 0 58.9101 53.8619 52.3868 0.891007 0.386187 0.238677 0.490491 45 57.5 1 0 +1528 1 1 0 58.6973 53.8591 53.0766 0.869725 0.385906 0.307659 0.490491 45 57.5 1 0 +1529 1 1 0 58.4391 53.8361 53.7504 0.843912 0.383614 0.375038 0.490491 45 57.5 1 0 +1530 1 1 0 59.2388 53.2553 52.0119 0.92388 0.32553 0.201189 0.490491 45 57.5 1 0 +1531 1 1 0 59.0583 53.2593 52.7063 0.905832 0.325929 0.270627 0.490491 45 57.5 1 0 +1532 1 1 0 59.5106 52.6287 51.6246 0.951057 0.262865 0.16246 0.490491 45 57.5 1 0 +1533 1 1 0 59.3605 52.6415 52.3245 0.93605 0.264151 0.232455 0.490491 45 57.5 1 0 +1534 1 1 0 59.1624 52.6408 53.0126 0.916244 0.264082 0.301258 0.490491 45 57.5 1 0 +1535 1 1 0 58.8284 53.2486 53.3921 0.882837 0.324863 0.339209 0.490491 45 57.5 1 0 +1536 1 1 0 58.5534 53.2252 54.0543 0.855337 0.322525 0.405434 0.490491 45 57.5 1 0 +1537 1 1 0 58.9174 52.6266 53.6852 0.891742 0.262661 0.368518 0.490491 45 57.5 1 0 +1538 1 1 0 58.6267 52.5989 54.3389 0.862669 0.259892 0.433888 0.490491 45 57.5 1 0 +1539 1 1 0 59.7237 51.9858 51.2273 0.97237 0.198581 0.122729 0.490491 45 57.5 1 0 +1540 1 1 0 59.6119 51.9834 51.9178 0.961188 0.198337 0.19178 0.490491 45 57.5 1 0 +1541 1 1 0 59.8769 51.3307 50.8224 0.987688 0.133071 0.0822422 0.490491 45 57.5 1 0 +1542 1 1 0 59.7943 51.3326 51.5155 0.979426 0.133256 0.151549 0.490491 45 57.5 1 0 +1543 1 1 0 59.6639 51.3279 52.2012 0.966393 0.132792 0.220117 0.490491 45 57.5 1 0 +1544 1 1 0 59.9692 50.6674 50.4125 0.996917 0.0667412 0.0412479 0.490491 45 57.5 1 0 +1545 1 1 0 59.9165 50.6671 51.1039 0.991648 0.0667095 0.110385 0.490491 45 57.5 1 0 +1546 1 1 0 59.9761 50 50.6914 0.997607 0 0.0691418 0.490491 45 57.5 1 0 +1547 1 1 0 59.9044 50 51.3795 0.990439 0 0.137952 0.490491 45 57.5 1 0 +1548 1 1 0 59.8148 50.666 51.796 0.981483 0.0666046 0.179596 0.490491 45 57.5 1 0 +1549 1 1 0 59.6664 50.6657 52.4733 0.966643 0.0665668 0.247326 0.490491 45 57.5 1 0 +1550 1 1 0 59.7853 50 52.061 0.97853 0 0.206103 0.490491 45 57.5 1 0 +1551 1 1 0 59.6194 50 52.7327 0.961938 0 0.273267 0.490491 45 57.5 1 0 +1552 1 1 0 58.964 51.9641 53.9735 0.896401 0.196412 0.39735 0.490491 45 57.5 1 0 +1553 1 1 0 58.6587 51.9602 54.6027 0.865871 0.196015 0.460266 0.490491 45 57.5 1 0 +1554 1 1 0 59.243 51.3166 53.5823 0.924305 0.131656 0.358229 0.490491 45 57.5 1 0 +1555 1 1 0 58.968 51.3175 54.2236 0.896801 0.131749 0.422363 0.490491 45 57.5 1 0 +1556 1 1 0 58.6493 51.312 54.8444 0.864929 0.1312 0.484441 0.490491 45 57.5 1 0 +1557 1 1 0 59.462 50.6604 53.1678 0.946198 0.0660427 0.316778 0.490491 45 57.5 1 0 +1558 1 1 0 59.2192 50.6599 53.8172 0.921919 0.0659886 0.381722 0.490491 45 57.5 1 0 +1559 1 1 0 59.4074 50 53.3912 0.940742 0 0.339122 0.490491 45 57.5 1 0 +1560 1 1 0 59.1504 50 54.0336 0.915043 0 0.403355 0.490491 45 57.5 1 0 +1561 1 1 0 58.9293 50.6582 54.4537 0.892927 0.0658169 0.445365 0.490491 45 57.5 1 0 +1562 1 1 0 58.5985 50.6576 55.063 0.859848 0.0657577 0.506298 0.490491 45 57.5 1 0 +1563 1 1 0 58.8497 50 54.6566 0.884965 0 0.465657 0.490491 45 57.5 1 0 +1564 1 1 0 59.4443 51.9909 52.6155 0.944433 0.199094 0.26155 0.490491 45 57.5 1 0 +1565 1 1 0 59.4782 51.3257 52.8993 0.947822 0.13257 0.289929 0.490491 45 57.5 1 0 +1566 1 1 0 59.2268 51.9839 53.3061 0.922682 0.198387 0.330606 0.490491 45 57.5 1 0 +1567 1 1 0 58.6853 54.5426 48.0177 0.868535 0.454262 -0.198227 0.490491 45 57.5 1 0 +1568 1 1 0 59.0484 53.9414 48.3899 0.904839 0.394136 -0.161007 0.490491 45 57.5 1 0 +1569 1 1 0 59.3513 53.3234 48.772 0.93513 0.332342 -0.1228 0.490491 45 57.5 1 0 +1570 1 1 0 59.1298 53.9961 49.1768 0.912983 0.399607 -0.0823235 0.490491 45 57.5 1 0 +1571 1 1 0 58.7934 54.6088 48.8024 0.879344 0.460882 -0.119755 0.490491 45 57.5 1 0 +1572 1 1 0 58.8476 54.6421 49.587 0.88476 0.464213 -0.0412991 0.490491 45 57.5 1 0 +1573 1 1 0 59.6065 52.6552 49.185 0.960655 0.265519 -0.081501 0.490491 45 57.5 1 0 +1574 1 1 0 59.7885 52.0037 49.5875 0.978852 0.200368 -0.0412506 0.490491 45 57.5 1 0 +1575 1 1 0 59.6386 52.664 50 0.963861 0.266405 0 0.490491 45 57.5 1 0 +1576 1 1 0 59.9105 51.3352 50 0.991046 0.133524 0 0.490491 45 57.5 1 0 +1577 1 1 0 59.7885 52.0037 50.4125 0.978852 0.200368 0.0412506 0.490491 45 57.5 1 0 +1578 1 1 0 59.6065 52.6552 50.815 0.960655 0.265519 0.081501 0.490491 45 57.5 1 0 +1579 1 1 0 58.8476 54.6421 50.413 0.88476 0.464213 0.0412991 0.490491 45 57.5 1 0 +1580 1 1 0 59.1298 53.9961 50.8232 0.912983 0.399607 0.0823235 0.490491 45 57.5 1 0 +1581 1 1 0 58.7934 54.6088 51.1976 0.879344 0.460882 0.119755 0.490491 45 57.5 1 0 +1582 1 1 0 59.3513 53.3234 51.228 0.93513 0.332342 0.1228 0.490491 45 57.5 1 0 +1583 1 1 0 59.0484 53.9414 51.6101 0.904839 0.394136 0.161007 0.490491 45 57.5 1 0 +1584 1 1 0 58.6853 54.5426 51.9823 0.868535 0.454262 0.198227 0.490491 45 57.5 1 0 +1585 1 1 0 59.4162 53.3414 49.587 0.941618 0.33414 -0.0413021 0.490491 45 57.5 1 0 +1586 1 1 0 59.4162 53.3414 50.413 0.941618 0.33414 0.0413021 0.490491 45 57.5 1 0 +1587 1 1 0 59.1609 54.0097 50 0.916092 0.400968 0 0.490491 45 57.5 1 0 +1588 1 1 0 55.7206 41.8079 50.4064 0.572055 -0.819207 0.0406403 0.490491 45 57.5 1 0 +1589 1 1 0 55.7206 41.8079 49.5936 0.572055 -0.819207 -0.0406403 0.490491 45 57.5 1 0 +1590 1 1 0 56.1564 42.1616 50.8109 0.615642 -0.783843 0.081086 0.490491 45 57.5 1 0 +1591 1 1 0 56.1768 42.1357 50 0.617676 -0.786433 0 0.490491 45 57.5 1 0 +1592 1 1 0 56.1564 42.1616 49.1891 0.615642 -0.783843 -0.081086 0.490491 45 57.5 1 0 +1593 1 1 0 56.5628 42.5527 51.2114 0.656282 -0.744727 0.121144 0.490491 45 57.5 1 0 +1594 1 1 0 56.6088 42.5061 50.4064 0.660883 -0.749387 0.0406418 0.490491 45 57.5 1 0 +1595 1 1 0 56.9378 42.9795 51.6062 0.69378 -0.702047 0.160622 0.490491 45 57.5 1 0 +1596 1 1 0 57.0062 42.9103 50.8057 0.700622 -0.708969 0.0805729 0.490491 45 57.5 1 0 +1597 1 1 0 57.0291 42.8872 50 0.702907 -0.711282 0 0.490491 45 57.5 1 0 +1598 1 1 0 56.6088 42.5061 49.5936 0.660883 -0.749387 -0.0406418 0.490491 45 57.5 1 0 +1599 1 1 0 56.5628 42.5527 48.7886 0.656282 -0.744727 -0.121144 0.490491 45 57.5 1 0 +1600 1 1 0 57.0062 42.9103 49.1943 0.700622 -0.708969 -0.0805729 0.490491 45 57.5 1 0 +1601 1 1 0 56.9378 42.9795 48.3938 0.69378 -0.702047 -0.160622 0.490491 45 57.5 1 0 +1602 1 1 0 57.2796 43.4399 51.9933 0.727959 -0.656006 0.199331 0.490491 45 57.5 1 0 +1603 1 1 0 57.3889 43.3716 51.2119 0.738887 -0.662842 0.121192 0.490491 45 57.5 1 0 +1604 1 1 0 57.5865 43.9317 52.3709 0.758652 -0.606825 0.237086 0.490491 45 57.5 1 0 +1605 1 1 0 57.7184 43.8454 51.5961 0.771841 -0.615456 0.159613 0.490491 45 57.5 1 0 +1606 1 1 0 57.802 43.7976 50.8114 0.780205 -0.620239 0.0811417 0.490491 45 57.5 1 0 +1607 1 1 0 57.8572 44.4526 52.7371 0.785715 -0.55474 0.273706 0.490491 45 57.5 1 0 +1608 1 1 0 58.015 44.3549 51.9727 0.801504 -0.564513 0.197274 0.490491 45 57.5 1 0 +1609 1 1 0 58.0902 45 53.0902 0.809017 -0.5 0.309017 0.490491 45 57.5 1 0 +1610 1 1 0 58.2715 44.888 52.3345 0.827147 -0.511205 0.233445 0.490491 45 57.5 1 0 +1611 1 1 0 58.4018 44.8074 51.5643 0.840178 -0.519259 0.156434 0.490491 45 57.5 1 0 +1612 1 1 0 58.1217 44.2886 51.1908 0.81217 -0.57114 0.119078 0.490491 45 57.5 1 0 +1613 1 1 0 58.1752 44.2554 50.4067 0.817523 -0.574458 0.040675 0.490491 45 57.5 1 0 +1614 1 1 0 58.4803 44.7589 50.7846 0.848029 -0.52411 0.0784592 0.490491 45 57.5 1 0 +1615 1 1 0 58.5065 44.7427 50 0.850651 -0.525731 0 0.490491 45 57.5 1 0 +1616 1 1 0 57.3889 43.3716 48.7881 0.738887 -0.662842 -0.121192 0.490491 45 57.5 1 0 +1617 1 1 0 57.2796 43.4399 48.0067 0.727959 -0.656006 -0.199331 0.490491 45 57.5 1 0 +1618 1 1 0 57.802 43.7976 49.1886 0.780205 -0.620239 -0.0811417 0.490491 45 57.5 1 0 +1619 1 1 0 57.7184 43.8454 48.4039 0.771841 -0.615456 -0.159613 0.490491 45 57.5 1 0 +1620 1 1 0 57.5865 43.9317 47.6291 0.758652 -0.606825 -0.237086 0.490491 45 57.5 1 0 +1621 1 1 0 58.1752 44.2554 49.5933 0.817523 -0.574458 -0.040675 0.490491 45 57.5 1 0 +1622 1 1 0 58.1217 44.2886 48.8092 0.81217 -0.57114 -0.119078 0.490491 45 57.5 1 0 +1623 1 1 0 58.4803 44.7589 49.2154 0.848029 -0.52411 -0.0784592 0.490491 45 57.5 1 0 +1624 1 1 0 58.4018 44.8074 48.4357 0.840178 -0.519259 -0.156434 0.490491 45 57.5 1 0 +1625 1 1 0 58.015 44.3549 48.0273 0.801504 -0.564513 -0.197274 0.490491 45 57.5 1 0 +1626 1 1 0 57.8572 44.4526 47.2629 0.785715 -0.55474 -0.273706 0.490491 45 57.5 1 0 +1627 1 1 0 58.2715 44.888 47.6655 0.827147 -0.511205 -0.233445 0.490491 45 57.5 1 0 +1628 1 1 0 58.0902 45 46.9098 0.809017 -0.5 -0.309017 0.490491 45 57.5 1 0 +1629 1 1 0 57.435 43.325 50.4068 0.743496 -0.667502 0.0406769 0.490491 45 57.5 1 0 +1630 1 1 0 57.8279 43.7771 50 0.782786 -0.622291 0 0.490491 45 57.5 1 0 +1631 1 1 0 57.435 43.325 49.5932 0.743496 -0.667502 -0.0406769 0.490491 45 57.5 1 0 +1632 1 1 0 58.2845 45.5713 53.4285 0.828447 -0.442867 0.342848 0.490491 45 57.5 1 0 +1633 1 1 0 58.5264 45.5554 52.7469 0.85264 -0.444464 0.274694 0.490491 45 57.5 1 0 +1634 1 1 0 58.4391 46.1639 53.7504 0.843912 -0.383614 0.375038 0.490491 45 57.5 1 0 +1635 1 1 0 58.6973 46.1409 53.0766 0.869725 -0.385906 0.307659 0.490491 45 57.5 1 0 +1636 1 1 0 58.9101 46.1381 52.3868 0.891007 -0.386187 0.238677 0.490491 45 57.5 1 0 +1637 1 1 0 58.5534 46.7748 54.0543 0.855337 -0.322525 0.405434 0.490491 45 57.5 1 0 +1638 1 1 0 58.8284 46.7514 53.3921 0.882837 -0.324863 0.339209 0.490491 45 57.5 1 0 +1639 1 1 0 58.6267 47.4011 54.3389 0.862669 -0.259892 0.433888 0.490491 45 57.5 1 0 +1640 1 1 0 58.9174 47.3734 53.6852 0.891742 -0.262661 0.368518 0.490491 45 57.5 1 0 +1641 1 1 0 59.1624 47.3592 53.0126 0.916244 -0.264082 0.301258 0.490491 45 57.5 1 0 +1642 1 1 0 59.0583 46.7407 52.7063 0.905832 -0.325929 0.270627 0.490491 45 57.5 1 0 +1643 1 1 0 59.2388 46.7447 52.0119 0.92388 -0.32553 0.201189 0.490491 45 57.5 1 0 +1644 1 1 0 59.3605 47.3585 52.3245 0.93605 -0.264151 0.232455 0.490491 45 57.5 1 0 +1645 1 1 0 59.5106 47.3713 51.6246 0.951057 -0.262865 0.16246 0.490491 45 57.5 1 0 +1646 1 1 0 58.6587 48.0398 54.6027 0.865871 -0.196015 0.460266 0.490491 45 57.5 1 0 +1647 1 1 0 58.964 48.0359 53.9735 0.896401 -0.196412 0.39735 0.490491 45 57.5 1 0 +1648 1 1 0 58.6493 48.688 54.8444 0.864929 -0.1312 0.484441 0.490491 45 57.5 1 0 +1649 1 1 0 58.968 48.6825 54.2236 0.896801 -0.131749 0.422363 0.490491 45 57.5 1 0 +1650 1 1 0 59.243 48.6834 53.5823 0.924305 -0.131656 0.358229 0.490491 45 57.5 1 0 +1651 1 1 0 58.5985 49.3424 55.063 0.859848 -0.0657577 0.506298 0.490491 45 57.5 1 0 +1652 1 1 0 58.9293 49.3418 54.4537 0.892927 -0.0658169 0.445365 0.490491 45 57.5 1 0 +1653 1 1 0 59.2192 49.3401 53.8172 0.921919 -0.0659886 0.381722 0.490491 45 57.5 1 0 +1654 1 1 0 59.462 49.3396 53.1678 0.946198 -0.0660427 0.316778 0.490491 45 57.5 1 0 +1655 1 1 0 59.6119 48.0166 51.9178 0.961188 -0.198337 0.19178 0.490491 45 57.5 1 0 +1656 1 1 0 59.7237 48.0142 51.2273 0.97237 -0.198581 0.122729 0.490491 45 57.5 1 0 +1657 1 1 0 59.6639 48.6721 52.2012 0.966393 -0.132792 0.220117 0.490491 45 57.5 1 0 +1658 1 1 0 59.7943 48.6674 51.5155 0.979426 -0.133256 0.151549 0.490491 45 57.5 1 0 +1659 1 1 0 59.8769 48.6693 50.8224 0.987688 -0.133071 0.0822422 0.490491 45 57.5 1 0 +1660 1 1 0 59.6664 49.3343 52.4733 0.966643 -0.0665668 0.247326 0.490491 45 57.5 1 0 +1661 1 1 0 59.8148 49.334 51.796 0.981483 -0.0666046 0.179596 0.490491 45 57.5 1 0 +1662 1 1 0 59.9165 49.3329 51.1039 0.991648 -0.0667095 0.110385 0.490491 45 57.5 1 0 +1663 1 1 0 59.9692 49.3326 50.4125 0.996917 -0.0667412 0.0412479 0.490491 45 57.5 1 0 +1664 1 1 0 59.2268 48.0161 53.3061 0.922682 -0.198387 0.330606 0.490491 45 57.5 1 0 +1665 1 1 0 59.4782 48.6743 52.8993 0.947822 -0.13257 0.289929 0.490491 45 57.5 1 0 +1666 1 1 0 59.4443 48.0091 52.6155 0.944433 -0.199094 0.26155 0.490491 45 57.5 1 0 +1667 1 1 0 58.5264 45.5554 47.2531 0.85264 -0.444464 -0.274694 0.490491 45 57.5 1 0 +1668 1 1 0 58.2845 45.5713 46.5715 0.828447 -0.442867 -0.342848 0.490491 45 57.5 1 0 +1669 1 1 0 58.9101 46.1381 47.6132 0.891007 -0.386187 -0.238677 0.490491 45 57.5 1 0 +1670 1 1 0 58.6973 46.1409 46.9234 0.869725 -0.385906 -0.307659 0.490491 45 57.5 1 0 +1671 1 1 0 58.4391 46.1639 46.2496 0.843912 -0.383614 -0.375038 0.490491 45 57.5 1 0 +1672 1 1 0 59.2388 46.7447 47.9881 0.92388 -0.32553 -0.201189 0.490491 45 57.5 1 0 +1673 1 1 0 59.0583 46.7407 47.2937 0.905832 -0.325929 -0.270627 0.490491 45 57.5 1 0 +1674 1 1 0 59.5106 47.3713 48.3754 0.951057 -0.262865 -0.16246 0.490491 45 57.5 1 0 +1675 1 1 0 59.3605 47.3585 47.6755 0.93605 -0.264151 -0.232455 0.490491 45 57.5 1 0 +1676 1 1 0 59.1624 47.3592 46.9874 0.916244 -0.264082 -0.301258 0.490491 45 57.5 1 0 +1677 1 1 0 58.8284 46.7514 46.6079 0.882837 -0.324863 -0.339209 0.490491 45 57.5 1 0 +1678 1 1 0 58.5534 46.7748 45.9457 0.855337 -0.322525 -0.405434 0.490491 45 57.5 1 0 +1679 1 1 0 58.9174 47.3734 46.3148 0.891742 -0.262661 -0.368518 0.490491 45 57.5 1 0 +1680 1 1 0 58.6267 47.4011 45.6611 0.862669 -0.259892 -0.433888 0.490491 45 57.5 1 0 +1681 1 1 0 59.7237 48.0142 48.7727 0.97237 -0.198581 -0.122729 0.490491 45 57.5 1 0 +1682 1 1 0 59.6119 48.0166 48.0822 0.961188 -0.198337 -0.19178 0.490491 45 57.5 1 0 +1683 1 1 0 59.8769 48.6693 49.1776 0.987688 -0.133071 -0.0822422 0.490491 45 57.5 1 0 +1684 1 1 0 59.7943 48.6674 48.4845 0.979426 -0.133256 -0.151549 0.490491 45 57.5 1 0 +1685 1 1 0 59.6639 48.6721 47.7988 0.966393 -0.132792 -0.220117 0.490491 45 57.5 1 0 +1686 1 1 0 59.9692 49.3326 49.5875 0.996917 -0.0667412 -0.0412479 0.490491 45 57.5 1 0 +1687 1 1 0 59.9165 49.3329 48.8961 0.991648 -0.0667095 -0.110385 0.490491 45 57.5 1 0 +1688 1 1 0 59.8148 49.334 48.204 0.981483 -0.0666046 -0.179596 0.490491 45 57.5 1 0 +1689 1 1 0 59.6664 49.3343 47.5267 0.966643 -0.0665668 -0.247326 0.490491 45 57.5 1 0 +1690 1 1 0 58.964 48.0359 46.0265 0.896401 -0.196412 -0.39735 0.490491 45 57.5 1 0 +1691 1 1 0 58.6587 48.0398 45.3973 0.865871 -0.196015 -0.460266 0.490491 45 57.5 1 0 +1692 1 1 0 59.243 48.6834 46.4177 0.924305 -0.131656 -0.358229 0.490491 45 57.5 1 0 +1693 1 1 0 58.968 48.6825 45.7764 0.896801 -0.131749 -0.422363 0.490491 45 57.5 1 0 +1694 1 1 0 58.6493 48.688 45.1556 0.864929 -0.1312 -0.484441 0.490491 45 57.5 1 0 +1695 1 1 0 59.462 49.3396 46.8322 0.946198 -0.0660427 -0.316778 0.490491 45 57.5 1 0 +1696 1 1 0 59.2192 49.3401 46.1828 0.921919 -0.0659886 -0.381722 0.490491 45 57.5 1 0 +1697 1 1 0 58.9293 49.3418 45.5463 0.892927 -0.0658169 -0.445365 0.490491 45 57.5 1 0 +1698 1 1 0 58.5985 49.3424 44.937 0.859848 -0.0657577 -0.506298 0.490491 45 57.5 1 0 +1699 1 1 0 59.4443 48.0091 47.3845 0.944433 -0.199094 -0.26155 0.490491 45 57.5 1 0 +1700 1 1 0 59.4782 48.6743 47.1007 0.947822 -0.13257 -0.289929 0.490491 45 57.5 1 0 +1701 1 1 0 59.2268 48.0161 46.6939 0.922682 -0.198387 -0.330606 0.490491 45 57.5 1 0 +1702 1 1 0 58.6853 45.4574 51.9823 0.868535 -0.454262 0.198227 0.490491 45 57.5 1 0 +1703 1 1 0 59.0484 46.0586 51.6101 0.904839 -0.394136 0.161007 0.490491 45 57.5 1 0 +1704 1 1 0 59.3513 46.6766 51.228 0.93513 -0.332342 0.1228 0.490491 45 57.5 1 0 +1705 1 1 0 59.1298 46.0039 50.8232 0.912983 -0.399607 0.0823235 0.490491 45 57.5 1 0 +1706 1 1 0 58.7934 45.3912 51.1976 0.879344 -0.460882 0.119755 0.490491 45 57.5 1 0 +1707 1 1 0 58.8476 45.3579 50.413 0.88476 -0.464213 0.0412991 0.490491 45 57.5 1 0 +1708 1 1 0 59.6065 47.3448 50.815 0.960655 -0.265519 0.081501 0.490491 45 57.5 1 0 +1709 1 1 0 59.7885 47.9963 50.4125 0.978852 -0.200368 0.0412506 0.490491 45 57.5 1 0 +1710 1 1 0 59.6386 47.336 50 0.963861 -0.266405 0 0.490491 45 57.5 1 0 +1711 1 1 0 59.9105 48.6648 50 0.991046 -0.133524 0 0.490491 45 57.5 1 0 +1712 1 1 0 59.7885 47.9963 49.5875 0.978852 -0.200368 -0.0412506 0.490491 45 57.5 1 0 +1713 1 1 0 59.6065 47.3448 49.185 0.960655 -0.265519 -0.081501 0.490491 45 57.5 1 0 +1714 1 1 0 58.8476 45.3579 49.587 0.88476 -0.464213 -0.0412991 0.490491 45 57.5 1 0 +1715 1 1 0 59.1298 46.0039 49.1768 0.912983 -0.399607 -0.0823235 0.490491 45 57.5 1 0 +1716 1 1 0 58.7934 45.3912 48.8024 0.879344 -0.460882 -0.119755 0.490491 45 57.5 1 0 +1717 1 1 0 59.3513 46.6766 48.772 0.93513 -0.332342 -0.1228 0.490491 45 57.5 1 0 +1718 1 1 0 59.0484 46.0586 48.3899 0.904839 -0.394136 -0.161007 0.490491 45 57.5 1 0 +1719 1 1 0 58.6853 45.4574 48.0177 0.868535 -0.454262 -0.198227 0.490491 45 57.5 1 0 +1720 1 1 0 59.4162 46.6586 50.413 0.941618 -0.33414 0.0413021 0.490491 45 57.5 1 0 +1721 1 1 0 59.4162 46.6586 49.587 0.941618 -0.33414 -0.0413021 0.490491 45 57.5 1 0 +1722 1 1 0 59.1609 45.9903 50 0.916092 -0.400968 0 0.490491 45 57.5 1 0 +1723 1 1 0 48.9351 55.5186 58.2711 -0.106494 0.551859 0.82711 0.490491 45 57.5 1 0 +1724 1 1 0 48.2747 55.2913 58.3081 -0.172532 0.529135 0.830812 0.490491 45 57.5 1 0 +1725 1 1 0 47.6277 55.0421 58.3036 -0.237228 0.504209 0.830359 0.490491 45 57.5 1 0 +1726 1 1 0 47.8698 55.7125 57.9265 -0.213023 0.571251 0.79265 0.490491 45 57.5 1 0 +1727 1 1 0 48.5259 55.949 57.9017 -0.147413 0.594895 0.79017 0.490491 45 57.5 1 0 +1728 1 1 0 48.1257 56.3458 57.4979 -0.187432 0.634579 0.749786 0.490491 45 57.5 1 0 +1729 1 1 0 46.962 54.7623 58.2518 -0.303801 0.476225 0.825175 0.490491 45 57.5 1 0 +1730 1 1 0 46.3397 54.4698 58.1623 -0.366027 0.446977 0.816233 0.490491 45 57.5 1 0 +1731 1 1 0 46.5385 55.1612 57.8345 -0.346153 0.516122 0.783452 0.490491 45 57.5 1 0 +1732 1 1 0 45.7287 54.156 58.0302 -0.427135 0.415597 0.803016 0.490491 45 57.5 1 0 +1733 1 1 0 45.1429 53.8268 57.859 -0.485712 0.382683 0.785899 0.490491 45 57.5 1 0 +1734 1 1 0 45.3157 54.5399 57.5794 -0.46843 0.45399 0.757936 0.490491 45 57.5 1 0 +1735 1 1 0 45.9171 54.8624 57.7258 -0.408286 0.48624 0.772575 0.490491 45 57.5 1 0 +1736 1 1 0 46.1327 55.5337 57.3771 -0.38673 0.553372 0.737712 0.490491 45 57.5 1 0 +1737 1 1 0 45.5174 55.225 57.253 -0.448259 0.522499 0.725299 0.490491 45 57.5 1 0 +1738 1 1 0 45.7467 55.8779 56.8819 -0.425325 0.587785 0.688191 0.490491 45 57.5 1 0 +1739 1 1 0 47.711 56.7232 57.0398 -0.228899 0.672319 0.703983 0.490491 45 57.5 1 0 +1740 1 1 0 47.04 56.4741 57.0231 -0.296004 0.647412 0.70231 0.490491 45 57.5 1 0 +1741 1 1 0 47.3262 57.0524 56.5662 -0.267381 0.705236 0.65662 0.490491 45 57.5 1 0 +1742 1 1 0 46.3841 56.1919 56.9704 -0.361591 0.619186 0.697037 0.490491 45 57.5 1 0 +1743 1 1 0 46.6531 56.7891 56.535 -0.334691 0.678913 0.653497 0.490491 45 57.5 1 0 +1744 1 1 0 46.0023 56.4945 56.4684 -0.399769 0.649448 0.64684 0.490491 45 57.5 1 0 +1745 1 1 0 46.2825 57.0711 56.015 -0.371748 0.707107 0.601501 0.490491 45 57.5 1 0 +1746 1 1 0 46.9479 57.3479 56.0574 -0.305212 0.734794 0.605742 0.490491 45 57.5 1 0 +1747 1 1 0 46.5857 57.6041 55.5245 -0.341435 0.760406 0.552454 0.490491 45 57.5 1 0 +1748 1 1 0 47.1968 55.4511 57.9011 -0.280319 0.545109 0.790112 0.490491 45 57.5 1 0 +1749 1 1 0 46.7786 55.8369 57.4534 -0.322141 0.583692 0.745339 0.490491 45 57.5 1 0 +1750 1 1 0 47.4482 56.1093 57.4944 -0.25518 0.610926 0.749435 0.490491 45 57.5 1 0 +1751 1 1 0 44.4755 53.4143 57.6041 -0.552454 0.341435 0.760406 0.490491 45 57.5 1 0 +1752 1 1 0 43.9426 53.0521 57.3479 -0.605742 0.305212 0.734794 0.490491 45 57.5 1 0 +1753 1 1 0 43.985 53.7175 57.0711 -0.601501 0.371748 0.707107 0.490491 45 57.5 1 0 +1754 1 1 0 43.4338 52.6738 57.0524 -0.65662 0.267381 0.705236 0.490491 45 57.5 1 0 +1755 1 1 0 42.9602 52.289 56.7232 -0.703983 0.228899 0.672319 0.490491 45 57.5 1 0 +1756 1 1 0 42.9769 52.96 56.4741 -0.70231 0.296004 0.647412 0.490491 45 57.5 1 0 +1757 1 1 0 43.465 53.3469 56.7891 -0.653497 0.334691 0.678913 0.490491 45 57.5 1 0 +1758 1 1 0 43.5316 53.9977 56.4945 -0.64684 0.399769 0.649448 0.490491 45 57.5 1 0 +1759 1 1 0 43.0296 53.6159 56.1919 -0.697037 0.361591 0.619186 0.490491 45 57.5 1 0 +1760 1 1 0 43.1181 54.2533 55.8779 -0.688191 0.425325 0.587785 0.490491 45 57.5 1 0 +1761 1 1 0 42.5021 51.8743 56.3458 -0.749786 0.187432 0.634579 0.490491 45 57.5 1 0 +1762 1 1 0 42.0983 51.4741 55.949 -0.79017 0.147413 0.594895 0.490491 45 57.5 1 0 +1763 1 1 0 42.0735 52.1302 55.7125 -0.79265 0.213023 0.571251 0.490491 45 57.5 1 0 +1764 1 1 0 41.7289 51.0649 55.5186 -0.82711 0.106494 0.551859 0.490491 45 57.5 1 0 +1765 1 1 0 41.6919 51.7253 55.2913 -0.830812 0.172532 0.529135 0.490491 45 57.5 1 0 +1766 1 1 0 41.6964 52.3723 55.0421 -0.830359 0.237228 0.504209 0.490491 45 57.5 1 0 +1767 1 1 0 42.6229 53.8673 55.5337 -0.737712 0.38673 0.553372 0.490491 45 57.5 1 0 +1768 1 1 0 42.747 54.4826 55.225 -0.725299 0.448259 0.522499 0.490491 45 57.5 1 0 +1769 1 1 0 42.1655 53.4615 55.1612 -0.783452 0.346153 0.516122 0.490491 45 57.5 1 0 +1770 1 1 0 42.2742 54.0829 54.8624 -0.772575 0.408286 0.48624 0.490491 45 57.5 1 0 +1771 1 1 0 42.4206 54.6843 54.5399 -0.757936 0.46843 0.45399 0.490491 45 57.5 1 0 +1772 1 1 0 41.7482 53.038 54.7623 -0.825175 0.303801 0.476225 0.490491 45 57.5 1 0 +1773 1 1 0 41.8377 53.6603 54.4698 -0.816233 0.366027 0.446977 0.490491 45 57.5 1 0 +1774 1 1 0 41.9698 54.2713 54.156 -0.803016 0.427135 0.415597 0.490491 45 57.5 1 0 +1775 1 1 0 42.141 54.8571 53.8268 -0.785899 0.485712 0.382683 0.490491 45 57.5 1 0 +1776 1 1 0 42.5056 52.5518 56.1093 -0.749435 0.25518 0.610926 0.490491 45 57.5 1 0 +1777 1 1 0 42.0989 52.8032 55.4511 -0.790112 0.280319 0.545109 0.490491 45 57.5 1 0 +1778 1 1 0 42.5466 53.2214 55.8369 -0.745339 0.322141 0.583692 0.490491 45 57.5 1 0 +1779 1 1 0 46.1732 57.859 54.8571 -0.382683 0.785899 0.485712 0.490491 45 57.5 1 0 +1780 1 1 0 45.4601 57.5794 54.6843 -0.45399 0.757936 0.46843 0.490491 45 57.5 1 0 +1781 1 1 0 45.844 58.0302 54.2713 -0.415597 0.803016 0.427135 0.490491 45 57.5 1 0 +1782 1 1 0 44.775 57.253 54.4826 -0.522499 0.725299 0.448259 0.490491 45 57.5 1 0 +1783 1 1 0 45.1376 57.7258 54.0829 -0.48624 0.772575 0.408286 0.490491 45 57.5 1 0 +1784 1 1 0 44.1221 56.8819 54.2533 -0.587785 0.688191 0.425325 0.490491 45 57.5 1 0 +1785 1 1 0 44.4663 57.3771 53.8673 -0.553372 0.737712 0.38673 0.490491 45 57.5 1 0 +1786 1 1 0 44.8388 57.8345 53.4615 -0.516122 0.783452 0.346153 0.490491 45 57.5 1 0 +1787 1 1 0 45.5302 58.1623 53.6603 -0.446977 0.816233 0.366027 0.490491 45 57.5 1 0 +1788 1 1 0 45.2377 58.2518 53.038 -0.476225 0.825175 0.303801 0.490491 45 57.5 1 0 +1789 1 1 0 43.5055 56.4684 53.9977 -0.649448 0.64684 0.399769 0.490491 45 57.5 1 0 +1790 1 1 0 43.8081 56.9704 53.6159 -0.619186 0.697037 0.361591 0.490491 45 57.5 1 0 +1791 1 1 0 42.9289 56.015 53.7175 -0.707107 0.601501 0.371748 0.490491 45 57.5 1 0 +1792 1 1 0 43.2109 56.535 53.3469 -0.678913 0.653497 0.334691 0.490491 45 57.5 1 0 +1793 1 1 0 43.5259 57.0231 52.96 -0.647412 0.70231 0.296004 0.490491 45 57.5 1 0 +1794 1 1 0 42.3959 55.5245 53.4143 -0.760406 0.552454 0.341435 0.490491 45 57.5 1 0 +1795 1 1 0 42.6521 56.0574 53.0521 -0.734794 0.605742 0.305212 0.490491 45 57.5 1 0 +1796 1 1 0 42.9476 56.5662 52.6738 -0.705236 0.65662 0.267381 0.490491 45 57.5 1 0 +1797 1 1 0 43.2768 57.0398 52.289 -0.672319 0.703983 0.228899 0.490491 45 57.5 1 0 +1798 1 1 0 44.9579 58.3036 52.3723 -0.504209 0.830359 0.237228 0.490491 45 57.5 1 0 +1799 1 1 0 44.2875 57.9265 52.1302 -0.571251 0.79265 0.213023 0.490491 45 57.5 1 0 +1800 1 1 0 44.7087 58.3081 51.7253 -0.529135 0.830812 0.172532 0.490491 45 57.5 1 0 +1801 1 1 0 43.6542 57.4979 51.8743 -0.634579 0.749786 0.187432 0.490491 45 57.5 1 0 +1802 1 1 0 44.051 57.9017 51.4741 -0.594895 0.79017 0.147413 0.490491 45 57.5 1 0 +1803 1 1 0 44.4814 58.2711 51.0649 -0.551859 0.82711 0.106494 0.490491 45 57.5 1 0 +1804 1 1 0 44.1631 57.4534 53.2214 -0.583692 0.745339 0.322141 0.490491 45 57.5 1 0 +1805 1 1 0 43.8907 57.4944 52.5518 -0.610926 0.749435 0.25518 0.490491 45 57.5 1 0 +1806 1 1 0 44.5489 57.9011 52.8032 -0.545109 0.790112 0.280319 0.490491 45 57.5 1 0 +1807 1 1 0 44.6322 54.1427 57.3501 -0.536784 0.414272 0.735011 0.490491 45 57.5 1 0 +1808 1 1 0 44.1528 54.4396 56.7898 -0.584716 0.443957 0.678977 0.490491 45 57.5 1 0 +1809 1 1 0 43.7169 54.7092 56.1924 -0.628313 0.470917 0.619242 0.490491 45 57.5 1 0 +1810 1 1 0 44.3575 55.1338 56.4658 -0.564254 0.513375 0.646578 0.490491 45 57.5 1 0 +1811 1 1 0 44.8203 54.8521 57.0447 -0.51797 0.485208 0.704471 0.490491 45 57.5 1 0 +1812 1 1 0 45.0356 55.5242 56.6961 -0.496441 0.552418 0.669612 0.490491 45 57.5 1 0 +1813 1 1 0 43.3039 54.9644 55.5242 -0.669612 0.496441 0.552418 0.490491 45 57.5 1 0 +1814 1 1 0 42.9553 55.1797 54.8521 -0.704471 0.51797 0.485208 0.490491 45 57.5 1 0 +1815 1 1 0 43.5342 55.6425 55.1338 -0.646578 0.564254 0.513375 0.490491 45 57.5 1 0 +1816 1 1 0 42.6499 55.3678 54.1427 -0.735011 0.536784 0.414272 0.490491 45 57.5 1 0 +1817 1 1 0 43.2102 55.8472 54.4396 -0.678977 0.584716 0.443957 0.490491 45 57.5 1 0 +1818 1 1 0 43.8076 56.2831 54.7092 -0.619242 0.628313 0.470917 0.490491 45 57.5 1 0 +1819 1 1 0 45.2908 56.1924 56.2831 -0.470917 0.619242 0.628313 0.490491 45 57.5 1 0 +1820 1 1 0 44.8662 56.4658 55.6425 -0.513375 0.646578 0.564254 0.490491 45 57.5 1 0 +1821 1 1 0 45.5604 56.7898 55.8472 -0.443957 0.678977 0.584716 0.490491 45 57.5 1 0 +1822 1 1 0 44.4758 56.6961 54.9644 -0.552418 0.669612 0.496441 0.490491 45 57.5 1 0 +1823 1 1 0 45.1479 57.0447 55.1797 -0.485208 0.704471 0.51797 0.490491 45 57.5 1 0 +1824 1 1 0 45.8573 57.3501 55.3678 -0.414272 0.735011 0.536784 0.490491 45 57.5 1 0 +1825 1 1 0 43.9252 55.4065 55.8195 -0.607478 0.54065 0.581952 0.490491 45 57.5 1 0 +1826 1 1 0 44.1805 56.0748 55.4065 -0.581952 0.607478 0.54065 0.490491 45 57.5 1 0 +1827 1 1 0 44.5935 55.8195 56.0748 -0.54065 0.581952 0.607478 0.490491 45 57.5 1 0 +1828 1 1 0 51.0649 55.5186 58.2711 0.106494 0.551859 0.82711 0.490491 45 57.5 1 0 +1829 1 1 0 51.4741 55.949 57.9017 0.147413 0.594895 0.79017 0.490491 45 57.5 1 0 +1830 1 1 0 51.8743 56.3458 57.4979 0.187432 0.634579 0.749786 0.490491 45 57.5 1 0 +1831 1 1 0 52.1302 55.7125 57.9265 0.213023 0.571251 0.79265 0.490491 45 57.5 1 0 +1832 1 1 0 51.7253 55.2913 58.3081 0.172532 0.529135 0.830812 0.490491 45 57.5 1 0 +1833 1 1 0 52.3723 55.0421 58.3036 0.237228 0.504209 0.830359 0.490491 45 57.5 1 0 +1834 1 1 0 52.289 56.7232 57.0398 0.228899 0.672319 0.703983 0.490491 45 57.5 1 0 +1835 1 1 0 52.6738 57.0524 56.5662 0.267381 0.705236 0.65662 0.490491 45 57.5 1 0 +1836 1 1 0 52.96 56.4741 57.0231 0.296004 0.647412 0.70231 0.490491 45 57.5 1 0 +1837 1 1 0 53.0521 57.3479 56.0574 0.305212 0.734794 0.605742 0.490491 45 57.5 1 0 +1838 1 1 0 53.4143 57.6041 55.5245 0.341435 0.760406 0.552454 0.490491 45 57.5 1 0 +1839 1 1 0 53.7175 57.0711 56.015 0.371748 0.707107 0.601501 0.490491 45 57.5 1 0 +1840 1 1 0 53.3469 56.7891 56.535 0.334691 0.678913 0.653497 0.490491 45 57.5 1 0 +1841 1 1 0 53.6159 56.1919 56.9704 0.361591 0.619186 0.697037 0.490491 45 57.5 1 0 +1842 1 1 0 53.9977 56.4945 56.4684 0.399769 0.649448 0.64684 0.490491 45 57.5 1 0 +1843 1 1 0 54.2533 55.8779 56.8819 0.425325 0.587785 0.688191 0.490491 45 57.5 1 0 +1844 1 1 0 53.038 54.7623 58.2518 0.303801 0.476225 0.825175 0.490491 45 57.5 1 0 +1845 1 1 0 53.4615 55.1612 57.8345 0.346153 0.516122 0.783452 0.490491 45 57.5 1 0 +1846 1 1 0 53.6603 54.4698 58.1623 0.366027 0.446977 0.816233 0.490491 45 57.5 1 0 +1847 1 1 0 53.8673 55.5337 57.3771 0.38673 0.553372 0.737712 0.490491 45 57.5 1 0 +1848 1 1 0 54.0829 54.8624 57.7258 0.408286 0.48624 0.772575 0.490491 45 57.5 1 0 +1849 1 1 0 54.4826 55.225 57.253 0.448259 0.522499 0.725299 0.490491 45 57.5 1 0 +1850 1 1 0 54.6843 54.5399 57.5794 0.46843 0.45399 0.757936 0.490491 45 57.5 1 0 +1851 1 1 0 54.2713 54.156 58.0302 0.427135 0.415597 0.803016 0.490491 45 57.5 1 0 +1852 1 1 0 54.8571 53.8268 57.859 0.485712 0.382683 0.785899 0.490491 45 57.5 1 0 +1853 1 1 0 52.5518 56.1093 57.4944 0.25518 0.610926 0.749435 0.490491 45 57.5 1 0 +1854 1 1 0 53.2214 55.8369 57.4534 0.322141 0.583692 0.745339 0.490491 45 57.5 1 0 +1855 1 1 0 52.8032 55.4511 57.9011 0.280319 0.545109 0.790112 0.490491 45 57.5 1 0 +1856 1 1 0 53.8268 57.859 54.8571 0.382683 0.785899 0.485712 0.490491 45 57.5 1 0 +1857 1 1 0 54.156 58.0302 54.2713 0.415597 0.803016 0.427135 0.490491 45 57.5 1 0 +1858 1 1 0 54.5399 57.5794 54.6843 0.45399 0.757936 0.46843 0.490491 45 57.5 1 0 +1859 1 1 0 54.4698 58.1623 53.6603 0.446977 0.816233 0.366027 0.490491 45 57.5 1 0 +1860 1 1 0 54.7623 58.2518 53.038 0.476225 0.825175 0.303801 0.490491 45 57.5 1 0 +1861 1 1 0 55.1612 57.8345 53.4615 0.516122 0.783452 0.346153 0.490491 45 57.5 1 0 +1862 1 1 0 54.8624 57.7258 54.0829 0.48624 0.772575 0.408286 0.490491 45 57.5 1 0 +1863 1 1 0 55.225 57.253 54.4826 0.522499 0.725299 0.448259 0.490491 45 57.5 1 0 +1864 1 1 0 55.5337 57.3771 53.8673 0.553372 0.737712 0.38673 0.490491 45 57.5 1 0 +1865 1 1 0 55.8779 56.8819 54.2533 0.587785 0.688191 0.425325 0.490491 45 57.5 1 0 +1866 1 1 0 55.0421 58.3036 52.3723 0.504209 0.830359 0.237228 0.490491 45 57.5 1 0 +1867 1 1 0 55.2913 58.3081 51.7253 0.529135 0.830812 0.172532 0.490491 45 57.5 1 0 +1868 1 1 0 55.7125 57.9265 52.1302 0.571251 0.79265 0.213023 0.490491 45 57.5 1 0 +1869 1 1 0 55.5186 58.2711 51.0649 0.551859 0.82711 0.106494 0.490491 45 57.5 1 0 +1870 1 1 0 55.949 57.9017 51.4741 0.594895 0.79017 0.147413 0.490491 45 57.5 1 0 +1871 1 1 0 56.3458 57.4979 51.8743 0.634579 0.749786 0.187432 0.490491 45 57.5 1 0 +1872 1 1 0 56.1919 56.9704 53.6159 0.619186 0.697037 0.361591 0.490491 45 57.5 1 0 +1873 1 1 0 56.4945 56.4684 53.9977 0.649448 0.64684 0.399769 0.490491 45 57.5 1 0 +1874 1 1 0 56.4741 57.0231 52.96 0.647412 0.70231 0.296004 0.490491 45 57.5 1 0 +1875 1 1 0 56.7891 56.535 53.3469 0.678913 0.653497 0.334691 0.490491 45 57.5 1 0 +1876 1 1 0 57.0711 56.015 53.7175 0.707107 0.601501 0.371748 0.490491 45 57.5 1 0 +1877 1 1 0 56.7232 57.0398 52.289 0.672319 0.703983 0.228899 0.490491 45 57.5 1 0 +1878 1 1 0 57.0524 56.5662 52.6738 0.705236 0.65662 0.267381 0.490491 45 57.5 1 0 +1879 1 1 0 57.3479 56.0574 53.0521 0.734794 0.605742 0.305212 0.490491 45 57.5 1 0 +1880 1 1 0 57.6041 55.5245 53.4143 0.760406 0.552454 0.341435 0.490491 45 57.5 1 0 +1881 1 1 0 55.4511 57.9011 52.8032 0.545109 0.790112 0.280319 0.490491 45 57.5 1 0 +1882 1 1 0 56.1093 57.4944 52.5518 0.610926 0.749435 0.25518 0.490491 45 57.5 1 0 +1883 1 1 0 55.8369 57.4534 53.2214 0.583692 0.745339 0.322141 0.490491 45 57.5 1 0 +1884 1 1 0 55.5245 53.4143 57.6041 0.552454 0.341435 0.760406 0.490491 45 57.5 1 0 +1885 1 1 0 56.015 53.7175 57.0711 0.601501 0.371748 0.707107 0.490491 45 57.5 1 0 +1886 1 1 0 56.0574 53.0521 57.3479 0.605742 0.305212 0.734794 0.490491 45 57.5 1 0 +1887 1 1 0 56.4684 53.9977 56.4945 0.64684 0.399769 0.649448 0.490491 45 57.5 1 0 +1888 1 1 0 56.535 53.3469 56.7891 0.653497 0.334691 0.678913 0.490491 45 57.5 1 0 +1889 1 1 0 56.8819 54.2533 55.8779 0.688191 0.425325 0.587785 0.490491 45 57.5 1 0 +1890 1 1 0 56.9704 53.6159 56.1919 0.697037 0.361591 0.619186 0.490491 45 57.5 1 0 +1891 1 1 0 57.0231 52.96 56.4741 0.70231 0.296004 0.647412 0.490491 45 57.5 1 0 +1892 1 1 0 56.5662 52.6738 57.0524 0.65662 0.267381 0.705236 0.490491 45 57.5 1 0 +1893 1 1 0 57.0398 52.289 56.7232 0.703983 0.228899 0.672319 0.490491 45 57.5 1 0 +1894 1 1 0 57.253 54.4826 55.225 0.725299 0.448259 0.522499 0.490491 45 57.5 1 0 +1895 1 1 0 57.3771 53.8673 55.5337 0.737712 0.38673 0.553372 0.490491 45 57.5 1 0 +1896 1 1 0 57.5794 54.6843 54.5399 0.757936 0.46843 0.45399 0.490491 45 57.5 1 0 +1897 1 1 0 57.7258 54.0829 54.8624 0.772575 0.408286 0.48624 0.490491 45 57.5 1 0 +1898 1 1 0 57.8345 53.4615 55.1612 0.783452 0.346153 0.516122 0.490491 45 57.5 1 0 +1899 1 1 0 57.859 54.8571 53.8268 0.785899 0.485712 0.382683 0.490491 45 57.5 1 0 +1900 1 1 0 58.0302 54.2713 54.156 0.803016 0.427135 0.415597 0.490491 45 57.5 1 0 +1901 1 1 0 58.1623 53.6603 54.4698 0.816233 0.366027 0.446977 0.490491 45 57.5 1 0 +1902 1 1 0 58.2518 53.038 54.7623 0.825175 0.303801 0.476225 0.490491 45 57.5 1 0 +1903 1 1 0 57.4979 51.8743 56.3458 0.749786 0.187432 0.634579 0.490491 45 57.5 1 0 +1904 1 1 0 57.9265 52.1302 55.7125 0.79265 0.213023 0.571251 0.490491 45 57.5 1 0 +1905 1 1 0 57.9017 51.4741 55.949 0.79017 0.147413 0.594895 0.490491 45 57.5 1 0 +1906 1 1 0 58.3036 52.3723 55.0421 0.830359 0.237228 0.504209 0.490491 45 57.5 1 0 +1907 1 1 0 58.3081 51.7253 55.2913 0.830812 0.172532 0.529135 0.490491 45 57.5 1 0 +1908 1 1 0 58.2711 51.0649 55.5186 0.82711 0.106494 0.551859 0.490491 45 57.5 1 0 +1909 1 1 0 57.4534 53.2214 55.8369 0.745339 0.322141 0.583692 0.490491 45 57.5 1 0 +1910 1 1 0 57.9011 52.8032 55.4511 0.790112 0.280319 0.545109 0.490491 45 57.5 1 0 +1911 1 1 0 57.4944 52.5518 56.1093 0.749435 0.25518 0.610926 0.490491 45 57.5 1 0 +1912 1 1 0 54.1427 57.3501 55.3678 0.414272 0.735011 0.536784 0.490491 45 57.5 1 0 +1913 1 1 0 54.8521 57.0447 55.1797 0.485208 0.704471 0.51797 0.490491 45 57.5 1 0 +1914 1 1 0 55.5242 56.6961 54.9644 0.552418 0.669612 0.496441 0.490491 45 57.5 1 0 +1915 1 1 0 55.1338 56.4658 55.6425 0.513375 0.646578 0.564254 0.490491 45 57.5 1 0 +1916 1 1 0 54.4396 56.7898 55.8472 0.443957 0.678977 0.584716 0.490491 45 57.5 1 0 +1917 1 1 0 54.7092 56.1924 56.2831 0.470917 0.619242 0.628313 0.490491 45 57.5 1 0 +1918 1 1 0 56.1924 56.2831 54.7092 0.619242 0.628313 0.470917 0.490491 45 57.5 1 0 +1919 1 1 0 56.7898 55.8472 54.4396 0.678977 0.584716 0.443957 0.490491 45 57.5 1 0 +1920 1 1 0 56.4658 55.6425 55.1338 0.646578 0.564254 0.513375 0.490491 45 57.5 1 0 +1921 1 1 0 57.3501 55.3678 54.1427 0.735011 0.536784 0.414272 0.490491 45 57.5 1 0 +1922 1 1 0 57.0447 55.1797 54.8521 0.704471 0.51797 0.485208 0.490491 45 57.5 1 0 +1923 1 1 0 56.6961 54.9644 55.5242 0.669612 0.496441 0.552418 0.490491 45 57.5 1 0 +1924 1 1 0 54.9644 55.5242 56.6961 0.496441 0.552418 0.669612 0.490491 45 57.5 1 0 +1925 1 1 0 55.6425 55.1338 56.4658 0.564254 0.513375 0.646578 0.490491 45 57.5 1 0 +1926 1 1 0 55.1797 54.8521 57.0447 0.51797 0.485208 0.704471 0.490491 45 57.5 1 0 +1927 1 1 0 56.2831 54.7092 56.1924 0.628313 0.470917 0.619242 0.490491 45 57.5 1 0 +1928 1 1 0 55.8472 54.4396 56.7898 0.584716 0.443957 0.678977 0.490491 45 57.5 1 0 +1929 1 1 0 55.3678 54.1427 57.3501 0.536784 0.414272 0.735011 0.490491 45 57.5 1 0 +1930 1 1 0 55.8195 56.0748 55.4065 0.581952 0.607478 0.54065 0.490491 45 57.5 1 0 +1931 1 1 0 56.0748 55.4065 55.8195 0.607478 0.54065 0.581952 0.490491 45 57.5 1 0 +1932 1 1 0 55.4065 55.8195 56.0748 0.54065 0.581952 0.607478 0.490491 45 57.5 1 0 +1933 1 1 0 48.9351 55.5186 41.7289 -0.106494 0.551859 -0.82711 0.490491 45 57.5 1 0 +1934 1 1 0 48.5259 55.949 42.0983 -0.147413 0.594895 -0.79017 0.490491 45 57.5 1 0 +1935 1 1 0 48.1257 56.3458 42.5021 -0.187432 0.634579 -0.749786 0.490491 45 57.5 1 0 +1936 1 1 0 47.8698 55.7125 42.0735 -0.213023 0.571251 -0.79265 0.490491 45 57.5 1 0 +1937 1 1 0 48.2747 55.2913 41.6919 -0.172532 0.529135 -0.830812 0.490491 45 57.5 1 0 +1938 1 1 0 47.6277 55.0421 41.6964 -0.237228 0.504209 -0.830359 0.490491 45 57.5 1 0 +1939 1 1 0 47.711 56.7232 42.9602 -0.228899 0.672319 -0.703983 0.490491 45 57.5 1 0 +1940 1 1 0 47.3262 57.0524 43.4338 -0.267381 0.705236 -0.65662 0.490491 45 57.5 1 0 +1941 1 1 0 47.04 56.4741 42.9769 -0.296004 0.647412 -0.70231 0.490491 45 57.5 1 0 +1942 1 1 0 46.9479 57.3479 43.9426 -0.305212 0.734794 -0.605742 0.490491 45 57.5 1 0 +1943 1 1 0 46.5857 57.6041 44.4755 -0.341435 0.760406 -0.552454 0.490491 45 57.5 1 0 +1944 1 1 0 46.2825 57.0711 43.985 -0.371748 0.707107 -0.601501 0.490491 45 57.5 1 0 +1945 1 1 0 46.6531 56.7891 43.465 -0.334691 0.678913 -0.653497 0.490491 45 57.5 1 0 +1946 1 1 0 46.3841 56.1919 43.0296 -0.361591 0.619186 -0.697037 0.490491 45 57.5 1 0 +1947 1 1 0 46.0023 56.4945 43.5316 -0.399769 0.649448 -0.64684 0.490491 45 57.5 1 0 +1948 1 1 0 45.7467 55.8779 43.1181 -0.425325 0.587785 -0.688191 0.490491 45 57.5 1 0 +1949 1 1 0 46.962 54.7623 41.7482 -0.303801 0.476225 -0.825175 0.490491 45 57.5 1 0 +1950 1 1 0 46.5385 55.1612 42.1655 -0.346153 0.516122 -0.783452 0.490491 45 57.5 1 0 +1951 1 1 0 46.3397 54.4698 41.8377 -0.366027 0.446977 -0.816233 0.490491 45 57.5 1 0 +1952 1 1 0 46.1327 55.5337 42.6229 -0.38673 0.553372 -0.737712 0.490491 45 57.5 1 0 +1953 1 1 0 45.9171 54.8624 42.2742 -0.408286 0.48624 -0.772575 0.490491 45 57.5 1 0 +1954 1 1 0 45.5174 55.225 42.747 -0.448259 0.522499 -0.725299 0.490491 45 57.5 1 0 +1955 1 1 0 45.3157 54.5399 42.4206 -0.46843 0.45399 -0.757936 0.490491 45 57.5 1 0 +1956 1 1 0 45.7287 54.156 41.9698 -0.427135 0.415597 -0.803016 0.490491 45 57.5 1 0 +1957 1 1 0 45.1429 53.8268 42.141 -0.485712 0.382683 -0.785899 0.490491 45 57.5 1 0 +1958 1 1 0 47.4482 56.1093 42.5056 -0.25518 0.610926 -0.749435 0.490491 45 57.5 1 0 +1959 1 1 0 46.7786 55.8369 42.5466 -0.322141 0.583692 -0.745339 0.490491 45 57.5 1 0 +1960 1 1 0 47.1968 55.4511 42.0989 -0.280319 0.545109 -0.790112 0.490491 45 57.5 1 0 +1961 1 1 0 46.1732 57.859 45.1429 -0.382683 0.785899 -0.485712 0.490491 45 57.5 1 0 +1962 1 1 0 45.844 58.0302 45.7287 -0.415597 0.803016 -0.427135 0.490491 45 57.5 1 0 +1963 1 1 0 45.4601 57.5794 45.3157 -0.45399 0.757936 -0.46843 0.490491 45 57.5 1 0 +1964 1 1 0 45.5302 58.1623 46.3397 -0.446977 0.816233 -0.366027 0.490491 45 57.5 1 0 +1965 1 1 0 45.2377 58.2518 46.962 -0.476225 0.825175 -0.303801 0.490491 45 57.5 1 0 +1966 1 1 0 44.8388 57.8345 46.5385 -0.516122 0.783452 -0.346153 0.490491 45 57.5 1 0 +1967 1 1 0 45.1376 57.7258 45.9171 -0.48624 0.772575 -0.408286 0.490491 45 57.5 1 0 +1968 1 1 0 44.775 57.253 45.5174 -0.522499 0.725299 -0.448259 0.490491 45 57.5 1 0 +1969 1 1 0 44.4663 57.3771 46.1327 -0.553372 0.737712 -0.38673 0.490491 45 57.5 1 0 +1970 1 1 0 44.1221 56.8819 45.7467 -0.587785 0.688191 -0.425325 0.490491 45 57.5 1 0 +1971 1 1 0 44.9579 58.3036 47.6277 -0.504209 0.830359 -0.237228 0.490491 45 57.5 1 0 +1972 1 1 0 44.7087 58.3081 48.2747 -0.529135 0.830812 -0.172532 0.490491 45 57.5 1 0 +1973 1 1 0 44.2875 57.9265 47.8698 -0.571251 0.79265 -0.213023 0.490491 45 57.5 1 0 +1974 1 1 0 44.4814 58.2711 48.9351 -0.551859 0.82711 -0.106494 0.490491 45 57.5 1 0 +1975 1 1 0 44.051 57.9017 48.5259 -0.594895 0.79017 -0.147413 0.490491 45 57.5 1 0 +1976 1 1 0 43.6542 57.4979 48.1257 -0.634579 0.749786 -0.187432 0.490491 45 57.5 1 0 +1977 1 1 0 43.8081 56.9704 46.3841 -0.619186 0.697037 -0.361591 0.490491 45 57.5 1 0 +1978 1 1 0 43.5055 56.4684 46.0023 -0.649448 0.64684 -0.399769 0.490491 45 57.5 1 0 +1979 1 1 0 43.5259 57.0231 47.04 -0.647412 0.70231 -0.296004 0.490491 45 57.5 1 0 +1980 1 1 0 43.2109 56.535 46.6531 -0.678913 0.653497 -0.334691 0.490491 45 57.5 1 0 +1981 1 1 0 42.9289 56.015 46.2825 -0.707107 0.601501 -0.371748 0.490491 45 57.5 1 0 +1982 1 1 0 43.2768 57.0398 47.711 -0.672319 0.703983 -0.228899 0.490491 45 57.5 1 0 +1983 1 1 0 42.9476 56.5662 47.3262 -0.705236 0.65662 -0.267381 0.490491 45 57.5 1 0 +1984 1 1 0 42.6521 56.0574 46.9479 -0.734794 0.605742 -0.305212 0.490491 45 57.5 1 0 +1985 1 1 0 42.3959 55.5245 46.5857 -0.760406 0.552454 -0.341435 0.490491 45 57.5 1 0 +1986 1 1 0 44.5489 57.9011 47.1968 -0.545109 0.790112 -0.280319 0.490491 45 57.5 1 0 +1987 1 1 0 43.8907 57.4944 47.4482 -0.610926 0.749435 -0.25518 0.490491 45 57.5 1 0 +1988 1 1 0 44.1631 57.4534 46.7786 -0.583692 0.745339 -0.322141 0.490491 45 57.5 1 0 +1989 1 1 0 44.4755 53.4143 42.3959 -0.552454 0.341435 -0.760406 0.490491 45 57.5 1 0 +1990 1 1 0 43.985 53.7175 42.9289 -0.601501 0.371748 -0.707107 0.490491 45 57.5 1 0 +1991 1 1 0 43.9426 53.0521 42.6521 -0.605742 0.305212 -0.734794 0.490491 45 57.5 1 0 +1992 1 1 0 43.5316 53.9977 43.5055 -0.64684 0.399769 -0.649448 0.490491 45 57.5 1 0 +1993 1 1 0 43.465 53.3469 43.2109 -0.653497 0.334691 -0.678913 0.490491 45 57.5 1 0 +1994 1 1 0 43.1181 54.2533 44.1221 -0.688191 0.425325 -0.587785 0.490491 45 57.5 1 0 +1995 1 1 0 43.0296 53.6159 43.8081 -0.697037 0.361591 -0.619186 0.490491 45 57.5 1 0 +1996 1 1 0 42.9769 52.96 43.5259 -0.70231 0.296004 -0.647412 0.490491 45 57.5 1 0 +1997 1 1 0 43.4338 52.6738 42.9476 -0.65662 0.267381 -0.705236 0.490491 45 57.5 1 0 +1998 1 1 0 42.9602 52.289 43.2768 -0.703983 0.228899 -0.672319 0.490491 45 57.5 1 0 +1999 1 1 0 42.747 54.4826 44.775 -0.725299 0.448259 -0.522499 0.490491 45 57.5 1 0 +2000 1 1 0 42.6229 53.8673 44.4663 -0.737712 0.38673 -0.553372 0.490491 45 57.5 1 0 +2001 1 1 0 42.4206 54.6843 45.4601 -0.757936 0.46843 -0.45399 0.490491 45 57.5 1 0 +2002 1 1 0 42.2742 54.0829 45.1376 -0.772575 0.408286 -0.48624 0.490491 45 57.5 1 0 +2003 1 1 0 42.1655 53.4615 44.8388 -0.783452 0.346153 -0.516122 0.490491 45 57.5 1 0 +2004 1 1 0 42.141 54.8571 46.1732 -0.785899 0.485712 -0.382683 0.490491 45 57.5 1 0 +2005 1 1 0 41.9698 54.2713 45.844 -0.803016 0.427135 -0.415597 0.490491 45 57.5 1 0 +2006 1 1 0 41.8377 53.6603 45.5302 -0.816233 0.366027 -0.446977 0.490491 45 57.5 1 0 +2007 1 1 0 41.7482 53.038 45.2377 -0.825175 0.303801 -0.476225 0.490491 45 57.5 1 0 +2008 1 1 0 42.5021 51.8743 43.6542 -0.749786 0.187432 -0.634579 0.490491 45 57.5 1 0 +2009 1 1 0 42.0735 52.1302 44.2875 -0.79265 0.213023 -0.571251 0.490491 45 57.5 1 0 +2010 1 1 0 42.0983 51.4741 44.051 -0.79017 0.147413 -0.594895 0.490491 45 57.5 1 0 +2011 1 1 0 41.6964 52.3723 44.9579 -0.830359 0.237228 -0.504209 0.490491 45 57.5 1 0 +2012 1 1 0 41.6919 51.7253 44.7087 -0.830812 0.172532 -0.529135 0.490491 45 57.5 1 0 +2013 1 1 0 41.7289 51.0649 44.4814 -0.82711 0.106494 -0.551859 0.490491 45 57.5 1 0 +2014 1 1 0 42.5466 53.2214 44.1631 -0.745339 0.322141 -0.583692 0.490491 45 57.5 1 0 +2015 1 1 0 42.0989 52.8032 44.5489 -0.790112 0.280319 -0.545109 0.490491 45 57.5 1 0 +2016 1 1 0 42.5056 52.5518 43.8907 -0.749435 0.25518 -0.610926 0.490491 45 57.5 1 0 +2017 1 1 0 45.8573 57.3501 44.6322 -0.414272 0.735011 -0.536784 0.490491 45 57.5 1 0 +2018 1 1 0 45.1479 57.0447 44.8203 -0.485208 0.704471 -0.51797 0.490491 45 57.5 1 0 +2019 1 1 0 44.4758 56.6961 45.0356 -0.552418 0.669612 -0.496441 0.490491 45 57.5 1 0 +2020 1 1 0 44.8662 56.4658 44.3575 -0.513375 0.646578 -0.564254 0.490491 45 57.5 1 0 +2021 1 1 0 45.5604 56.7898 44.1528 -0.443957 0.678977 -0.584716 0.490491 45 57.5 1 0 +2022 1 1 0 45.2908 56.1924 43.7169 -0.470917 0.619242 -0.628313 0.490491 45 57.5 1 0 +2023 1 1 0 43.8076 56.2831 45.2908 -0.619242 0.628313 -0.470917 0.490491 45 57.5 1 0 +2024 1 1 0 43.2102 55.8472 45.5604 -0.678977 0.584716 -0.443957 0.490491 45 57.5 1 0 +2025 1 1 0 43.5342 55.6425 44.8662 -0.646578 0.564254 -0.513375 0.490491 45 57.5 1 0 +2026 1 1 0 42.6499 55.3678 45.8573 -0.735011 0.536784 -0.414272 0.490491 45 57.5 1 0 +2027 1 1 0 42.9553 55.1797 45.1479 -0.704471 0.51797 -0.485208 0.490491 45 57.5 1 0 +2028 1 1 0 43.3039 54.9644 44.4758 -0.669612 0.496441 -0.552418 0.490491 45 57.5 1 0 +2029 1 1 0 45.0356 55.5242 43.3039 -0.496441 0.552418 -0.669612 0.490491 45 57.5 1 0 +2030 1 1 0 44.3575 55.1338 43.5342 -0.564254 0.513375 -0.646578 0.490491 45 57.5 1 0 +2031 1 1 0 44.8203 54.8521 42.9553 -0.51797 0.485208 -0.704471 0.490491 45 57.5 1 0 +2032 1 1 0 43.7169 54.7092 43.8076 -0.628313 0.470917 -0.619242 0.490491 45 57.5 1 0 +2033 1 1 0 44.1528 54.4396 43.2102 -0.584716 0.443957 -0.678977 0.490491 45 57.5 1 0 +2034 1 1 0 44.6322 54.1427 42.6499 -0.536784 0.414272 -0.735011 0.490491 45 57.5 1 0 +2035 1 1 0 44.1805 56.0748 44.5935 -0.581952 0.607478 -0.54065 0.490491 45 57.5 1 0 +2036 1 1 0 43.9252 55.4065 44.1805 -0.607478 0.54065 -0.581952 0.490491 45 57.5 1 0 +2037 1 1 0 44.5935 55.8195 43.9252 -0.54065 0.581952 -0.607478 0.490491 45 57.5 1 0 +2038 1 1 0 51.0649 55.5186 41.7289 0.106494 0.551859 -0.82711 0.490491 45 57.5 1 0 +2039 1 1 0 51.7253 55.2913 41.6919 0.172532 0.529135 -0.830812 0.490491 45 57.5 1 0 +2040 1 1 0 52.3723 55.0421 41.6964 0.237228 0.504209 -0.830359 0.490491 45 57.5 1 0 +2041 1 1 0 52.1302 55.7125 42.0735 0.213023 0.571251 -0.79265 0.490491 45 57.5 1 0 +2042 1 1 0 51.4741 55.949 42.0983 0.147413 0.594895 -0.79017 0.490491 45 57.5 1 0 +2043 1 1 0 51.8743 56.3458 42.5021 0.187432 0.634579 -0.749786 0.490491 45 57.5 1 0 +2044 1 1 0 53.038 54.7623 41.7482 0.303801 0.476225 -0.825175 0.490491 45 57.5 1 0 +2045 1 1 0 53.6603 54.4698 41.8377 0.366027 0.446977 -0.816233 0.490491 45 57.5 1 0 +2046 1 1 0 53.4615 55.1612 42.1655 0.346153 0.516122 -0.783452 0.490491 45 57.5 1 0 +2047 1 1 0 54.2713 54.156 41.9698 0.427135 0.415597 -0.803016 0.490491 45 57.5 1 0 +2048 1 1 0 54.8571 53.8268 42.141 0.485712 0.382683 -0.785899 0.490491 45 57.5 1 0 +2049 1 1 0 54.6843 54.5399 42.4206 0.46843 0.45399 -0.757936 0.490491 45 57.5 1 0 +2050 1 1 0 54.0829 54.8624 42.2742 0.408286 0.48624 -0.772575 0.490491 45 57.5 1 0 +2051 1 1 0 53.8673 55.5337 42.6229 0.38673 0.553372 -0.737712 0.490491 45 57.5 1 0 +2052 1 1 0 54.4826 55.225 42.747 0.448259 0.522499 -0.725299 0.490491 45 57.5 1 0 +2053 1 1 0 54.2533 55.8779 43.1181 0.425325 0.587785 -0.688191 0.490491 45 57.5 1 0 +2054 1 1 0 52.289 56.7232 42.9602 0.228899 0.672319 -0.703983 0.490491 45 57.5 1 0 +2055 1 1 0 52.96 56.4741 42.9769 0.296004 0.647412 -0.70231 0.490491 45 57.5 1 0 +2056 1 1 0 52.6738 57.0524 43.4338 0.267381 0.705236 -0.65662 0.490491 45 57.5 1 0 +2057 1 1 0 53.6159 56.1919 43.0296 0.361591 0.619186 -0.697037 0.490491 45 57.5 1 0 +2058 1 1 0 53.3469 56.7891 43.465 0.334691 0.678913 -0.653497 0.490491 45 57.5 1 0 +2059 1 1 0 53.9977 56.4945 43.5316 0.399769 0.649448 -0.64684 0.490491 45 57.5 1 0 +2060 1 1 0 53.7175 57.0711 43.985 0.371748 0.707107 -0.601501 0.490491 45 57.5 1 0 +2061 1 1 0 53.0521 57.3479 43.9426 0.305212 0.734794 -0.605742 0.490491 45 57.5 1 0 +2062 1 1 0 53.4143 57.6041 44.4755 0.341435 0.760406 -0.552454 0.490491 45 57.5 1 0 +2063 1 1 0 52.8032 55.4511 42.0989 0.280319 0.545109 -0.790112 0.490491 45 57.5 1 0 +2064 1 1 0 53.2214 55.8369 42.5466 0.322141 0.583692 -0.745339 0.490491 45 57.5 1 0 +2065 1 1 0 52.5518 56.1093 42.5056 0.25518 0.610926 -0.749435 0.490491 45 57.5 1 0 +2066 1 1 0 55.5245 53.4143 42.3959 0.552454 0.341435 -0.760406 0.490491 45 57.5 1 0 +2067 1 1 0 56.0574 53.0521 42.6521 0.605742 0.305212 -0.734794 0.490491 45 57.5 1 0 +2068 1 1 0 56.015 53.7175 42.9289 0.601501 0.371748 -0.707107 0.490491 45 57.5 1 0 +2069 1 1 0 56.5662 52.6738 42.9476 0.65662 0.267381 -0.705236 0.490491 45 57.5 1 0 +2070 1 1 0 57.0398 52.289 43.2768 0.703983 0.228899 -0.672319 0.490491 45 57.5 1 0 +2071 1 1 0 57.0231 52.96 43.5259 0.70231 0.296004 -0.647412 0.490491 45 57.5 1 0 +2072 1 1 0 56.535 53.3469 43.2109 0.653497 0.334691 -0.678913 0.490491 45 57.5 1 0 +2073 1 1 0 56.4684 53.9977 43.5055 0.64684 0.399769 -0.649448 0.490491 45 57.5 1 0 +2074 1 1 0 56.9704 53.6159 43.8081 0.697037 0.361591 -0.619186 0.490491 45 57.5 1 0 +2075 1 1 0 56.8819 54.2533 44.1221 0.688191 0.425325 -0.587785 0.490491 45 57.5 1 0 +2076 1 1 0 57.4979 51.8743 43.6542 0.749786 0.187432 -0.634579 0.490491 45 57.5 1 0 +2077 1 1 0 57.9017 51.4741 44.051 0.79017 0.147413 -0.594895 0.490491 45 57.5 1 0 +2078 1 1 0 57.9265 52.1302 44.2875 0.79265 0.213023 -0.571251 0.490491 45 57.5 1 0 +2079 1 1 0 58.2711 51.0649 44.4814 0.82711 0.106494 -0.551859 0.490491 45 57.5 1 0 +2080 1 1 0 58.3081 51.7253 44.7087 0.830812 0.172532 -0.529135 0.490491 45 57.5 1 0 +2081 1 1 0 58.3036 52.3723 44.9579 0.830359 0.237228 -0.504209 0.490491 45 57.5 1 0 +2082 1 1 0 57.3771 53.8673 44.4663 0.737712 0.38673 -0.553372 0.490491 45 57.5 1 0 +2083 1 1 0 57.253 54.4826 44.775 0.725299 0.448259 -0.522499 0.490491 45 57.5 1 0 +2084 1 1 0 57.8345 53.4615 44.8388 0.783452 0.346153 -0.516122 0.490491 45 57.5 1 0 +2085 1 1 0 57.7258 54.0829 45.1376 0.772575 0.408286 -0.48624 0.490491 45 57.5 1 0 +2086 1 1 0 57.5794 54.6843 45.4601 0.757936 0.46843 -0.45399 0.490491 45 57.5 1 0 +2087 1 1 0 58.2518 53.038 45.2377 0.825175 0.303801 -0.476225 0.490491 45 57.5 1 0 +2088 1 1 0 58.1623 53.6603 45.5302 0.816233 0.366027 -0.446977 0.490491 45 57.5 1 0 +2089 1 1 0 58.0302 54.2713 45.844 0.803016 0.427135 -0.415597 0.490491 45 57.5 1 0 +2090 1 1 0 57.859 54.8571 46.1732 0.785899 0.485712 -0.382683 0.490491 45 57.5 1 0 +2091 1 1 0 57.4944 52.5518 43.8907 0.749435 0.25518 -0.610926 0.490491 45 57.5 1 0 +2092 1 1 0 57.9011 52.8032 44.5489 0.790112 0.280319 -0.545109 0.490491 45 57.5 1 0 +2093 1 1 0 57.4534 53.2214 44.1631 0.745339 0.322141 -0.583692 0.490491 45 57.5 1 0 +2094 1 1 0 53.8268 57.859 45.1429 0.382683 0.785899 -0.485712 0.490491 45 57.5 1 0 +2095 1 1 0 54.5399 57.5794 45.3157 0.45399 0.757936 -0.46843 0.490491 45 57.5 1 0 +2096 1 1 0 54.156 58.0302 45.7287 0.415597 0.803016 -0.427135 0.490491 45 57.5 1 0 +2097 1 1 0 55.225 57.253 45.5174 0.522499 0.725299 -0.448259 0.490491 45 57.5 1 0 +2098 1 1 0 54.8624 57.7258 45.9171 0.48624 0.772575 -0.408286 0.490491 45 57.5 1 0 +2099 1 1 0 55.8779 56.8819 45.7467 0.587785 0.688191 -0.425325 0.490491 45 57.5 1 0 +2100 1 1 0 55.5337 57.3771 46.1327 0.553372 0.737712 -0.38673 0.490491 45 57.5 1 0 +2101 1 1 0 55.1612 57.8345 46.5385 0.516122 0.783452 -0.346153 0.490491 45 57.5 1 0 +2102 1 1 0 54.4698 58.1623 46.3397 0.446977 0.816233 -0.366027 0.490491 45 57.5 1 0 +2103 1 1 0 54.7623 58.2518 46.962 0.476225 0.825175 -0.303801 0.490491 45 57.5 1 0 +2104 1 1 0 56.4945 56.4684 46.0023 0.649448 0.64684 -0.399769 0.490491 45 57.5 1 0 +2105 1 1 0 56.1919 56.9704 46.3841 0.619186 0.697037 -0.361591 0.490491 45 57.5 1 0 +2106 1 1 0 57.0711 56.015 46.2825 0.707107 0.601501 -0.371748 0.490491 45 57.5 1 0 +2107 1 1 0 56.7891 56.535 46.6531 0.678913 0.653497 -0.334691 0.490491 45 57.5 1 0 +2108 1 1 0 56.4741 57.0231 47.04 0.647412 0.70231 -0.296004 0.490491 45 57.5 1 0 +2109 1 1 0 57.6041 55.5245 46.5857 0.760406 0.552454 -0.341435 0.490491 45 57.5 1 0 +2110 1 1 0 57.3479 56.0574 46.9479 0.734794 0.605742 -0.305212 0.490491 45 57.5 1 0 +2111 1 1 0 57.0524 56.5662 47.3262 0.705236 0.65662 -0.267381 0.490491 45 57.5 1 0 +2112 1 1 0 56.7232 57.0398 47.711 0.672319 0.703983 -0.228899 0.490491 45 57.5 1 0 +2113 1 1 0 55.0421 58.3036 47.6277 0.504209 0.830359 -0.237228 0.490491 45 57.5 1 0 +2114 1 1 0 55.7125 57.9265 47.8698 0.571251 0.79265 -0.213023 0.490491 45 57.5 1 0 +2115 1 1 0 55.2913 58.3081 48.2747 0.529135 0.830812 -0.172532 0.490491 45 57.5 1 0 +2116 1 1 0 56.3458 57.4979 48.1257 0.634579 0.749786 -0.187432 0.490491 45 57.5 1 0 +2117 1 1 0 55.949 57.9017 48.5259 0.594895 0.79017 -0.147413 0.490491 45 57.5 1 0 +2118 1 1 0 55.5186 58.2711 48.9351 0.551859 0.82711 -0.106494 0.490491 45 57.5 1 0 +2119 1 1 0 55.8369 57.4534 46.7786 0.583692 0.745339 -0.322141 0.490491 45 57.5 1 0 +2120 1 1 0 56.1093 57.4944 47.4482 0.610926 0.749435 -0.25518 0.490491 45 57.5 1 0 +2121 1 1 0 55.4511 57.9011 47.1968 0.545109 0.790112 -0.280319 0.490491 45 57.5 1 0 +2122 1 1 0 55.3678 54.1427 42.6499 0.536784 0.414272 -0.735011 0.490491 45 57.5 1 0 +2123 1 1 0 55.8472 54.4396 43.2102 0.584716 0.443957 -0.678977 0.490491 45 57.5 1 0 +2124 1 1 0 56.2831 54.7092 43.8076 0.628313 0.470917 -0.619242 0.490491 45 57.5 1 0 +2125 1 1 0 55.6425 55.1338 43.5342 0.564254 0.513375 -0.646578 0.490491 45 57.5 1 0 +2126 1 1 0 55.1797 54.8521 42.9553 0.51797 0.485208 -0.704471 0.490491 45 57.5 1 0 +2127 1 1 0 54.9644 55.5242 43.3039 0.496441 0.552418 -0.669612 0.490491 45 57.5 1 0 +2128 1 1 0 56.6961 54.9644 44.4758 0.669612 0.496441 -0.552418 0.490491 45 57.5 1 0 +2129 1 1 0 57.0447 55.1797 45.1479 0.704471 0.51797 -0.485208 0.490491 45 57.5 1 0 +2130 1 1 0 56.4658 55.6425 44.8662 0.646578 0.564254 -0.513375 0.490491 45 57.5 1 0 +2131 1 1 0 57.3501 55.3678 45.8573 0.735011 0.536784 -0.414272 0.490491 45 57.5 1 0 +2132 1 1 0 56.7898 55.8472 45.5604 0.678977 0.584716 -0.443957 0.490491 45 57.5 1 0 +2133 1 1 0 56.1924 56.2831 45.2908 0.619242 0.628313 -0.470917 0.490491 45 57.5 1 0 +2134 1 1 0 54.7092 56.1924 43.7169 0.470917 0.619242 -0.628313 0.490491 45 57.5 1 0 +2135 1 1 0 55.1338 56.4658 44.3575 0.513375 0.646578 -0.564254 0.490491 45 57.5 1 0 +2136 1 1 0 54.4396 56.7898 44.1528 0.443957 0.678977 -0.584716 0.490491 45 57.5 1 0 +2137 1 1 0 55.5242 56.6961 45.0356 0.552418 0.669612 -0.496441 0.490491 45 57.5 1 0 +2138 1 1 0 54.8521 57.0447 44.8203 0.485208 0.704471 -0.51797 0.490491 45 57.5 1 0 +2139 1 1 0 54.1427 57.3501 44.6322 0.414272 0.735011 -0.536784 0.490491 45 57.5 1 0 +2140 1 1 0 56.0748 55.4065 44.1805 0.607478 0.54065 -0.581952 0.490491 45 57.5 1 0 +2141 1 1 0 55.8195 56.0748 44.5935 0.581952 0.607478 -0.54065 0.490491 45 57.5 1 0 +2142 1 1 0 55.4065 55.8195 43.9252 0.54065 0.581952 -0.607478 0.490491 45 57.5 1 0 +2143 1 1 0 48.9351 44.4814 41.7289 -0.106494 -0.551859 -0.82711 0.490491 45 57.5 1 0 +2144 1 1 0 48.2747 44.7087 41.6919 -0.172532 -0.529135 -0.830812 0.490491 45 57.5 1 0 +2145 1 1 0 47.6277 44.9579 41.6964 -0.237228 -0.504209 -0.830359 0.490491 45 57.5 1 0 +2146 1 1 0 47.8698 44.2875 42.0735 -0.213023 -0.571251 -0.79265 0.490491 45 57.5 1 0 +2147 1 1 0 48.5259 44.051 42.0983 -0.147413 -0.594895 -0.79017 0.490491 45 57.5 1 0 +2148 1 1 0 48.1257 43.6542 42.5021 -0.187432 -0.634579 -0.749786 0.490491 45 57.5 1 0 +2149 1 1 0 46.962 45.2377 41.7482 -0.303801 -0.476225 -0.825175 0.490491 45 57.5 1 0 +2150 1 1 0 46.3397 45.5302 41.8377 -0.366027 -0.446977 -0.816233 0.490491 45 57.5 1 0 +2151 1 1 0 46.5385 44.8388 42.1655 -0.346153 -0.516122 -0.783452 0.490491 45 57.5 1 0 +2152 1 1 0 45.7287 45.844 41.9698 -0.427135 -0.415597 -0.803016 0.490491 45 57.5 1 0 +2153 1 1 0 45.1429 46.1732 42.141 -0.485712 -0.382683 -0.785899 0.490491 45 57.5 1 0 +2154 1 1 0 45.3157 45.4601 42.4206 -0.46843 -0.45399 -0.757936 0.490491 45 57.5 1 0 +2155 1 1 0 45.9171 45.1376 42.2742 -0.408286 -0.48624 -0.772575 0.490491 45 57.5 1 0 +2156 1 1 0 46.1327 44.4663 42.6229 -0.38673 -0.553372 -0.737712 0.490491 45 57.5 1 0 +2157 1 1 0 45.5174 44.775 42.747 -0.448259 -0.522499 -0.725299 0.490491 45 57.5 1 0 +2158 1 1 0 45.7467 44.1221 43.1181 -0.425325 -0.587785 -0.688191 0.490491 45 57.5 1 0 +2159 1 1 0 47.711 43.2768 42.9602 -0.228899 -0.672319 -0.703983 0.490491 45 57.5 1 0 +2160 1 1 0 47.04 43.5259 42.9769 -0.296004 -0.647412 -0.70231 0.490491 45 57.5 1 0 +2161 1 1 0 47.3262 42.9476 43.4338 -0.267381 -0.705236 -0.65662 0.490491 45 57.5 1 0 +2162 1 1 0 46.3841 43.8081 43.0296 -0.361591 -0.619186 -0.697037 0.490491 45 57.5 1 0 +2163 1 1 0 46.6531 43.2109 43.465 -0.334691 -0.678913 -0.653497 0.490491 45 57.5 1 0 +2164 1 1 0 46.0023 43.5055 43.5316 -0.399769 -0.649448 -0.64684 0.490491 45 57.5 1 0 +2165 1 1 0 46.2825 42.9289 43.985 -0.371748 -0.707107 -0.601501 0.490491 45 57.5 1 0 +2166 1 1 0 46.9479 42.6521 43.9426 -0.305212 -0.734794 -0.605742 0.490491 45 57.5 1 0 +2167 1 1 0 46.5857 42.3959 44.4755 -0.341435 -0.760406 -0.552454 0.490491 45 57.5 1 0 +2168 1 1 0 47.1968 44.5489 42.0989 -0.280319 -0.545109 -0.790112 0.490491 45 57.5 1 0 +2169 1 1 0 46.7786 44.1631 42.5466 -0.322141 -0.583692 -0.745339 0.490491 45 57.5 1 0 +2170 1 1 0 47.4482 43.8907 42.5056 -0.25518 -0.610926 -0.749435 0.490491 45 57.5 1 0 +2171 1 1 0 44.4755 46.5857 42.3959 -0.552454 -0.341435 -0.760406 0.490491 45 57.5 1 0 +2172 1 1 0 43.9426 46.9479 42.6521 -0.605742 -0.305212 -0.734794 0.490491 45 57.5 1 0 +2173 1 1 0 43.985 46.2825 42.9289 -0.601501 -0.371748 -0.707107 0.490491 45 57.5 1 0 +2174 1 1 0 43.4338 47.3262 42.9476 -0.65662 -0.267381 -0.705236 0.490491 45 57.5 1 0 +2175 1 1 0 42.9602 47.711 43.2768 -0.703983 -0.228899 -0.672319 0.490491 45 57.5 1 0 +2176 1 1 0 42.9769 47.04 43.5259 -0.70231 -0.296004 -0.647412 0.490491 45 57.5 1 0 +2177 1 1 0 43.465 46.6531 43.2109 -0.653497 -0.334691 -0.678913 0.490491 45 57.5 1 0 +2178 1 1 0 43.5316 46.0023 43.5055 -0.64684 -0.399769 -0.649448 0.490491 45 57.5 1 0 +2179 1 1 0 43.0296 46.3841 43.8081 -0.697037 -0.361591 -0.619186 0.490491 45 57.5 1 0 +2180 1 1 0 43.1181 45.7467 44.1221 -0.688191 -0.425325 -0.587785 0.490491 45 57.5 1 0 +2181 1 1 0 42.5021 48.1257 43.6542 -0.749786 -0.187432 -0.634579 0.490491 45 57.5 1 0 +2182 1 1 0 42.0983 48.5259 44.051 -0.79017 -0.147413 -0.594895 0.490491 45 57.5 1 0 +2183 1 1 0 42.0735 47.8698 44.2875 -0.79265 -0.213023 -0.571251 0.490491 45 57.5 1 0 +2184 1 1 0 41.7289 48.9351 44.4814 -0.82711 -0.106494 -0.551859 0.490491 45 57.5 1 0 +2185 1 1 0 41.6919 48.2747 44.7087 -0.830812 -0.172532 -0.529135 0.490491 45 57.5 1 0 +2186 1 1 0 41.6964 47.6277 44.9579 -0.830359 -0.237228 -0.504209 0.490491 45 57.5 1 0 +2187 1 1 0 42.6229 46.1327 44.4663 -0.737712 -0.38673 -0.553372 0.490491 45 57.5 1 0 +2188 1 1 0 42.747 45.5174 44.775 -0.725299 -0.448259 -0.522499 0.490491 45 57.5 1 0 +2189 1 1 0 42.1655 46.5385 44.8388 -0.783452 -0.346153 -0.516122 0.490491 45 57.5 1 0 +2190 1 1 0 42.2742 45.9171 45.1376 -0.772575 -0.408286 -0.48624 0.490491 45 57.5 1 0 +2191 1 1 0 42.4206 45.3157 45.4601 -0.757936 -0.46843 -0.45399 0.490491 45 57.5 1 0 +2192 1 1 0 41.7482 46.962 45.2377 -0.825175 -0.303801 -0.476225 0.490491 45 57.5 1 0 +2193 1 1 0 41.8377 46.3397 45.5302 -0.816233 -0.366027 -0.446977 0.490491 45 57.5 1 0 +2194 1 1 0 41.9698 45.7287 45.844 -0.803016 -0.427135 -0.415597 0.490491 45 57.5 1 0 +2195 1 1 0 42.141 45.1429 46.1732 -0.785899 -0.485712 -0.382683 0.490491 45 57.5 1 0 +2196 1 1 0 42.5056 47.4482 43.8907 -0.749435 -0.25518 -0.610926 0.490491 45 57.5 1 0 +2197 1 1 0 42.0989 47.1968 44.5489 -0.790112 -0.280319 -0.545109 0.490491 45 57.5 1 0 +2198 1 1 0 42.5466 46.7786 44.1631 -0.745339 -0.322141 -0.583692 0.490491 45 57.5 1 0 +2199 1 1 0 46.1732 42.141 45.1429 -0.382683 -0.785899 -0.485712 0.490491 45 57.5 1 0 +2200 1 1 0 45.4601 42.4206 45.3157 -0.45399 -0.757936 -0.46843 0.490491 45 57.5 1 0 +2201 1 1 0 45.844 41.9698 45.7287 -0.415597 -0.803016 -0.427135 0.490491 45 57.5 1 0 +2202 1 1 0 44.775 42.747 45.5174 -0.522499 -0.725299 -0.448259 0.490491 45 57.5 1 0 +2203 1 1 0 45.1376 42.2742 45.9171 -0.48624 -0.772575 -0.408286 0.490491 45 57.5 1 0 +2204 1 1 0 44.1221 43.1181 45.7467 -0.587785 -0.688191 -0.425325 0.490491 45 57.5 1 0 +2205 1 1 0 44.4663 42.6229 46.1327 -0.553372 -0.737712 -0.38673 0.490491 45 57.5 1 0 +2206 1 1 0 44.8388 42.1655 46.5385 -0.516122 -0.783452 -0.346153 0.490491 45 57.5 1 0 +2207 1 1 0 45.5302 41.8377 46.3397 -0.446977 -0.816233 -0.366027 0.490491 45 57.5 1 0 +2208 1 1 0 45.2377 41.7482 46.962 -0.476225 -0.825175 -0.303801 0.490491 45 57.5 1 0 +2209 1 1 0 43.5055 43.5316 46.0023 -0.649448 -0.64684 -0.399769 0.490491 45 57.5 1 0 +2210 1 1 0 43.8081 43.0296 46.3841 -0.619186 -0.697037 -0.361591 0.490491 45 57.5 1 0 +2211 1 1 0 42.9289 43.985 46.2825 -0.707107 -0.601501 -0.371748 0.490491 45 57.5 1 0 +2212 1 1 0 43.2109 43.465 46.6531 -0.678913 -0.653497 -0.334691 0.490491 45 57.5 1 0 +2213 1 1 0 43.5259 42.9769 47.04 -0.647412 -0.70231 -0.296004 0.490491 45 57.5 1 0 +2214 1 1 0 42.3959 44.4755 46.5857 -0.760406 -0.552454 -0.341435 0.490491 45 57.5 1 0 +2215 1 1 0 42.6521 43.9426 46.9479 -0.734794 -0.605742 -0.305212 0.490491 45 57.5 1 0 +2216 1 1 0 42.9476 43.4338 47.3262 -0.705236 -0.65662 -0.267381 0.490491 45 57.5 1 0 +2217 1 1 0 43.2768 42.9602 47.711 -0.672319 -0.703983 -0.228899 0.490491 45 57.5 1 0 +2218 1 1 0 44.9579 41.6964 47.6277 -0.504209 -0.830359 -0.237228 0.490491 45 57.5 1 0 +2219 1 1 0 44.2875 42.0735 47.8698 -0.571251 -0.79265 -0.213023 0.490491 45 57.5 1 0 +2220 1 1 0 44.7087 41.6919 48.2747 -0.529135 -0.830812 -0.172532 0.490491 45 57.5 1 0 +2221 1 1 0 43.6542 42.5021 48.1257 -0.634579 -0.749786 -0.187432 0.490491 45 57.5 1 0 +2222 1 1 0 44.051 42.0983 48.5259 -0.594895 -0.79017 -0.147413 0.490491 45 57.5 1 0 +2223 1 1 0 44.4814 41.7289 48.9351 -0.551859 -0.82711 -0.106494 0.490491 45 57.5 1 0 +2224 1 1 0 44.1631 42.5466 46.7786 -0.583692 -0.745339 -0.322141 0.490491 45 57.5 1 0 +2225 1 1 0 43.8907 42.5056 47.4482 -0.610926 -0.749435 -0.25518 0.490491 45 57.5 1 0 +2226 1 1 0 44.5489 42.0989 47.1968 -0.545109 -0.790112 -0.280319 0.490491 45 57.5 1 0 +2227 1 1 0 44.6322 45.8573 42.6499 -0.536784 -0.414272 -0.735011 0.490491 45 57.5 1 0 +2228 1 1 0 44.1528 45.5604 43.2102 -0.584716 -0.443957 -0.678977 0.490491 45 57.5 1 0 +2229 1 1 0 43.7169 45.2908 43.8076 -0.628313 -0.470917 -0.619242 0.490491 45 57.5 1 0 +2230 1 1 0 44.3575 44.8662 43.5342 -0.564254 -0.513375 -0.646578 0.490491 45 57.5 1 0 +2231 1 1 0 44.8203 45.1479 42.9553 -0.51797 -0.485208 -0.704471 0.490491 45 57.5 1 0 +2232 1 1 0 45.0356 44.4758 43.3039 -0.496441 -0.552418 -0.669612 0.490491 45 57.5 1 0 +2233 1 1 0 43.3039 45.0356 44.4758 -0.669612 -0.496441 -0.552418 0.490491 45 57.5 1 0 +2234 1 1 0 42.9553 44.8203 45.1479 -0.704471 -0.51797 -0.485208 0.490491 45 57.5 1 0 +2235 1 1 0 43.5342 44.3575 44.8662 -0.646578 -0.564254 -0.513375 0.490491 45 57.5 1 0 +2236 1 1 0 42.6499 44.6322 45.8573 -0.735011 -0.536784 -0.414272 0.490491 45 57.5 1 0 +2237 1 1 0 43.2102 44.1528 45.5604 -0.678977 -0.584716 -0.443957 0.490491 45 57.5 1 0 +2238 1 1 0 43.8076 43.7169 45.2908 -0.619242 -0.628313 -0.470917 0.490491 45 57.5 1 0 +2239 1 1 0 45.2908 43.8076 43.7169 -0.470917 -0.619242 -0.628313 0.490491 45 57.5 1 0 +2240 1 1 0 44.8662 43.5342 44.3575 -0.513375 -0.646578 -0.564254 0.490491 45 57.5 1 0 +2241 1 1 0 45.5604 43.2102 44.1528 -0.443957 -0.678977 -0.584716 0.490491 45 57.5 1 0 +2242 1 1 0 44.4758 43.3039 45.0356 -0.552418 -0.669612 -0.496441 0.490491 45 57.5 1 0 +2243 1 1 0 45.1479 42.9553 44.8203 -0.485208 -0.704471 -0.51797 0.490491 45 57.5 1 0 +2244 1 1 0 45.8573 42.6499 44.6322 -0.414272 -0.735011 -0.536784 0.490491 45 57.5 1 0 +2245 1 1 0 43.9252 44.5935 44.1805 -0.607478 -0.54065 -0.581952 0.490491 45 57.5 1 0 +2246 1 1 0 44.1805 43.9252 44.5935 -0.581952 -0.607478 -0.54065 0.490491 45 57.5 1 0 +2247 1 1 0 44.5935 44.1805 43.9252 -0.54065 -0.581952 -0.607478 0.490491 45 57.5 1 0 +2248 1 1 0 51.0649 44.4814 41.7289 0.106494 -0.551859 -0.82711 0.490491 45 57.5 1 0 +2249 1 1 0 51.4741 44.051 42.0983 0.147413 -0.594895 -0.79017 0.490491 45 57.5 1 0 +2250 1 1 0 51.8743 43.6542 42.5021 0.187432 -0.634579 -0.749786 0.490491 45 57.5 1 0 +2251 1 1 0 52.1302 44.2875 42.0735 0.213023 -0.571251 -0.79265 0.490491 45 57.5 1 0 +2252 1 1 0 51.7253 44.7087 41.6919 0.172532 -0.529135 -0.830812 0.490491 45 57.5 1 0 +2253 1 1 0 52.3723 44.9579 41.6964 0.237228 -0.504209 -0.830359 0.490491 45 57.5 1 0 +2254 1 1 0 52.289 43.2768 42.9602 0.228899 -0.672319 -0.703983 0.490491 45 57.5 1 0 +2255 1 1 0 52.6738 42.9476 43.4338 0.267381 -0.705236 -0.65662 0.490491 45 57.5 1 0 +2256 1 1 0 52.96 43.5259 42.9769 0.296004 -0.647412 -0.70231 0.490491 45 57.5 1 0 +2257 1 1 0 53.0521 42.6521 43.9426 0.305212 -0.734794 -0.605742 0.490491 45 57.5 1 0 +2258 1 1 0 53.4143 42.3959 44.4755 0.341435 -0.760406 -0.552454 0.490491 45 57.5 1 0 +2259 1 1 0 53.7175 42.9289 43.985 0.371748 -0.707107 -0.601501 0.490491 45 57.5 1 0 +2260 1 1 0 53.3469 43.2109 43.465 0.334691 -0.678913 -0.653497 0.490491 45 57.5 1 0 +2261 1 1 0 53.6159 43.8081 43.0296 0.361591 -0.619186 -0.697037 0.490491 45 57.5 1 0 +2262 1 1 0 53.9977 43.5055 43.5316 0.399769 -0.649448 -0.64684 0.490491 45 57.5 1 0 +2263 1 1 0 54.2533 44.1221 43.1181 0.425325 -0.587785 -0.688191 0.490491 45 57.5 1 0 +2264 1 1 0 53.038 45.2377 41.7482 0.303801 -0.476225 -0.825175 0.490491 45 57.5 1 0 +2265 1 1 0 53.4615 44.8388 42.1655 0.346153 -0.516122 -0.783452 0.490491 45 57.5 1 0 +2266 1 1 0 53.6603 45.5302 41.8377 0.366027 -0.446977 -0.816233 0.490491 45 57.5 1 0 +2267 1 1 0 53.8673 44.4663 42.6229 0.38673 -0.553372 -0.737712 0.490491 45 57.5 1 0 +2268 1 1 0 54.0829 45.1376 42.2742 0.408286 -0.48624 -0.772575 0.490491 45 57.5 1 0 +2269 1 1 0 54.4826 44.775 42.747 0.448259 -0.522499 -0.725299 0.490491 45 57.5 1 0 +2270 1 1 0 54.6843 45.4601 42.4206 0.46843 -0.45399 -0.757936 0.490491 45 57.5 1 0 +2271 1 1 0 54.2713 45.844 41.9698 0.427135 -0.415597 -0.803016 0.490491 45 57.5 1 0 +2272 1 1 0 54.8571 46.1732 42.141 0.485712 -0.382683 -0.785899 0.490491 45 57.5 1 0 +2273 1 1 0 52.5518 43.8907 42.5056 0.25518 -0.610926 -0.749435 0.490491 45 57.5 1 0 +2274 1 1 0 53.2214 44.1631 42.5466 0.322141 -0.583692 -0.745339 0.490491 45 57.5 1 0 +2275 1 1 0 52.8032 44.5489 42.0989 0.280319 -0.545109 -0.790112 0.490491 45 57.5 1 0 +2276 1 1 0 53.8268 42.141 45.1429 0.382683 -0.785899 -0.485712 0.490491 45 57.5 1 0 +2277 1 1 0 54.156 41.9698 45.7287 0.415597 -0.803016 -0.427135 0.490491 45 57.5 1 0 +2278 1 1 0 54.5399 42.4206 45.3157 0.45399 -0.757936 -0.46843 0.490491 45 57.5 1 0 +2279 1 1 0 54.4698 41.8377 46.3397 0.446977 -0.816233 -0.366027 0.490491 45 57.5 1 0 +2280 1 1 0 54.7623 41.7482 46.962 0.476225 -0.825175 -0.303801 0.490491 45 57.5 1 0 +2281 1 1 0 55.1612 42.1655 46.5385 0.516122 -0.783452 -0.346153 0.490491 45 57.5 1 0 +2282 1 1 0 54.8624 42.2742 45.9171 0.48624 -0.772575 -0.408286 0.490491 45 57.5 1 0 +2283 1 1 0 55.225 42.747 45.5174 0.522499 -0.725299 -0.448259 0.490491 45 57.5 1 0 +2284 1 1 0 55.5337 42.6229 46.1327 0.553372 -0.737712 -0.38673 0.490491 45 57.5 1 0 +2285 1 1 0 55.8779 43.1181 45.7467 0.587785 -0.688191 -0.425325 0.490491 45 57.5 1 0 +2286 1 1 0 55.0421 41.6964 47.6277 0.504209 -0.830359 -0.237228 0.490491 45 57.5 1 0 +2287 1 1 0 55.2913 41.6919 48.2747 0.529135 -0.830812 -0.172532 0.490491 45 57.5 1 0 +2288 1 1 0 55.7125 42.0735 47.8698 0.571251 -0.79265 -0.213023 0.490491 45 57.5 1 0 +2289 1 1 0 55.5186 41.7289 48.9351 0.551859 -0.82711 -0.106494 0.490491 45 57.5 1 0 +2290 1 1 0 55.949 42.0983 48.5259 0.594895 -0.79017 -0.147413 0.490491 45 57.5 1 0 +2291 1 1 0 56.3458 42.5021 48.1257 0.634579 -0.749786 -0.187432 0.490491 45 57.5 1 0 +2292 1 1 0 56.1919 43.0296 46.3841 0.619186 -0.697037 -0.361591 0.490491 45 57.5 1 0 +2293 1 1 0 56.4945 43.5316 46.0023 0.649448 -0.64684 -0.399769 0.490491 45 57.5 1 0 +2294 1 1 0 56.4741 42.9769 47.04 0.647412 -0.70231 -0.296004 0.490491 45 57.5 1 0 +2295 1 1 0 56.7891 43.465 46.6531 0.678913 -0.653497 -0.334691 0.490491 45 57.5 1 0 +2296 1 1 0 57.0711 43.985 46.2825 0.707107 -0.601501 -0.371748 0.490491 45 57.5 1 0 +2297 1 1 0 56.7232 42.9602 47.711 0.672319 -0.703983 -0.228899 0.490491 45 57.5 1 0 +2298 1 1 0 57.0524 43.4338 47.3262 0.705236 -0.65662 -0.267381 0.490491 45 57.5 1 0 +2299 1 1 0 57.3479 43.9426 46.9479 0.734794 -0.605742 -0.305212 0.490491 45 57.5 1 0 +2300 1 1 0 57.6041 44.4755 46.5857 0.760406 -0.552454 -0.341435 0.490491 45 57.5 1 0 +2301 1 1 0 55.4511 42.0989 47.1968 0.545109 -0.790112 -0.280319 0.490491 45 57.5 1 0 +2302 1 1 0 56.1093 42.5056 47.4482 0.610926 -0.749435 -0.25518 0.490491 45 57.5 1 0 +2303 1 1 0 55.8369 42.5466 46.7786 0.583692 -0.745339 -0.322141 0.490491 45 57.5 1 0 +2304 1 1 0 55.5245 46.5857 42.3959 0.552454 -0.341435 -0.760406 0.490491 45 57.5 1 0 +2305 1 1 0 56.015 46.2825 42.9289 0.601501 -0.371748 -0.707107 0.490491 45 57.5 1 0 +2306 1 1 0 56.0574 46.9479 42.6521 0.605742 -0.305212 -0.734794 0.490491 45 57.5 1 0 +2307 1 1 0 56.4684 46.0023 43.5055 0.64684 -0.399769 -0.649448 0.490491 45 57.5 1 0 +2308 1 1 0 56.535 46.6531 43.2109 0.653497 -0.334691 -0.678913 0.490491 45 57.5 1 0 +2309 1 1 0 56.8819 45.7467 44.1221 0.688191 -0.425325 -0.587785 0.490491 45 57.5 1 0 +2310 1 1 0 56.9704 46.3841 43.8081 0.697037 -0.361591 -0.619186 0.490491 45 57.5 1 0 +2311 1 1 0 57.0231 47.04 43.5259 0.70231 -0.296004 -0.647412 0.490491 45 57.5 1 0 +2312 1 1 0 56.5662 47.3262 42.9476 0.65662 -0.267381 -0.705236 0.490491 45 57.5 1 0 +2313 1 1 0 57.0398 47.711 43.2768 0.703983 -0.228899 -0.672319 0.490491 45 57.5 1 0 +2314 1 1 0 57.253 45.5174 44.775 0.725299 -0.448259 -0.522499 0.490491 45 57.5 1 0 +2315 1 1 0 57.3771 46.1327 44.4663 0.737712 -0.38673 -0.553372 0.490491 45 57.5 1 0 +2316 1 1 0 57.5794 45.3157 45.4601 0.757936 -0.46843 -0.45399 0.490491 45 57.5 1 0 +2317 1 1 0 57.7258 45.9171 45.1376 0.772575 -0.408286 -0.48624 0.490491 45 57.5 1 0 +2318 1 1 0 57.8345 46.5385 44.8388 0.783452 -0.346153 -0.516122 0.490491 45 57.5 1 0 +2319 1 1 0 57.859 45.1429 46.1732 0.785899 -0.485712 -0.382683 0.490491 45 57.5 1 0 +2320 1 1 0 58.0302 45.7287 45.844 0.803016 -0.427135 -0.415597 0.490491 45 57.5 1 0 +2321 1 1 0 58.1623 46.3397 45.5302 0.816233 -0.366027 -0.446977 0.490491 45 57.5 1 0 +2322 1 1 0 58.2518 46.962 45.2377 0.825175 -0.303801 -0.476225 0.490491 45 57.5 1 0 +2323 1 1 0 57.4979 48.1257 43.6542 0.749786 -0.187432 -0.634579 0.490491 45 57.5 1 0 +2324 1 1 0 57.9265 47.8698 44.2875 0.79265 -0.213023 -0.571251 0.490491 45 57.5 1 0 +2325 1 1 0 57.9017 48.5259 44.051 0.79017 -0.147413 -0.594895 0.490491 45 57.5 1 0 +2326 1 1 0 58.3036 47.6277 44.9579 0.830359 -0.237228 -0.504209 0.490491 45 57.5 1 0 +2327 1 1 0 58.3081 48.2747 44.7087 0.830812 -0.172532 -0.529135 0.490491 45 57.5 1 0 +2328 1 1 0 58.2711 48.9351 44.4814 0.82711 -0.106494 -0.551859 0.490491 45 57.5 1 0 +2329 1 1 0 57.4534 46.7786 44.1631 0.745339 -0.322141 -0.583692 0.490491 45 57.5 1 0 +2330 1 1 0 57.9011 47.1968 44.5489 0.790112 -0.280319 -0.545109 0.490491 45 57.5 1 0 +2331 1 1 0 57.4944 47.4482 43.8907 0.749435 -0.25518 -0.610926 0.490491 45 57.5 1 0 +2332 1 1 0 54.1427 42.6499 44.6322 0.414272 -0.735011 -0.536784 0.490491 45 57.5 1 0 +2333 1 1 0 54.8521 42.9553 44.8203 0.485208 -0.704471 -0.51797 0.490491 45 57.5 1 0 +2334 1 1 0 55.5242 43.3039 45.0356 0.552418 -0.669612 -0.496441 0.490491 45 57.5 1 0 +2335 1 1 0 55.1338 43.5342 44.3575 0.513375 -0.646578 -0.564254 0.490491 45 57.5 1 0 +2336 1 1 0 54.4396 43.2102 44.1528 0.443957 -0.678977 -0.584716 0.490491 45 57.5 1 0 +2337 1 1 0 54.7092 43.8076 43.7169 0.470917 -0.619242 -0.628313 0.490491 45 57.5 1 0 +2338 1 1 0 56.1924 43.7169 45.2908 0.619242 -0.628313 -0.470917 0.490491 45 57.5 1 0 +2339 1 1 0 56.7898 44.1528 45.5604 0.678977 -0.584716 -0.443957 0.490491 45 57.5 1 0 +2340 1 1 0 56.4658 44.3575 44.8662 0.646578 -0.564254 -0.513375 0.490491 45 57.5 1 0 +2341 1 1 0 57.3501 44.6322 45.8573 0.735011 -0.536784 -0.414272 0.490491 45 57.5 1 0 +2342 1 1 0 57.0447 44.8203 45.1479 0.704471 -0.51797 -0.485208 0.490491 45 57.5 1 0 +2343 1 1 0 56.6961 45.0356 44.4758 0.669612 -0.496441 -0.552418 0.490491 45 57.5 1 0 +2344 1 1 0 54.9644 44.4758 43.3039 0.496441 -0.552418 -0.669612 0.490491 45 57.5 1 0 +2345 1 1 0 55.6425 44.8662 43.5342 0.564254 -0.513375 -0.646578 0.490491 45 57.5 1 0 +2346 1 1 0 55.1797 45.1479 42.9553 0.51797 -0.485208 -0.704471 0.490491 45 57.5 1 0 +2347 1 1 0 56.2831 45.2908 43.8076 0.628313 -0.470917 -0.619242 0.490491 45 57.5 1 0 +2348 1 1 0 55.8472 45.5604 43.2102 0.584716 -0.443957 -0.678977 0.490491 45 57.5 1 0 +2349 1 1 0 55.3678 45.8573 42.6499 0.536784 -0.414272 -0.735011 0.490491 45 57.5 1 0 +2350 1 1 0 55.8195 43.9252 44.5935 0.581952 -0.607478 -0.54065 0.490491 45 57.5 1 0 +2351 1 1 0 56.0748 44.5935 44.1805 0.607478 -0.54065 -0.581952 0.490491 45 57.5 1 0 +2352 1 1 0 55.4065 44.1805 43.9252 0.54065 -0.581952 -0.607478 0.490491 45 57.5 1 0 +2353 1 1 0 48.9351 44.4814 58.2711 -0.106494 -0.551859 0.82711 0.490491 45 57.5 1 0 +2354 1 1 0 48.5259 44.051 57.9017 -0.147413 -0.594895 0.79017 0.490491 45 57.5 1 0 +2355 1 1 0 48.1257 43.6542 57.4979 -0.187432 -0.634579 0.749786 0.490491 45 57.5 1 0 +2356 1 1 0 47.8698 44.2875 57.9265 -0.213023 -0.571251 0.79265 0.490491 45 57.5 1 0 +2357 1 1 0 48.2747 44.7087 58.3081 -0.172532 -0.529135 0.830812 0.490491 45 57.5 1 0 +2358 1 1 0 47.6277 44.9579 58.3036 -0.237228 -0.504209 0.830359 0.490491 45 57.5 1 0 +2359 1 1 0 47.711 43.2768 57.0398 -0.228899 -0.672319 0.703983 0.490491 45 57.5 1 0 +2360 1 1 0 47.3262 42.9476 56.5662 -0.267381 -0.705236 0.65662 0.490491 45 57.5 1 0 +2361 1 1 0 47.04 43.5259 57.0231 -0.296004 -0.647412 0.70231 0.490491 45 57.5 1 0 +2362 1 1 0 46.9479 42.6521 56.0574 -0.305212 -0.734794 0.605742 0.490491 45 57.5 1 0 +2363 1 1 0 46.5857 42.3959 55.5245 -0.341435 -0.760406 0.552454 0.490491 45 57.5 1 0 +2364 1 1 0 46.2825 42.9289 56.015 -0.371748 -0.707107 0.601501 0.490491 45 57.5 1 0 +2365 1 1 0 46.6531 43.2109 56.535 -0.334691 -0.678913 0.653497 0.490491 45 57.5 1 0 +2366 1 1 0 46.3841 43.8081 56.9704 -0.361591 -0.619186 0.697037 0.490491 45 57.5 1 0 +2367 1 1 0 46.0023 43.5055 56.4684 -0.399769 -0.649448 0.64684 0.490491 45 57.5 1 0 +2368 1 1 0 45.7467 44.1221 56.8819 -0.425325 -0.587785 0.688191 0.490491 45 57.5 1 0 +2369 1 1 0 46.962 45.2377 58.2518 -0.303801 -0.476225 0.825175 0.490491 45 57.5 1 0 +2370 1 1 0 46.5385 44.8388 57.8345 -0.346153 -0.516122 0.783452 0.490491 45 57.5 1 0 +2371 1 1 0 46.3397 45.5302 58.1623 -0.366027 -0.446977 0.816233 0.490491 45 57.5 1 0 +2372 1 1 0 46.1327 44.4663 57.3771 -0.38673 -0.553372 0.737712 0.490491 45 57.5 1 0 +2373 1 1 0 45.9171 45.1376 57.7258 -0.408286 -0.48624 0.772575 0.490491 45 57.5 1 0 +2374 1 1 0 45.5174 44.775 57.253 -0.448259 -0.522499 0.725299 0.490491 45 57.5 1 0 +2375 1 1 0 45.3157 45.4601 57.5794 -0.46843 -0.45399 0.757936 0.490491 45 57.5 1 0 +2376 1 1 0 45.7287 45.844 58.0302 -0.427135 -0.415597 0.803016 0.490491 45 57.5 1 0 +2377 1 1 0 45.1429 46.1732 57.859 -0.485712 -0.382683 0.785899 0.490491 45 57.5 1 0 +2378 1 1 0 47.4482 43.8907 57.4944 -0.25518 -0.610926 0.749435 0.490491 45 57.5 1 0 +2379 1 1 0 46.7786 44.1631 57.4534 -0.322141 -0.583692 0.745339 0.490491 45 57.5 1 0 +2380 1 1 0 47.1968 44.5489 57.9011 -0.280319 -0.545109 0.790112 0.490491 45 57.5 1 0 +2381 1 1 0 46.1732 42.141 54.8571 -0.382683 -0.785899 0.485712 0.490491 45 57.5 1 0 +2382 1 1 0 45.844 41.9698 54.2713 -0.415597 -0.803016 0.427135 0.490491 45 57.5 1 0 +2383 1 1 0 45.4601 42.4206 54.6843 -0.45399 -0.757936 0.46843 0.490491 45 57.5 1 0 +2384 1 1 0 45.5302 41.8377 53.6603 -0.446977 -0.816233 0.366027 0.490491 45 57.5 1 0 +2385 1 1 0 45.2377 41.7482 53.038 -0.476225 -0.825175 0.303801 0.490491 45 57.5 1 0 +2386 1 1 0 44.8388 42.1655 53.4615 -0.516122 -0.783452 0.346153 0.490491 45 57.5 1 0 +2387 1 1 0 45.1376 42.2742 54.0829 -0.48624 -0.772575 0.408286 0.490491 45 57.5 1 0 +2388 1 1 0 44.775 42.747 54.4826 -0.522499 -0.725299 0.448259 0.490491 45 57.5 1 0 +2389 1 1 0 44.4663 42.6229 53.8673 -0.553372 -0.737712 0.38673 0.490491 45 57.5 1 0 +2390 1 1 0 44.1221 43.1181 54.2533 -0.587785 -0.688191 0.425325 0.490491 45 57.5 1 0 +2391 1 1 0 44.9579 41.6964 52.3723 -0.504209 -0.830359 0.237228 0.490491 45 57.5 1 0 +2392 1 1 0 44.7087 41.6919 51.7253 -0.529135 -0.830812 0.172532 0.490491 45 57.5 1 0 +2393 1 1 0 44.2875 42.0735 52.1302 -0.571251 -0.79265 0.213023 0.490491 45 57.5 1 0 +2394 1 1 0 44.4814 41.7289 51.0649 -0.551859 -0.82711 0.106494 0.490491 45 57.5 1 0 +2395 1 1 0 44.051 42.0983 51.4741 -0.594895 -0.79017 0.147413 0.490491 45 57.5 1 0 +2396 1 1 0 43.6542 42.5021 51.8743 -0.634579 -0.749786 0.187432 0.490491 45 57.5 1 0 +2397 1 1 0 43.8081 43.0296 53.6159 -0.619186 -0.697037 0.361591 0.490491 45 57.5 1 0 +2398 1 1 0 43.5055 43.5316 53.9977 -0.649448 -0.64684 0.399769 0.490491 45 57.5 1 0 +2399 1 1 0 43.5259 42.9769 52.96 -0.647412 -0.70231 0.296004 0.490491 45 57.5 1 0 +2400 1 1 0 43.2109 43.465 53.3469 -0.678913 -0.653497 0.334691 0.490491 45 57.5 1 0 +2401 1 1 0 42.9289 43.985 53.7175 -0.707107 -0.601501 0.371748 0.490491 45 57.5 1 0 +2402 1 1 0 43.2768 42.9602 52.289 -0.672319 -0.703983 0.228899 0.490491 45 57.5 1 0 +2403 1 1 0 42.9476 43.4338 52.6738 -0.705236 -0.65662 0.267381 0.490491 45 57.5 1 0 +2404 1 1 0 42.6521 43.9426 53.0521 -0.734794 -0.605742 0.305212 0.490491 45 57.5 1 0 +2405 1 1 0 42.3959 44.4755 53.4143 -0.760406 -0.552454 0.341435 0.490491 45 57.5 1 0 +2406 1 1 0 44.5489 42.0989 52.8032 -0.545109 -0.790112 0.280319 0.490491 45 57.5 1 0 +2407 1 1 0 43.8907 42.5056 52.5518 -0.610926 -0.749435 0.25518 0.490491 45 57.5 1 0 +2408 1 1 0 44.1631 42.5466 53.2214 -0.583692 -0.745339 0.322141 0.490491 45 57.5 1 0 +2409 1 1 0 44.4755 46.5857 57.6041 -0.552454 -0.341435 0.760406 0.490491 45 57.5 1 0 +2410 1 1 0 43.985 46.2825 57.0711 -0.601501 -0.371748 0.707107 0.490491 45 57.5 1 0 +2411 1 1 0 43.9426 46.9479 57.3479 -0.605742 -0.305212 0.734794 0.490491 45 57.5 1 0 +2412 1 1 0 43.5316 46.0023 56.4945 -0.64684 -0.399769 0.649448 0.490491 45 57.5 1 0 +2413 1 1 0 43.465 46.6531 56.7891 -0.653497 -0.334691 0.678913 0.490491 45 57.5 1 0 +2414 1 1 0 43.1181 45.7467 55.8779 -0.688191 -0.425325 0.587785 0.490491 45 57.5 1 0 +2415 1 1 0 43.0296 46.3841 56.1919 -0.697037 -0.361591 0.619186 0.490491 45 57.5 1 0 +2416 1 1 0 42.9769 47.04 56.4741 -0.70231 -0.296004 0.647412 0.490491 45 57.5 1 0 +2417 1 1 0 43.4338 47.3262 57.0524 -0.65662 -0.267381 0.705236 0.490491 45 57.5 1 0 +2418 1 1 0 42.9602 47.711 56.7232 -0.703983 -0.228899 0.672319 0.490491 45 57.5 1 0 +2419 1 1 0 42.747 45.5174 55.225 -0.725299 -0.448259 0.522499 0.490491 45 57.5 1 0 +2420 1 1 0 42.6229 46.1327 55.5337 -0.737712 -0.38673 0.553372 0.490491 45 57.5 1 0 +2421 1 1 0 42.4206 45.3157 54.5399 -0.757936 -0.46843 0.45399 0.490491 45 57.5 1 0 +2422 1 1 0 42.2742 45.9171 54.8624 -0.772575 -0.408286 0.48624 0.490491 45 57.5 1 0 +2423 1 1 0 42.1655 46.5385 55.1612 -0.783452 -0.346153 0.516122 0.490491 45 57.5 1 0 +2424 1 1 0 42.141 45.1429 53.8268 -0.785899 -0.485712 0.382683 0.490491 45 57.5 1 0 +2425 1 1 0 41.9698 45.7287 54.156 -0.803016 -0.427135 0.415597 0.490491 45 57.5 1 0 +2426 1 1 0 41.8377 46.3397 54.4698 -0.816233 -0.366027 0.446977 0.490491 45 57.5 1 0 +2427 1 1 0 41.7482 46.962 54.7623 -0.825175 -0.303801 0.476225 0.490491 45 57.5 1 0 +2428 1 1 0 42.5021 48.1257 56.3458 -0.749786 -0.187432 0.634579 0.490491 45 57.5 1 0 +2429 1 1 0 42.0735 47.8698 55.7125 -0.79265 -0.213023 0.571251 0.490491 45 57.5 1 0 +2430 1 1 0 42.0983 48.5259 55.949 -0.79017 -0.147413 0.594895 0.490491 45 57.5 1 0 +2431 1 1 0 41.6964 47.6277 55.0421 -0.830359 -0.237228 0.504209 0.490491 45 57.5 1 0 +2432 1 1 0 41.6919 48.2747 55.2913 -0.830812 -0.172532 0.529135 0.490491 45 57.5 1 0 +2433 1 1 0 41.7289 48.9351 55.5186 -0.82711 -0.106494 0.551859 0.490491 45 57.5 1 0 +2434 1 1 0 42.5466 46.7786 55.8369 -0.745339 -0.322141 0.583692 0.490491 45 57.5 1 0 +2435 1 1 0 42.0989 47.1968 55.4511 -0.790112 -0.280319 0.545109 0.490491 45 57.5 1 0 +2436 1 1 0 42.5056 47.4482 56.1093 -0.749435 -0.25518 0.610926 0.490491 45 57.5 1 0 +2437 1 1 0 45.8573 42.6499 55.3678 -0.414272 -0.735011 0.536784 0.490491 45 57.5 1 0 +2438 1 1 0 45.1479 42.9553 55.1797 -0.485208 -0.704471 0.51797 0.490491 45 57.5 1 0 +2439 1 1 0 44.4758 43.3039 54.9644 -0.552418 -0.669612 0.496441 0.490491 45 57.5 1 0 +2440 1 1 0 44.8662 43.5342 55.6425 -0.513375 -0.646578 0.564254 0.490491 45 57.5 1 0 +2441 1 1 0 45.5604 43.2102 55.8472 -0.443957 -0.678977 0.584716 0.490491 45 57.5 1 0 +2442 1 1 0 45.2908 43.8076 56.2831 -0.470917 -0.619242 0.628313 0.490491 45 57.5 1 0 +2443 1 1 0 43.8076 43.7169 54.7092 -0.619242 -0.628313 0.470917 0.490491 45 57.5 1 0 +2444 1 1 0 43.2102 44.1528 54.4396 -0.678977 -0.584716 0.443957 0.490491 45 57.5 1 0 +2445 1 1 0 43.5342 44.3575 55.1338 -0.646578 -0.564254 0.513375 0.490491 45 57.5 1 0 +2446 1 1 0 42.6499 44.6322 54.1427 -0.735011 -0.536784 0.414272 0.490491 45 57.5 1 0 +2447 1 1 0 42.9553 44.8203 54.8521 -0.704471 -0.51797 0.485208 0.490491 45 57.5 1 0 +2448 1 1 0 43.3039 45.0356 55.5242 -0.669612 -0.496441 0.552418 0.490491 45 57.5 1 0 +2449 1 1 0 45.0356 44.4758 56.6961 -0.496441 -0.552418 0.669612 0.490491 45 57.5 1 0 +2450 1 1 0 44.3575 44.8662 56.4658 -0.564254 -0.513375 0.646578 0.490491 45 57.5 1 0 +2451 1 1 0 44.8203 45.1479 57.0447 -0.51797 -0.485208 0.704471 0.490491 45 57.5 1 0 +2452 1 1 0 43.7169 45.2908 56.1924 -0.628313 -0.470917 0.619242 0.490491 45 57.5 1 0 +2453 1 1 0 44.1528 45.5604 56.7898 -0.584716 -0.443957 0.678977 0.490491 45 57.5 1 0 +2454 1 1 0 44.6322 45.8573 57.3501 -0.536784 -0.414272 0.735011 0.490491 45 57.5 1 0 +2455 1 1 0 44.1805 43.9252 55.4065 -0.581952 -0.607478 0.54065 0.490491 45 57.5 1 0 +2456 1 1 0 43.9252 44.5935 55.8195 -0.607478 -0.54065 0.581952 0.490491 45 57.5 1 0 +2457 1 1 0 44.5935 44.1805 56.0748 -0.54065 -0.581952 0.607478 0.490491 45 57.5 1 0 +2458 1 1 0 51.0649 44.4814 58.2711 0.106494 -0.551859 0.82711 0.490491 45 57.5 1 0 +2459 1 1 0 51.7253 44.7087 58.3081 0.172532 -0.529135 0.830812 0.490491 45 57.5 1 0 +2460 1 1 0 52.3723 44.9579 58.3036 0.237228 -0.504209 0.830359 0.490491 45 57.5 1 0 +2461 1 1 0 52.1302 44.2875 57.9265 0.213023 -0.571251 0.79265 0.490491 45 57.5 1 0 +2462 1 1 0 51.4741 44.051 57.9017 0.147413 -0.594895 0.79017 0.490491 45 57.5 1 0 +2463 1 1 0 51.8743 43.6542 57.4979 0.187432 -0.634579 0.749786 0.490491 45 57.5 1 0 +2464 1 1 0 53.038 45.2377 58.2518 0.303801 -0.476225 0.825175 0.490491 45 57.5 1 0 +2465 1 1 0 53.6603 45.5302 58.1623 0.366027 -0.446977 0.816233 0.490491 45 57.5 1 0 +2466 1 1 0 53.4615 44.8388 57.8345 0.346153 -0.516122 0.783452 0.490491 45 57.5 1 0 +2467 1 1 0 54.2713 45.844 58.0302 0.427135 -0.415597 0.803016 0.490491 45 57.5 1 0 +2468 1 1 0 54.8571 46.1732 57.859 0.485712 -0.382683 0.785899 0.490491 45 57.5 1 0 +2469 1 1 0 54.6843 45.4601 57.5794 0.46843 -0.45399 0.757936 0.490491 45 57.5 1 0 +2470 1 1 0 54.0829 45.1376 57.7258 0.408286 -0.48624 0.772575 0.490491 45 57.5 1 0 +2471 1 1 0 53.8673 44.4663 57.3771 0.38673 -0.553372 0.737712 0.490491 45 57.5 1 0 +2472 1 1 0 54.4826 44.775 57.253 0.448259 -0.522499 0.725299 0.490491 45 57.5 1 0 +2473 1 1 0 54.2533 44.1221 56.8819 0.425325 -0.587785 0.688191 0.490491 45 57.5 1 0 +2474 1 1 0 52.289 43.2768 57.0398 0.228899 -0.672319 0.703983 0.490491 45 57.5 1 0 +2475 1 1 0 52.96 43.5259 57.0231 0.296004 -0.647412 0.70231 0.490491 45 57.5 1 0 +2476 1 1 0 52.6738 42.9476 56.5662 0.267381 -0.705236 0.65662 0.490491 45 57.5 1 0 +2477 1 1 0 53.6159 43.8081 56.9704 0.361591 -0.619186 0.697037 0.490491 45 57.5 1 0 +2478 1 1 0 53.3469 43.2109 56.535 0.334691 -0.678913 0.653497 0.490491 45 57.5 1 0 +2479 1 1 0 53.9977 43.5055 56.4684 0.399769 -0.649448 0.64684 0.490491 45 57.5 1 0 +2480 1 1 0 53.7175 42.9289 56.015 0.371748 -0.707107 0.601501 0.490491 45 57.5 1 0 +2481 1 1 0 53.0521 42.6521 56.0574 0.305212 -0.734794 0.605742 0.490491 45 57.5 1 0 +2482 1 1 0 53.4143 42.3959 55.5245 0.341435 -0.760406 0.552454 0.490491 45 57.5 1 0 +2483 1 1 0 52.8032 44.5489 57.9011 0.280319 -0.545109 0.790112 0.490491 45 57.5 1 0 +2484 1 1 0 53.2214 44.1631 57.4534 0.322141 -0.583692 0.745339 0.490491 45 57.5 1 0 +2485 1 1 0 52.5518 43.8907 57.4944 0.25518 -0.610926 0.749435 0.490491 45 57.5 1 0 +2486 1 1 0 55.5245 46.5857 57.6041 0.552454 -0.341435 0.760406 0.490491 45 57.5 1 0 +2487 1 1 0 56.0574 46.9479 57.3479 0.605742 -0.305212 0.734794 0.490491 45 57.5 1 0 +2488 1 1 0 56.015 46.2825 57.0711 0.601501 -0.371748 0.707107 0.490491 45 57.5 1 0 +2489 1 1 0 56.5662 47.3262 57.0524 0.65662 -0.267381 0.705236 0.490491 45 57.5 1 0 +2490 1 1 0 57.0398 47.711 56.7232 0.703983 -0.228899 0.672319 0.490491 45 57.5 1 0 +2491 1 1 0 57.0231 47.04 56.4741 0.70231 -0.296004 0.647412 0.490491 45 57.5 1 0 +2492 1 1 0 56.535 46.6531 56.7891 0.653497 -0.334691 0.678913 0.490491 45 57.5 1 0 +2493 1 1 0 56.4684 46.0023 56.4945 0.64684 -0.399769 0.649448 0.490491 45 57.5 1 0 +2494 1 1 0 56.9704 46.3841 56.1919 0.697037 -0.361591 0.619186 0.490491 45 57.5 1 0 +2495 1 1 0 56.8819 45.7467 55.8779 0.688191 -0.425325 0.587785 0.490491 45 57.5 1 0 +2496 1 1 0 57.4979 48.1257 56.3458 0.749786 -0.187432 0.634579 0.490491 45 57.5 1 0 +2497 1 1 0 57.9017 48.5259 55.949 0.79017 -0.147413 0.594895 0.490491 45 57.5 1 0 +2498 1 1 0 57.9265 47.8698 55.7125 0.79265 -0.213023 0.571251 0.490491 45 57.5 1 0 +2499 1 1 0 58.2711 48.9351 55.5186 0.82711 -0.106494 0.551859 0.490491 45 57.5 1 0 +2500 1 1 0 58.3081 48.2747 55.2913 0.830812 -0.172532 0.529135 0.490491 45 57.5 1 0 +2501 1 1 0 58.3036 47.6277 55.0421 0.830359 -0.237228 0.504209 0.490491 45 57.5 1 0 +2502 1 1 0 57.3771 46.1327 55.5337 0.737712 -0.38673 0.553372 0.490491 45 57.5 1 0 +2503 1 1 0 57.253 45.5174 55.225 0.725299 -0.448259 0.522499 0.490491 45 57.5 1 0 +2504 1 1 0 57.8345 46.5385 55.1612 0.783452 -0.346153 0.516122 0.490491 45 57.5 1 0 +2505 1 1 0 57.7258 45.9171 54.8624 0.772575 -0.408286 0.48624 0.490491 45 57.5 1 0 +2506 1 1 0 57.5794 45.3157 54.5399 0.757936 -0.46843 0.45399 0.490491 45 57.5 1 0 +2507 1 1 0 58.2518 46.962 54.7623 0.825175 -0.303801 0.476225 0.490491 45 57.5 1 0 +2508 1 1 0 58.1623 46.3397 54.4698 0.816233 -0.366027 0.446977 0.490491 45 57.5 1 0 +2509 1 1 0 58.0302 45.7287 54.156 0.803016 -0.427135 0.415597 0.490491 45 57.5 1 0 +2510 1 1 0 57.859 45.1429 53.8268 0.785899 -0.485712 0.382683 0.490491 45 57.5 1 0 +2511 1 1 0 57.4944 47.4482 56.1093 0.749435 -0.25518 0.610926 0.490491 45 57.5 1 0 +2512 1 1 0 57.9011 47.1968 55.4511 0.790112 -0.280319 0.545109 0.490491 45 57.5 1 0 +2513 1 1 0 57.4534 46.7786 55.8369 0.745339 -0.322141 0.583692 0.490491 45 57.5 1 0 +2514 1 1 0 53.8268 42.141 54.8571 0.382683 -0.785899 0.485712 0.490491 45 57.5 1 0 +2515 1 1 0 54.5399 42.4206 54.6843 0.45399 -0.757936 0.46843 0.490491 45 57.5 1 0 +2516 1 1 0 54.156 41.9698 54.2713 0.415597 -0.803016 0.427135 0.490491 45 57.5 1 0 +2517 1 1 0 55.225 42.747 54.4826 0.522499 -0.725299 0.448259 0.490491 45 57.5 1 0 +2518 1 1 0 54.8624 42.2742 54.0829 0.48624 -0.772575 0.408286 0.490491 45 57.5 1 0 +2519 1 1 0 55.8779 43.1181 54.2533 0.587785 -0.688191 0.425325 0.490491 45 57.5 1 0 +2520 1 1 0 55.5337 42.6229 53.8673 0.553372 -0.737712 0.38673 0.490491 45 57.5 1 0 +2521 1 1 0 55.1612 42.1655 53.4615 0.516122 -0.783452 0.346153 0.490491 45 57.5 1 0 +2522 1 1 0 54.4698 41.8377 53.6603 0.446977 -0.816233 0.366027 0.490491 45 57.5 1 0 +2523 1 1 0 54.7623 41.7482 53.038 0.476225 -0.825175 0.303801 0.490491 45 57.5 1 0 +2524 1 1 0 56.4945 43.5316 53.9977 0.649448 -0.64684 0.399769 0.490491 45 57.5 1 0 +2525 1 1 0 56.1919 43.0296 53.6159 0.619186 -0.697037 0.361591 0.490491 45 57.5 1 0 +2526 1 1 0 57.0711 43.985 53.7175 0.707107 -0.601501 0.371748 0.490491 45 57.5 1 0 +2527 1 1 0 56.7891 43.465 53.3469 0.678913 -0.653497 0.334691 0.490491 45 57.5 1 0 +2528 1 1 0 56.4741 42.9769 52.96 0.647412 -0.70231 0.296004 0.490491 45 57.5 1 0 +2529 1 1 0 57.6041 44.4755 53.4143 0.760406 -0.552454 0.341435 0.490491 45 57.5 1 0 +2530 1 1 0 57.3479 43.9426 53.0521 0.734794 -0.605742 0.305212 0.490491 45 57.5 1 0 +2531 1 1 0 57.0524 43.4338 52.6738 0.705236 -0.65662 0.267381 0.490491 45 57.5 1 0 +2532 1 1 0 56.7232 42.9602 52.289 0.672319 -0.703983 0.228899 0.490491 45 57.5 1 0 +2533 1 1 0 55.0421 41.6964 52.3723 0.504209 -0.830359 0.237228 0.490491 45 57.5 1 0 +2534 1 1 0 55.7125 42.0735 52.1302 0.571251 -0.79265 0.213023 0.490491 45 57.5 1 0 +2535 1 1 0 55.2913 41.6919 51.7253 0.529135 -0.830812 0.172532 0.490491 45 57.5 1 0 +2536 1 1 0 56.3458 42.5021 51.8743 0.634579 -0.749786 0.187432 0.490491 45 57.5 1 0 +2537 1 1 0 55.949 42.0983 51.4741 0.594895 -0.79017 0.147413 0.490491 45 57.5 1 0 +2538 1 1 0 55.5186 41.7289 51.0649 0.551859 -0.82711 0.106494 0.490491 45 57.5 1 0 +2539 1 1 0 55.8369 42.5466 53.2214 0.583692 -0.745339 0.322141 0.490491 45 57.5 1 0 +2540 1 1 0 56.1093 42.5056 52.5518 0.610926 -0.749435 0.25518 0.490491 45 57.5 1 0 +2541 1 1 0 55.4511 42.0989 52.8032 0.545109 -0.790112 0.280319 0.490491 45 57.5 1 0 +2542 1 1 0 55.3678 45.8573 57.3501 0.536784 -0.414272 0.735011 0.490491 45 57.5 1 0 +2543 1 1 0 55.8472 45.5604 56.7898 0.584716 -0.443957 0.678977 0.490491 45 57.5 1 0 +2544 1 1 0 56.2831 45.2908 56.1924 0.628313 -0.470917 0.619242 0.490491 45 57.5 1 0 +2545 1 1 0 55.6425 44.8662 56.4658 0.564254 -0.513375 0.646578 0.490491 45 57.5 1 0 +2546 1 1 0 55.1797 45.1479 57.0447 0.51797 -0.485208 0.704471 0.490491 45 57.5 1 0 +2547 1 1 0 54.9644 44.4758 56.6961 0.496441 -0.552418 0.669612 0.490491 45 57.5 1 0 +2548 1 1 0 56.6961 45.0356 55.5242 0.669612 -0.496441 0.552418 0.490491 45 57.5 1 0 +2549 1 1 0 57.0447 44.8203 54.8521 0.704471 -0.51797 0.485208 0.490491 45 57.5 1 0 +2550 1 1 0 56.4658 44.3575 55.1338 0.646578 -0.564254 0.513375 0.490491 45 57.5 1 0 +2551 1 1 0 57.3501 44.6322 54.1427 0.735011 -0.536784 0.414272 0.490491 45 57.5 1 0 +2552 1 1 0 56.7898 44.1528 54.4396 0.678977 -0.584716 0.443957 0.490491 45 57.5 1 0 +2553 1 1 0 56.1924 43.7169 54.7092 0.619242 -0.628313 0.470917 0.490491 45 57.5 1 0 +2554 1 1 0 54.7092 43.8076 56.2831 0.470917 -0.619242 0.628313 0.490491 45 57.5 1 0 +2555 1 1 0 55.1338 43.5342 55.6425 0.513375 -0.646578 0.564254 0.490491 45 57.5 1 0 +2556 1 1 0 54.4396 43.2102 55.8472 0.443957 -0.678977 0.584716 0.490491 45 57.5 1 0 +2557 1 1 0 55.5242 43.3039 54.9644 0.552418 -0.669612 0.496441 0.490491 45 57.5 1 0 +2558 1 1 0 54.8521 42.9553 55.1797 0.485208 -0.704471 0.51797 0.490491 45 57.5 1 0 +2559 1 1 0 54.1427 42.6499 55.3678 0.414272 -0.735011 0.536784 0.490491 45 57.5 1 0 +2560 1 1 0 56.0748 44.5935 55.8195 0.607478 -0.54065 0.581952 0.490491 45 57.5 1 0 +2561 1 1 0 55.8195 43.9252 55.4065 0.581952 -0.607478 0.54065 0.490491 45 57.5 1 0 +2562 1 1 0 55.4065 44.1805 56.0748 0.54065 -0.581952 0.607478 0.490491 45 57.5 1 0 +2563 2 2 1 50 50 62 0 0 1 0.490491 45 57.5 80 0 +2564 3 3 -1 50 50 38 0 0 1 0.490491 45 57.5 80 0 diff --git a/examples/USER/dielectric/in.confined b/examples/USER/dielectric/in.confined new file mode 100644 index 0000000000..c9ae6d712a --- /dev/null +++ b/examples/USER/dielectric/in.confined @@ -0,0 +1,83 @@ +# Two ions, a cation and an anion, confined between two interfaces: epsilon1 | epsilon2 | epsilon1 +# The interface normal vectors should be consistent with ed, pointing from region with epsilon1 to that with epsilon2 +# bottom interface: n = (0, 0, 1) +# top interface: n = (0, 0, -1) +# so that ed's are the same for both interfaces + +variable epsilon1 index 20 +variable epsilon2 index 8 + +variable data index data.confined + +newton off +units lj +atom_style dielectric +atom_modify map array +dimension 3 +boundary p p f + +variable method index gmres # gmres = BEM/GMRES + # icc = BEM/ICC* + # dof = Direct optimization of the functional + # none + +variable ed equal "v_epsilon2 - v_epsilon1" +variable em equal "(v_epsilon2 + v_epsilon1)/2" +variable epsilon equal 1.0 # epsilon at the patch, not used for now +variable area equal 0.866 # patch area, same as in the data file + +read_data ${data} + +group interface type 1 +group ions type 2 3 + +group cations type 2 +group anions type 3 + +# 1.0 = q * epsilon2 = qreal for cations +# -1.0 = q * epsilon2 = qreal for anions +variable qscale equal "1.0 / v_epsilon2" +set group cations charge ${qscale} +variable qscale equal "-1.0 / v_epsilon2" +set group anions charge ${qscale} + +pair_style lj/cut/coul/long/dielectric 1.122 10.0 +pair_coeff * * 1.0 1.0 +pair_coeff 1 1 0.0 1.0 + +kspace_style pppm/dielectric 0.0001 +kspace_modify slab 3.0 + +neigh_modify every 1 delay 0 check yes one 5000 + +#compute ef all efield/atom +dump 1 all custom 100 all.dump id mol type q x y z #fx fy fz c_ef[1] c_ef[2] c_ef[3] +dump 2 interface custom 100 interface.dump id mol type q x y z #fx fy fz c_ef[1] c_ef[2] c_ef[3] +dump_modify 1 sort id + +dump 3 ions custom 100 ions.dump id mol type q x y z fx fy fz #c_ef[1] c_ef[2] c_ef[3] + +fix 1 ions nve + +if "${method} == gmres" then & + "fix 3 interface polarize/bem/gmres 1 1.0e-4" & + "fix_modify 3 itr_max 50 dielectrics ${ed} ${em} ${epsilon} ${area} NULL" & +elif "${method} == icc"& + "fix 3 interface polarize/bem/icc 1 1.0e-4 itr_max 50" & + "fix_modify 3 itr_max 50 dielectrics ${ed} ${em} ${epsilon} ${area} NULL" & +elif "${method} == dof" & + "fix 3 interface polarize/functional 1 0.001" & + "fix_modify 3 dielectrics ${ed} ${em} ${epsilon} ${area} NULL" & +else & + "print 'Unsupported polarization solver' " + +thermo 1000 +thermo_style custom step evdwl ecoul elong epair #f_3 +thermo_modify flush yes + +run 0 + + + + + diff --git a/examples/USER/dielectric/in.nopbc b/examples/USER/dielectric/in.nopbc new file mode 100644 index 0000000000..ada9af2bf5 --- /dev/null +++ b/examples/USER/dielectric/in.nopbc @@ -0,0 +1,51 @@ +# Interface +newton off +units lj +atom_style dielectric +atom_modify map array +dimension 3 +boundary f f f + +variable method index gmres # gmres = BEM/GMRES + # icc = BEM/ICC* + # dof = Direct optimization of the functional + # none + +variable data index data.sphere + +read_data ${data} + +group interface type 1 +group ions type 2 3 + +pair_style lj/cut/coul/cut/dielectric 1.122 20.0 +pair_coeff * * 1.0 1.0 +pair_coeff 1 1 0.0 1.0 + +neigh_modify one 5000 + +#compute ef all efield/atom +dump 1 all custom 100 all.dump id mol type q x y z #c_ef[1] c_ef[2] c_ef[3] +dump 2 interface custom 100 interface.dump id mol type q x y z #c_ef[1] c_ef[2] c_ef[3] + +dump_modify 1 sort id + +fix 1 ions nve + +if "${method} == gmres" then & + "fix 3 interface polarize/bem/gmres 1 1.0e-4" & +elif "${method} == icc"& + "fix 3 interface polarize/bem/icc 1 1.0e-4" & +elif "${method} == dof" & + "fix 3 interface polarize/functional 1 1.0e-4" & +else & + "print 'Unsupported method for polarization' " + +thermo 1000 +thermo_style custom step evdwl ecoul elong epair +thermo_modify flush yes + +run 0 + + + diff --git a/lib/gpu/geryon/hip_device.h b/lib/gpu/geryon/hip_device.h index d3917ed0cf..11100cbea1 100644 --- a/lib/gpu/geryon/hip_device.h +++ b/lib/gpu/geryon/hip_device.h @@ -8,10 +8,6 @@ #ifndef HIP_DEVICE #define HIP_DEVICE -// workaround after GPU package Feb2021 update -// todo: make new neighbor code work with HIP -#define LAL_USE_OLD_NEIGHBOR - #include #include #include diff --git a/lib/gpu/geryon/hip_texture.h b/lib/gpu/geryon/hip_texture.h index 9117adc879..8738f6e2ea 100644 --- a/lib/gpu/geryon/hip_texture.h +++ b/lib/gpu/geryon/hip_texture.h @@ -128,12 +128,12 @@ class UCL_Const { _cq)); } /// Get device ptr associated with object - inline const void* begin() const { return &_global; } + inline const hipDeviceptr_t * begin() const { return &_global; } inline void clear() {} private: hipStream_t _cq; - void* _global; + hipDeviceptr_t _global; size_t _global_bytes; friend class UCL_Kernel; }; diff --git a/lib/gpu/lal_neighbor.h b/lib/gpu/lal_neighbor.h index fb854a706c..c1e1a87ef4 100644 --- a/lib/gpu/lal_neighbor.h +++ b/lib/gpu/lal_neighbor.h @@ -33,6 +33,10 @@ #endif #endif +#if defined(USE_HIP) +#define LAL_USE_OLD_NEIGHBOR +#endif + namespace LAMMPS_AL { class Neighbor { diff --git a/lib/gpu/lal_neighbor_gpu.cu b/lib/gpu/lal_neighbor_gpu.cu index 62c93e6cf1..6fd724b494 100644 --- a/lib/gpu/lal_neighbor_gpu.cu +++ b/lib/gpu/lal_neighbor_gpu.cu @@ -40,6 +40,10 @@ _texture_2d( pos_tex,int4); #endif #endif +#ifdef USE_HIP +#define LAL_USE_OLD_NEIGHBOR +#endif + __kernel void calc_cell_id(const numtyp4 *restrict x_, unsigned *restrict cell_id, int *restrict particle_id, diff --git a/python/.gitignore b/python/.gitignore index 796b96d1c4..9c07c51c3c 100644 --- a/python/.gitignore +++ b/python/.gitignore @@ -1 +1,2 @@ /build +/*.egg-info diff --git a/python/README b/python/README index 204ca2c28d..0757a84cd6 100644 --- a/python/README +++ b/python/README @@ -38,13 +38,14 @@ Once you have successfully wrapped LAMMPS, you can run the Python scripts in the examples sub-directory: trivial.py read/run a LAMMPS input script thru Python -demo.py invoke various LAMMPS library interface routines -simple.py parallel example, mimicing examples/COUPLE/simple/simple.cpp +demo.py invoke various LAMMPS library interface routines +simple.py parallel example, mimicing examples/COUPLE/simple/simple.cpp split.py parallel example mc.py Monte Carlo energy relaxation wrapper on LAMMPS -gui.py GUI go/stop/temperature-slider to control LAMMPS -plot.py real-time temperature plot with GnuPlot via Pizza.py -viz_tool.py real-time viz via some viz package +gui.py GUI go/stop/temperature-slider to control LAMMPS +plot.py real-time temperature plot with GnuPlot via Pizza.py +matplotlib_plot.py real-time temperature plot with Matplotlib via Pizza.py +viz_tool.py real-time viz via some viz package vizplotgui_tool.py combination of viz.py and plot.py and gui.py For the viz_tool.py and vizplotgui_tool.py commands, replace "tool" @@ -100,24 +101,24 @@ split.py in.simple # can run in parallel (see below) gui.py in.gui 100 plot.py in.plot 10 1000 thermo_temp +matplotlib_plot.py in.plot 10 1000 thermo_temp viz_tool.py in.viz 100 5000 vizplotgui_tool.py in.viz 100 thermo_temp To run LAMMPS in parallel from Python, so something like this: -% mpirun -np 4 simple.py in.simple -% mpirun -np 4 python split.py in.simple +% mpirun -np P simple.py in.simple +% mpirun -np P python split.py in.simple If you run simple.py as-is, this will invoke P instances of a one-processor run, where both Python and LAMMPS will run on single processors. Each running job will read the same input file, and write to same log.lammps file, which isn't too useful. -However, if you have either the Pypar or mpi4py packages installed in -your Python, and uncomment the Pypar or mpi4py code in simple.py, then -the above commands will invoke 1 instance of a P-processor run. Both -Python and LAMMPS will run on P processors. The job will read the -input file and write a single log.lammps file. +However, if you have the mpi4py Python package installed and uncomment mpi4py +code in simple.py, then the above commands will invoke 1 instance of a +P-processor run. Both Python and LAMMPS will run on P processors. The job will +read the input file and write a single log.lammps file. The split.py script can also be run in parallel. It uses mpi4py version 2.0.0 (or later), which makes it possible to pass a diff --git a/python/examples/.gitignore b/python/examples/.gitignore new file mode 100644 index 0000000000..ee4173f0a4 --- /dev/null +++ b/python/examples/.gitignore @@ -0,0 +1 @@ +/tmp* diff --git a/python/examples/gui.py b/python/examples/gui.py index ac96448b43..f1090b20d7 100755 --- a/python/examples/gui.py +++ b/python/examples/gui.py @@ -7,8 +7,7 @@ # in.lammps = LAMMPS input script # Nfreq = query GUI every this many steps -# IMPORTANT: this script cannot yet be run in parallel via Pypar, -# because I can't seem to do a MPI-style broadcast in Pypar +# IMPORTANT: this script cannot yet be run in parallel from __future__ import print_function import sys,time @@ -39,10 +38,6 @@ infile = sys.argv[1] nfreq = int(sys.argv[2]) me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() from lammps import lammps lmp = lammps() @@ -110,7 +105,3 @@ while 1: if runflag: running = 1 else: running = 0 time.sleep(0.01) - -# uncomment if running in parallel via Pypar -#print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/matplotlib_plot.py b/python/examples/matplotlib_plot.py index d4e304aa19..b85d40c4c4 100755 --- a/python/examples/matplotlib_plot.py +++ b/python/examples/matplotlib_plot.py @@ -12,9 +12,6 @@ from __future__ import print_function import sys -sys.path.append("./pizza") -import matplotlib -matplotlib.use('tkagg') import matplotlib.pyplot as plt # parse command line @@ -30,10 +27,10 @@ nsteps = int(sys.argv[3]) compute = sys.argv[4] me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() +# uncomment this if running in parallel via mpi4py +#from mpi4py import MPI +#me = MPI.COMM_WORLD.Get_rank() +#nprocs = MPI.COMM_WORLD.Get_size() from lammps import lammps lmp = lammps() @@ -79,15 +76,16 @@ while ntimestep < nsteps: ax = plt.gca() ax.relim() ax.autoscale_view(True, True, True) - fig.canvas.draw() + plt.pause(0.001) + lmp.command("run 0 pre no post yes") -# uncomment if running in parallel via Pypar +# uncomment if running in parallel via mpi4py #print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() -if sys.version_info[0] == 3: - input("Press Enter to exit...") -else: - raw_input("Press Enter to exit...") +if me == 0: + if sys.version_info[0] == 3: + input("Press Enter to exit...") + else: + raw_input("Press Enter to exit...") diff --git a/python/examples/pizza/dump.py b/python/examples/pizza/dump.py index 14645ac1f3..5c7fab33ae 100644 --- a/python/examples/pizza/dump.py +++ b/python/examples/pizza/dump.py @@ -3,7 +3,7 @@ # # Copyright (2005) Sandia Corporation. Under the terms of Contract # DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains -# certain rights in this software. This software is distributed under +# certain rights in this software. This software is distributed under # the GNU General Public License. # for python3 compatibility @@ -35,7 +35,7 @@ time = d.next() read next snapshot from dump files d.map(1,"id",3,"x") assign names to atom columns (1-N) not needed if dump file is self-describing - + d.tselect.all() select all timesteps d.tselect.one(N) select only timestep N d.tselect.none() deselect all timesteps @@ -227,7 +227,7 @@ class dump: for word in words: self.flist += glob.glob(word) if len(self.flist) == 0 and len(list) == 1: raise Exception("no dump file specified") - + if len(list) == 1: self.increment = 0 self.read_all() @@ -270,12 +270,12 @@ class dump: self.tselect.all() # set default names for atom columns if file wasn't self-describing - + if len(self.snaps) == 0: print("no column assignments made") elif len(self.names): print("assigned columns:",self.names2str()) - elif self.snaps[0].atoms == None: + elif self.snaps[0].atoms is None: print("no column assignments made") elif len(self.snaps[0].atoms[0]) == 5: self.map(1,"id",2,"type",3,"x",4,"y",5,"z") @@ -341,7 +341,7 @@ class dump: # return snapshot or 0 if failed # assign column names if not already done and file is self-describing # convert xs,xu to x - + def read_snapshot(self,f): try: snap = Snap() @@ -414,7 +414,7 @@ class dump: # -------------------------------------------------------------------- # map atom column names - + def map(self,*pairs): if len(pairs) % 2 != 0: raise Exception("dump map() requires pairs of mappings") @@ -492,7 +492,7 @@ class dump: atoms[:,x] = snap.xlo + atoms[:,x]*xprd atoms[:,y] = snap.ylo + atoms[:,y]*yprd atoms[:,z] = snap.zlo + atoms[:,z]*zprd - + # -------------------------------------------------------------------- # wrap coords from outside box to inside @@ -505,7 +505,7 @@ class dump: ix = self.names["ix"] iy = self.names["iy"] iz = self.names["iz"] - + for snap in self.snaps: xprd = snap.xhi - snap.xlo yprd = snap.yhi - snap.ylo @@ -527,7 +527,7 @@ class dump: ix = self.names["ix"] iy = self.names["iy"] iz = self.names["iz"] - + for snap in self.snaps: xprd = snap.xhi - snap.xlo yprd = snap.yhi - snap.ylo @@ -542,7 +542,7 @@ class dump: def owrap(self,other): print("Wrapping to other ...") - + id = self.names["id"] x = self.names["x"] y = self.names["y"] @@ -551,7 +551,7 @@ class dump: iy = self.names["iy"] iz = self.names["iz"] iother = self.names[other] - + for snap in self.snaps: xprd = snap.xhi - snap.xlo yprd = snap.yhi - snap.ylo @@ -568,7 +568,7 @@ class dump: # -------------------------------------------------------------------- # convert column names assignment to a string, in column order - + def names2str(self): ncol = len(self.snaps[0].atoms[0]) pairs = self.names.items() @@ -631,7 +631,7 @@ class dump: print(snap.ylo,snap.yhi,file=f) print(snap.zlo,snap.zhi,file=f) print("ITEM: ATOMS",namestr,file=f) - + atoms = snap.atoms nvalues = len(atoms[0]) for i in range(snap.natoms): @@ -655,7 +655,7 @@ class dump: if not snap.tselect: continue print(snap.time,end='') sys.stdout.flush() - + file = root + "." + str(snap.time) f = open(file,"w") print("ITEM: TIMESTEP",file=f) @@ -667,7 +667,7 @@ class dump: print(snap.ylo,snap.yhi,file=f) print(snap.zlo,snap.zhi,file=f) print("ITEM: ATOMS",namestr,file=f) - + atoms = snap.atoms nvalues = len(atoms[0]) for i in range(snap.natoms): @@ -709,7 +709,7 @@ class dump: lhs = list[0][1:] if not self.names.has_key(lhs): self.newcolumn(lhs) - + for item in list: name = item[1:] column = self.names[name] @@ -721,7 +721,7 @@ class dump: if not snap.tselect: continue for i in range(snap.natoms): if snap.aselect[i]: exec(ceq) - + # -------------------------------------------------------------------- # set a column value via an input vec for all selected snapshots/atoms @@ -741,7 +741,7 @@ class dump: if snap.aselect[i]: atoms[i][icol] = vec[m] m += 1 - + # -------------------------------------------------------------------- # clone value in col across selected timesteps for atoms with same ID @@ -807,7 +807,7 @@ class dump: columns.append(self.names[name]) values.append(self.nselect * [0]) ncol = len(columns) - + id = self.names["id"] m = 0 for snap in self.snaps: @@ -823,13 +823,13 @@ class dump: if len(list) == 1: return values[0] else: return values - + # -------------------------------------------------------------------- # extract vector(s) of values for selected atoms at chosen timestep def vecs(self,n,*list): snap = self.snaps[self.findtime(n)] - + if len(list) == 0: raise Exception("no columns specified") columns = [] @@ -884,7 +884,7 @@ class dump: del self.snaps[i] else: i += 1 - + # -------------------------------------------------------------------- # iterate over selected snapshots @@ -896,11 +896,11 @@ class dump: self.iterate = i return i,self.snaps[i].time,1 return 0,0,-1 - + # -------------------------------------------------------------------- # return list of atoms to viz for snapshot isnap # augment with bonds, tris, lines if extra() was invoked - + def viz(self,isnap): snap = self.snaps[isnap] @@ -914,7 +914,7 @@ class dump: # create atom list needed by viz from id,type,x,y,z # need Numeric/Numpy mode here - + atoms = [] for i in range(snap.natoms): if not snap.aselect[i]: continue @@ -948,12 +948,12 @@ class dump: elif self.triflag == 2: timetmp,boxtmp,atomstmp,bondstmp, \ tris,linestmp = self.triobj.viz(time,1) - + lines = [] if self.lineflag: lines = self.linelist return time,box,atoms,bonds,tris,lines - + # -------------------------------------------------------------------- def findtime(self,n): @@ -969,12 +969,12 @@ class dump: xhi = yhi = zhi = None for snap in self.snaps: if not snap.tselect: continue - if xlo == None or snap.xlo < xlo: xlo = snap.xlo - if xhi == None or snap.xhi > xhi: xhi = snap.xhi - if ylo == None or snap.ylo < ylo: ylo = snap.ylo - if yhi == None or snap.yhi > yhi: yhi = snap.yhi - if zlo == None or snap.zlo < zlo: zlo = snap.zlo - if zhi == None or snap.zhi > zhi: zhi = snap.zhi + if xlo is None or snap.xlo < xlo: xlo = snap.xlo + if xhi is None or snap.xhi > xhi: xhi = snap.xhi + if ylo is None or snap.ylo < ylo: ylo = snap.ylo + if yhi is None or snap.yhi > yhi: yhi = snap.yhi + if zlo is None or snap.zlo < zlo: zlo = snap.zlo + if zhi is None or snap.zhi > zhi: zhi = snap.zhi return [xlo,ylo,zlo,xhi,yhi,zhi] # -------------------------------------------------------------------- @@ -997,7 +997,7 @@ class dump: def extra(self,arg): # read bonds from bond dump file - + if type(arg) is types.StringType: try: f = open(arg,'r') @@ -1017,7 +1017,7 @@ class dump: f.close() # convert values to int and absolute value since can be negative types - + if oldnumeric: bondlist = np.zeros((nbonds,4),np.Int) else: bondlist = np.zeros((nbonds,4),np.int) ints = [abs(int(value)) for value in words] @@ -1032,9 +1032,9 @@ class dump: self.bondlist = bondlist except: raise Exception("could not read from bond dump file") - + # request bonds from data object - + elif type(arg) is types.InstanceType and ".data" in str(arg.__class__): try: bondlist = [] @@ -1050,7 +1050,7 @@ class dump: raise Exception("could not extract bonds from data object") # request tris/lines from cdata object - + elif type(arg) is types.InstanceType and ".cdata" in str(arg.__class__): try: tmp,tmp,tmp,tmp,tris,lines = arg.viz(0) @@ -1064,7 +1064,7 @@ class dump: raise Exception("could not extract tris/lines from cdata object") # request tris from mdump object - + elif type(arg) is types.InstanceType and ".mdump" in str(arg.__class__): try: self.triflag = 2 @@ -1074,7 +1074,7 @@ class dump: else: raise Exception("unrecognized argument to dump.extra()") - + # -------------------------------------------------------------------- def compare_atom(self,a,b): @@ -1083,7 +1083,7 @@ class dump: elif a[0] > b[0]: return 1 else: - return 0 + return 0 # -------------------------------------------------------------------- # one snapshot @@ -1098,7 +1098,7 @@ class tselect: def __init__(self,data): self.data = data - + # -------------------------------------------------------------------- def all(self): @@ -1145,7 +1145,7 @@ class tselect: data.nselect -= 1 data.aselect.all() print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps)) - + # -------------------------------------------------------------------- def test(self,teststr): @@ -1191,7 +1191,7 @@ class aselect: data = self.data # replace all $var with snap.atoms references and compile test string - + pattern = "\$\w*" list = re.findall(pattern,teststr) for item in list: diff --git a/python/examples/pizza/gl.py b/python/examples/pizza/gl.py index 908db67052..d4b4f313c3 100644 --- a/python/examples/pizza/gl.py +++ b/python/examples/pizza/gl.py @@ -851,7 +851,7 @@ class gl: ncolor = self.vizinfo.ntcolor for tri in self.tridraw: itype = int(tri[1]) - if itype > ncolor: raise StandardError("tri type too big") + if itype > ncolor: raise Exception("tri type too big") red,green,blue = self.vizinfo.tcolor[itype] glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,[red,green,blue,1.0]); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,self.shiny); @@ -909,7 +909,7 @@ class gl: ymin >= ylo and ymax <= yhi and zmin >= zlo and zmax <= zhi: if bond[10] > bound: continue itype = int(bond[1]) - if itype > ncolor: raise StandardError("bond type too big") + if itype > ncolor: raise Exception("bond type too big") red,green,blue = self.vizinfo.bcolor[itype] rad = self.vizinfo.brad[itype] glPushMatrix() @@ -941,7 +941,7 @@ class gl: ymin >= ylo and ymax <= yhi and \ zmin >= zlo and zmax <= zhi: itype = int(tri[1]) - if itype > ncolor: raise StandardError("tri type too big") + if itype > ncolor: raise Exception("tri type too big") red,green,blue = self.vizinfo.tcolor[itype] glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION, [red,green,blue,1.0]); diff --git a/python/examples/pizza/gnu.py b/python/examples/pizza/gnu.py index 7d796d5586..6e0fc1ee0b 100644 --- a/python/examples/pizza/gnu.py +++ b/python/examples/pizza/gnu.py @@ -3,7 +3,7 @@ # # Copyright (2005) Sandia Corporation. Under the terms of Contract # DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains -# certain rights in this software. This software is distributed under +# certain rights in this software. This software is distributed under # the GNU General Public License. # for python3 compatibility @@ -16,7 +16,7 @@ oneline = "Create plots via GnuPlot plotting program" docstr = """ g = gnu() start up GnuPlot g.stop() shut down GnuPlot process - + g.plot(a) plot vector A against linear index g.plot(a,b) plot B against A g.plot(a,b,c,d,...) plot B against A, D against C, etc @@ -35,14 +35,14 @@ g("plot 'file.dat' using 2:3 with lines") execute string in GnuPlot g.enter() enter GnuPlot shell gnuplot> plot sin(x) with lines type commands directly to GnuPlot gnuplot> exit, quit exit GnuPlot shell - + g.export("data",range(100),a,...) create file with columns of numbers all vectors must be of equal length could plot from file with GnuPlot command: plot 'data' using 1:2 with lines g.select(N) figure N becomes the current plot - + subsequent commands apply to this plot g.hide(N) delete window for figure N @@ -87,17 +87,18 @@ g.curve(N,'r') set color of curve N # Imports and external programs -import types, os +import os +import sys try: from DEFAULTS import PIZZA_GNUPLOT -except: PIZZA_GNUPLOT = "gnuplot -p" +except ImportError: PIZZA_GNUPLOT = "gnuplot -p" try: from DEFAULTS import PIZZA_GNUTERM -except: PIZZA_GNUTERM = "x11" +except ImportError: PIZZA_GNUTERM = "x11" # Class definition class gnu: - + # -------------------------------------------------------------------- def __init__(self): @@ -105,7 +106,7 @@ class gnu: self.file = "tmp.gnu" self.figures = [] self.select(1) - + # -------------------------------------------------------------------- def stop(self): @@ -117,12 +118,15 @@ class gnu: def __call__(self,command): self.GNUPLOT.write(command + '\n') self.GNUPLOT.flush() - + # -------------------------------------------------------------------- def enter(self): while 1: - command = raw_input("gnuplot> ") + if sys.version_info[0] == 3: + command = input("gnuplot> ") + else: + command = raw_input("gnuplot> ") if command == "quit" or command == "exit": return self.__call__(command) @@ -136,7 +140,7 @@ class gnu: self.export(file,linear,vectors[0]) self.figures[self.current-1].ncurves = 1 else: - if len(vectors) % 2: raise StandardError("vectors must come in pairs") + if len(vectors) % 2: raise Exception("vectors must come in pairs") for i in range(0,len(vectors),2): file = self.file + ".%d.%d" % (self.current,i/2+1) self.export(file,vectors[i],vectors[i+1]) @@ -155,7 +159,7 @@ class gnu: if i: partial_vecs.append(vec[:i]) else: partial_vecs.append([0]) self.plot(*partial_vecs) - + if n < 10: newfile = file + "000" + str(n) elif n < 100: newfile = file + "00" + str(n) elif n < 1000: newfile = file + "0" + str(n) @@ -163,14 +167,14 @@ class gnu: self.save(newfile) n += 1 - + # -------------------------------------------------------------------- # write list of equal-length vectors to filename def export(self,filename,*vectors): n = len(vectors[0]) for vector in vectors: - if len(vector) != n: raise StandardError("vectors must be same length") + if len(vector) != n: raise Exception("vectors must be same length") f = open(filename,'w') nvec = len(vectors) for i in range(n): @@ -204,7 +208,7 @@ class gnu: # do not continue until plot file is written out # else script could go forward and change data file # use tmp.done as semaphore to indicate plot is finished - + def save(self,file): self.__call__("set terminal postscript enhanced solid lw 2 color portrait") cmd = "set output '%s.eps'" % file @@ -215,7 +219,7 @@ class gnu: while not os.path.exists("tmp.done"): continue self.__call__("set output") self.select(self.current) - + # -------------------------------------------------------------------- # restore default attributes by creating a new fig object @@ -224,7 +228,7 @@ class gnu: fig.ncurves = self.figures[self.current-1].ncurves self.figures[self.current-1] = fig self.draw() - + # -------------------------------------------------------------------- def aspect(self,value): @@ -248,12 +252,12 @@ class gnu: else: self.figures[self.current-1].ylimit = (values[0],values[1]) self.draw() - + # -------------------------------------------------------------------- def label(self,x,y,text): self.figures[self.current-1].labels.append((x,y,text)) - self.figures[self.current-1].nlabels += 1 + self.figures[self.current-1].nlabels += 1 self.draw() # -------------------------------------------------------------------- @@ -262,7 +266,7 @@ class gnu: self.figures[self.current-1].nlabel = 0 self.figures[self.current-1].labels = [] self.draw() - + # -------------------------------------------------------------------- def title(self,*strings): @@ -279,13 +283,13 @@ class gnu: def xtitle(self,label): self.figures[self.current-1].xtitle = label self.draw() - + # -------------------------------------------------------------------- def ytitle(self,label): self.figures[self.current-1].ytitle = label self.draw() - + # -------------------------------------------------------------------- def xlog(self): @@ -294,7 +298,7 @@ class gnu: else: self.figures[self.current-1].xlog = 1 self.draw() - + # -------------------------------------------------------------------- def ylog(self): @@ -303,7 +307,7 @@ class gnu: else: self.figures[self.current-1].ylog = 1 self.draw() - + # -------------------------------------------------------------------- def curve(self,num,color): @@ -319,10 +323,10 @@ class gnu: def draw(self): fig = self.figures[self.current-1] if not fig.ncurves: return - + cmd = 'set size ratio ' + str(1.0/float(fig.aspect)) self.__call__(cmd) - + cmd = 'set title ' + '"' + fig.title + '"' self.__call__(cmd) cmd = 'set xlabel ' + '"' + fig.xtitle + '"' @@ -334,11 +338,11 @@ class gnu: else: self.__call__("unset logscale x") if fig.ylog: self.__call__("set logscale y") else: self.__call__("unset logscale y") - if fig.xlimit: + if fig.xlimit: cmd = 'set xr [' + str(fig.xlimit[0]) + ':' + str(fig.xlimit[1]) + ']' self.__call__(cmd) else: self.__call__("set xr [*:*]") - if fig.ylimit: + if fig.ylimit: cmd = 'set yr [' + str(fig.ylimit[0]) + ':' + str(fig.ylimit[1]) + ']' self.__call__(cmd) else: self.__call__("set yr [*:*]") @@ -368,7 +372,7 @@ class figure: def __init__(self): self.ncurves = 0 - self.colors = [] + self.colors = [] self.title = "" self.xtitle = "" self.ytitle = "" diff --git a/python/examples/pizza/pdbfile.py b/python/examples/pizza/pdbfile.py index 51c8860424..efdf32fab1 100644 --- a/python/examples/pizza/pdbfile.py +++ b/python/examples/pizza/pdbfile.py @@ -3,7 +3,7 @@ # # Copyright (2005) Sandia Corporation. Under the terms of Contract # DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains -# certain rights in this software. This software is distributed under +# certain rights in this software. This software is distributed under # the GNU General Public License. # for python3 compatibility @@ -25,7 +25,7 @@ p = pdbfile("3CRO",d) read in single PDB file with snapshot data if only one 4-char file specified and it is not found, it will be downloaded from http://www.rcsb.org as 3CRO.pdb d arg is object with atom coordinates (dump, data) - + p.one() write all output as one big PDB file to tmp.pdb p.one("mine") write to mine.pdb p.many() write one PDB file per snapshot: tmp0000.pdb, ... @@ -39,7 +39,7 @@ p.single(N,"new") write as new.pdb if one file in str arg and d: one new PDB file per snapshot using input PDB file as template multiple input PDB files with a d is not allowed - + index,time,flag = p.iterator(0) index,time,flag = p.iterator(1) @@ -68,7 +68,7 @@ index,time,flag = p.iterator(1) # Imports and external programs -import sys, types, glob, urllib +import sys, glob, urllib PY3 = sys.version_info[0] == 3 if PY3: @@ -93,31 +93,31 @@ class pdbfile: elif len(args) == 2: filestr = args[0] self.data = args[1] - else: raise StandardError("invalid args for pdb()") + else: raise Exception("invalid args for pdb()") # flist = full list of all PDB input file names # append .pdb if needed - + if filestr: list = filestr.split() flist = [] for file in list: if '*' in file: flist += glob.glob(file) else: flist.append(file) - for i in xrange(len(flist)): + for i in range(len(flist)): if flist[i][-4:] != ".pdb": flist[i] += ".pdb" if len(flist) == 0: - raise StandardError("no PDB file specified") + raise Exception("no PDB file specified") self.files = flist else: self.files = [] if len(self.files) > 1 and self.data: - raise StandardError("cannot use multiple PDB files with data object") + raise Exception("cannot use multiple PDB files with data object") if len(self.files) == 0 and not self.data: - raise StandardError("no input PDB file(s)") + raise Exception("no input PDB file(s)") # grab PDB file from http://rcsb.org if not a local file - + if len(self.files) == 1 and len(self.files[0]) == 8: try: open(self.files[0],'r').close() @@ -127,7 +127,7 @@ class pdbfile: urllib.urlretrieve(fetchstr,self.files[0]) if self.data and len(self.files): self.read_template(self.files[0]) - + # -------------------------------------------------------------------- # write a single large PDB file for concatenating all input data or files # if data exists: @@ -145,7 +145,7 @@ class pdbfile: f = open(file,'w') # use template PDB file with each snapshot - + if self.data: n = flag = 0 while 1: @@ -163,7 +163,7 @@ class pdbfile: print("END",file=f) print(file,end='') sys.stdout.flush() - + f.close() print("\nwrote %d datasets to %s in PDB format" % (n,file)) @@ -199,7 +199,7 @@ class pdbfile: f = open(file,'w') self.convert(f,which) f.close() - + print(time,end='') sys.stdout.flush() n += 1 @@ -216,13 +216,13 @@ class pdbfile: else: file = root + str(n) file += ".pdb" - + f = open(file,'w') f.write(open(infile,'r').read()) f.close() print(file,end='') sys.stdout.flush() - + n += 1 print("\nwrote %d datasets to %s*.pdb in PDB format" % (n,root)) @@ -249,7 +249,7 @@ class pdbfile: self.convert(f,which) else: f.write(open(self.files[time],'r').read()) - + f.close() # -------------------------------------------------------------------- @@ -268,8 +268,8 @@ class pdbfile: # -------------------------------------------------------------------- # read a PDB file and store ATOM lines - - def read_template(self,file): + + def read_template(self,file): lines = open(file,'r').readlines() self.atomlines = {} for line in lines: diff --git a/python/examples/pizza/vizinfo.py b/python/examples/pizza/vizinfo.py index acc421a1a6..ebf490584e 100644 --- a/python/examples/pizza/vizinfo.py +++ b/python/examples/pizza/vizinfo.py @@ -79,7 +79,7 @@ class vizinfo: # if list of types has a 0, increment each type value if 0 in ids: - for i in xrange(len(ids)): ids[i] += 1 + for i in range(len(ids)): ids[i] += 1 # extend storage list if necessary # extend other arrays for same "which" so that gl::make_atom_calllist @@ -109,7 +109,7 @@ class vizinfo: ntypes = len(ids) nrgbs = len(rgbs) - for i in xrange(ntypes): + for i in range(ntypes): id = ids[i] if rgbs[0] == "loop": @@ -157,7 +157,7 @@ class vizinfo: # if list of types has a 0, increment each type value if 0 in ids: - for i in xrange(len(ids)): ids[i] += 1 + for i in range(len(ids)): ids[i] += 1 # extend storage list if necessary # extend other arrays for same "which" so that gl::make_atom_calllist @@ -220,7 +220,7 @@ class vizinfo: # if list of types has a 0, increment each type value if 0 in ids: - for i in xrange(len(ids)): ids[i] += 1 + for i in range(len(ids)): ids[i] += 1 # extend storage list if necessary # extend other arrays for same "which" so that gl::make_atom_calllist @@ -234,7 +234,7 @@ class vizinfo: # if list lengths match, set directly, else set types to 1st fill value if len(fills) == len(ids): - for i in xrange(len(ids)): self.tfill[ids[i]] = int(fills[i]) + for i in range(len(ids)): self.tfill[ids[i]] = int(fills[i]) else: for id in ids: self.tfill[id] = int(fills[0]) diff --git a/python/examples/pizza/vmd.py b/python/examples/pizza/vmd.py index fb5095617a..72da0f1a1d 100644 --- a/python/examples/pizza/vmd.py +++ b/python/examples/pizza/vmd.py @@ -45,17 +45,16 @@ v.debug([True|False]) display generated VMD script commands? # Imports and external programs -import types, os -import numpy +import os try: from DEFAULTS import PIZZA_VMDNAME -except: PIZZA_VMDNAME = "vmd" +except ImportError: PIZZA_VMDNAME = "vmd" try: from DEFAULTS import PIZZA_VMDDIR -except: PIZZA_VMDDIR = "/usr/local/lib/vmd" +except ImportError: PIZZA_VMDDIR = "/usr/local/lib/vmd" try: from DEFAULTS import PIZZA_VMDDEV -except: PIZZA_VMDDEV = "win" +except ImportError: PIZZA_VMDDEV = "win" try: from DEFAULTS import PIZZA_VMDARCH -except: PIZZA_VMDARCH = "LINUXAMD64" +except ImportError: PIZZA_VMDARCH = "LINUXAMD64" # try these settings for a Mac #PIZZA_VMDNAME = "vmd" @@ -64,7 +63,7 @@ except: PIZZA_VMDARCH = "LINUXAMD64" #PIZZA_VMDARCH = "MACOSXX86" try: import pexpect -except: +except ImportError: print("pexpect from http://pypi.python.org/pypi/pexpect", \ "is required for vmd tool") raise diff --git a/python/examples/plot.py b/python/examples/plot.py index c67509f650..6645a72404 100755 --- a/python/examples/plot.py +++ b/python/examples/plot.py @@ -28,10 +28,10 @@ nsteps = int(sys.argv[3]) compute = sys.argv[4] me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() +# uncomment this if running in parallel via mpi4py +#from mpi4py import MPI +#me = MPI.COMM_WORLD.Get_rank() +#nprocs = MPI.COMM_WORLD.Get_size() from lammps import lammps lmp = lammps() @@ -57,7 +57,7 @@ if me == 0: gn = gnu() gn.plot(xaxis,yaxis) gn.xrange(0,nsteps) - gn.title(compute,"Timestep","Temperature") + gn.title(compute.replace('_', ' '),"Timestep","Temperature") # run nfreq steps at a time w/out pre/post, query compute, refresh plot @@ -71,6 +71,5 @@ while ntimestep < nsteps: lmp.command("run 0 pre no post yes") -# uncomment if running in parallel via Pypar +# uncomment if running in parallel via mpi4py #print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/simple.py b/python/examples/simple.py index 9f85d8b4df..861a208895 100755 --- a/python/examples/simple.py +++ b/python/examples/simple.py @@ -9,7 +9,7 @@ # Parallel syntax: mpirun -np 4 simple.py in.lammps # in.lammps = LAMMPS input script -# also need to uncomment either Pypar or mpi4py sections below +# also need to uncomment mpi4py sections below from __future__ import print_function import sys @@ -27,11 +27,6 @@ infile = sys.argv[1] me = 0 -# uncomment this if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() - # uncomment this if running in parallel via mpi4py #from mpi4py import MPI #me = MPI.COMM_WORLD.Get_rank() @@ -133,8 +128,5 @@ lmp.reset_box([0,0,0],[10,10,8],0,0,0) boxlo,boxhi,xy,yz,xz,periodicity,box_change = lmp.extract_box() if me == 0: print("Box info",boxlo,boxhi,xy,yz,xz,periodicity,box_change) -# uncomment if running in parallel via Pypar -#print("Proc %d out of %d procs has" % (me,nprocs), lmp) - # uncomment if running in parallel via mpi4py #print("Proc %d out of %d procs has" % (me,nprocs), lmp) diff --git a/python/examples/viz_atomeye.py b/python/examples/viz_atomeye.py index d7f83f274d..c7c83e3d36 100755 --- a/python/examples/viz_atomeye.py +++ b/python/examples/viz_atomeye.py @@ -28,10 +28,10 @@ nfreq = int(sys.argv[2]) nsteps = int(sys.argv[3]) me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() +# uncomment this if running in parallel via mpi4py +#from mpi4py import MPI +#me = MPI.COMM_WORLD.Get_rank() +#nprocs = MPI.COMM_WORLD.Get_size() from lammps import lammps lmp = lammps() @@ -68,6 +68,5 @@ while ntimestep < nsteps: lmp.command("run 0 pre no post yes") -# uncomment if running in parallel via Pypar +# uncomment if running in parallel via mpi4py #print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/viz_gl.py b/python/examples/viz_gl.py index 5878b68502..6266682b9c 100755 --- a/python/examples/viz_gl.py +++ b/python/examples/viz_gl.py @@ -24,10 +24,10 @@ nfreq = int(sys.argv[2]) nsteps = int(sys.argv[3]) me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() +# uncomment this if running in parallel via mpi4py +#from mpi4py import MPI +#me = MPI.COMM_WORLD.Get_rank() +#nprocs = MPI.COMM_WORLD.Get_size() from lammps import lammps lmp = lammps() @@ -83,6 +83,5 @@ while ntimestep < nsteps: lmp.command("run 0 pre no post yes") -# uncomment if running in parallel via Pypar +# uncomment if running in parallel via mpi4py #print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/viz_pymol.py b/python/examples/viz_pymol.py index 0950b3668b..b5061d4c20 100755 --- a/python/examples/viz_pymol.py +++ b/python/examples/viz_pymol.py @@ -24,10 +24,10 @@ nfreq = int(sys.argv[2]) nsteps = int(sys.argv[3]) me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() +# uncomment this if running in parallel via mpi4py +#from mpi4py import MPI +#me = MPI.COMM_WORLD.Get_rank() +#nprocs = MPI.COMM_WORLD.Get_size() from lammps import lammps lmp = lammps() @@ -78,6 +78,5 @@ while ntimestep < nsteps: lmp.command("run 0 pre no post yes") -# uncomment if running in parallel via Pypar +# uncomment if running in parallel via mpi4py #print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/viz_vmd.py b/python/examples/viz_vmd.py index f592857566..5c06697378 100755 --- a/python/examples/viz_vmd.py +++ b/python/examples/viz_vmd.py @@ -24,10 +24,10 @@ nfreq = int(sys.argv[2]) nsteps = int(sys.argv[3]) me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() +# uncomment this if running in parallel via mpi4py +#from mpi4py import MPI +#me = MPI.COMM_WORLD.Get_rank() +#nprocs = MPI.COMM_WORLD.Get_size() from lammps import lammps lmp = lammps() @@ -87,6 +87,5 @@ if me == 0: #v.enter() #v.stop() -# uncomment if running in parallel via Pypar +# uncomment if running in parallel via mpi4py #print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/vizplotgui_atomeye.py b/python/examples/vizplotgui_atomeye.py index 8f5f4e3dff..f5b4481f60 100755 --- a/python/examples/vizplotgui_atomeye.py +++ b/python/examples/vizplotgui_atomeye.py @@ -9,9 +9,6 @@ # compute-ID = ID of compute that calculates temperature # (or any other scalar quantity) -# IMPORTANT: this script cannot yet be run in parallel via Pypar, -# because I can't seem to do a MPI-style broadcast in Pypar - from __future__ import print_function import sys,os,time sys.path.append("./pizza") @@ -59,10 +56,6 @@ nfreq = int(sys.argv[2]) compute = sys.argv[3] me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() from lammps import lammps lmp = lammps() @@ -163,7 +156,3 @@ while 1: time.sleep(0.01) lmp.command("run 0 pre no post yes") - -# uncomment if running in parallel via Pypar -#print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/vizplotgui_gl.py b/python/examples/vizplotgui_gl.py index c4847667fd..e137a42e29 100755 --- a/python/examples/vizplotgui_gl.py +++ b/python/examples/vizplotgui_gl.py @@ -9,9 +9,6 @@ # compute-ID = ID of compute that calculates temperature # (or any other scalar quantity) -# IMPORTANT: this script cannot yet be run in parallel via Pypar, -# because I can't seem to do a MPI-style broadcast in Pypar - from __future__ import print_function import sys,time sys.path.append("./pizza") @@ -55,10 +52,6 @@ nfreq = int(sys.argv[2]) compute = sys.argv[3] me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() from lammps import lammps lmp = lammps() @@ -176,7 +169,3 @@ while 1: time.sleep(0.01) lmp.command("run 0 pre no post yes") - -# uncomment if running in parallel via Pypar -#print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/vizplotgui_pymol.py b/python/examples/vizplotgui_pymol.py index 11be498741..543b707478 100755 --- a/python/examples/vizplotgui_pymol.py +++ b/python/examples/vizplotgui_pymol.py @@ -9,9 +9,6 @@ # compute-ID = ID of compute that calculates temperature # (or any other scalar quantity) -# IMPORTANT: this script cannot yet be run in parallel via Pypar, -# because I can't seem to do a MPI-style broadcast in Pypar - from __future__ import print_function import sys,time sys.path.append("./pizza") @@ -57,10 +54,6 @@ nfreq = int(sys.argv[2]) compute = sys.argv[3] me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() from lammps import lammps lmp = lammps() @@ -172,7 +165,3 @@ while 1: time.sleep(0.01) lmp.command("run 0 pre no post yes") - -# uncomment if running in parallel via Pypar -#print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/examples/vizplotgui_vmd.py b/python/examples/vizplotgui_vmd.py index 0003ebc929..10129c7285 100755 --- a/python/examples/vizplotgui_vmd.py +++ b/python/examples/vizplotgui_vmd.py @@ -9,9 +9,6 @@ # compute-ID = ID of compute that calculates temperature # (or any other scalar quantity) -# IMPORTANT: this script cannot yet be run in parallel via Pypar, -# because I can't seem to do a MPI-style broadcast in Pypar - from __future__ import print_function import sys,time sys.path.append("./pizza") @@ -56,10 +53,6 @@ nfreq = int(sys.argv[2]) compute = sys.argv[3] me = 0 -# uncomment if running in parallel via Pypar -#import pypar -#me = pypar.rank() -#nprocs = pypar.size() from lammps import lammps lmp = lammps() @@ -171,7 +164,3 @@ while 1: time.sleep(0.01) lmp.command("run 0 pre no post yes") - -# uncomment if running in parallel via Pypar -#print("Proc %d out of %d procs has" % (me,nprocs), lmp) -#pypar.finalize() diff --git a/python/install.py b/python/install.py index 10bd4f6de1..a3668754d9 100644 --- a/python/install.py +++ b/python/install.py @@ -123,7 +123,7 @@ try: sys.argv = ["setup.py","install"] # as if had run "python setup.py install" setup_kwargs['data_files']=[(os.path.join(get_python_lib(), 'lammps'), [args.lib])] setup(**setup_kwargs) -except: +except: # lgtm [py/catch-base-exception] tryuser=True print ("Installation into global site-packages folder failed.\nTrying user folder %s now." % site.USER_SITE) @@ -132,5 +132,5 @@ if tryuser: sys.argv = ["setup.py","install","--user"] # as if had run "python setup.py install --user" setup_kwargs['data_files']=[(os.path.join(site.USER_SITE, 'lammps'), [args.lib])] setup(**setup_kwargs) - except: + except: # lgtm [py/catch-base-exception] print("Installation into user site package folder failed.") diff --git a/python/lammps/__init__.py b/python/lammps/__init__.py index a51e0db207..fc35e45225 100644 --- a/python/lammps/__init__.py +++ b/python/lammps/__init__.py @@ -8,10 +8,10 @@ LAMMPS module global members: result of :py:func:`lammps.version`. """ -from .constants import * -from .core import * -from .data import * -from .pylammps import * +from .constants import * # lgtm [py/polluting-import] +from .core import * # lgtm [py/polluting-import] +from .data import * # lgtm [py/polluting-import] +from .pylammps import * # lgtm [py/polluting-import] # convert installed module string version to numeric version def get_version_number(): @@ -25,18 +25,18 @@ def get_version_number(): vstring = None if version_info.major == 3 and version_info.minor >= 8: - from importlib.metadata import version + from importlib.metadata import version, PackageNotFoundError try: vstring = version('lammps') - except: + except PackageNotFoundError: # nothing to do, ignore pass else: - from pkg_resources import get_distribution + from pkg_resources import get_distribution, DistributionNotFound try: vstring = get_distribution('lammps').version - except: + except DistributionNotFound: # nothing to do, ignore pass diff --git a/python/lammps/constants.py b/python/lammps/constants.py index f21bb69732..a50d58b28f 100644 --- a/python/lammps/constants.py +++ b/python/lammps/constants.py @@ -11,8 +11,6 @@ # See the README file in the top-level LAMMPS directory. # ------------------------------------------------------------------------- -from ctypes import c_int, c_int32, c_int64 - # various symbolic constants to be used # in certain calls to select data formats LAMMPS_AUTODETECT = None @@ -42,6 +40,7 @@ LMP_VAR_ATOM = 1 # ------------------------------------------------------------------------- def get_ctypes_int(size): + from ctypes import c_int, c_int32, c_int64 if size == 4: return c_int32 elif size == 8: diff --git a/python/lammps/core.py b/python/lammps/core.py index 800a1eab29..88eba735b0 100644 --- a/python/lammps/core.py +++ b/python/lammps/core.py @@ -18,12 +18,12 @@ from __future__ import print_function import os import sys -from ctypes import * +from ctypes import * # lgtm [py/polluting-import] from os.path import dirname,abspath,join from inspect import getsourcefile -from .constants import * -from .data import * +from .constants import * # lgtm [py/polluting-import] +from .data import * # lgtm [py/polluting-import] # ------------------------------------------------------------------------- @@ -100,7 +100,7 @@ class lammps(object): try: if ptr: self.lib = CDLL("",RTLD_GLOBAL) - except: + except OSError: self.lib = None # load liblammps.so unless name is given @@ -307,13 +307,12 @@ class lammps(object): from mpi4py import __version__ as mpi4py_version # tested to work with mpi4py versions 2 and 3 self.has_mpi4py = mpi4py_version.split('.')[0] in ['2','3'] - except: + except ImportError: # ignore failing import pass # if no ptr provided, create an instance of LAMMPS - # don't know how to pass an MPI communicator from PyPar - # but we can pass an MPI communicator from mpi4py v2.0.0 and later + # we can pass an MPI communicator from mpi4py v2.0.0 and later # no_mpi call lets LAMMPS use MPI_COMM_WORLD # cargs = array of C strings from args # if ptr, then are embedding Python in LAMMPS input script @@ -1134,10 +1133,10 @@ class lammps(object): with ExceptionCheck(self): if dtype == 0: data = ((count*natoms)*c_int)() - self.lib.lammps_gather_atoms(self.lmp,name,type,count,data) + self.lib.lammps_gather_atoms(self.lmp,name,dtype,count,data) elif dtype == 1: data = ((count*natoms)*c_double)() - self.lib.lammps_gather_atoms(self.lmp,name,type,count,data) + self.lib.lammps_gather_atoms(self.lmp,name,dtype,count,data) else: return None return data @@ -1150,10 +1149,10 @@ class lammps(object): with ExceptionCheck(self): if dtype == 0: data = ((count*natoms)*c_int)() - self.lib.lammps_gather_atoms_concat(self.lmp,name,type,count,data) + self.lib.lammps_gather_atoms_concat(self.lmp,name,dtype,count,data) elif dtype == 1: data = ((count*natoms)*c_double)() - self.lib.lammps_gather_atoms_concat(self.lmp,name,type,count,data) + self.lib.lammps_gather_atoms_concat(self.lmp,name,dtype,count,data) else: return None return data @@ -1352,7 +1351,7 @@ class lammps(object): id_lmp = (self.c_tagint*n)() try: id_lmp[:] = id[0:n] - except: + except: # lgtm [py/catch-base-exception] return 0 else: id_lmp = None @@ -1360,21 +1359,21 @@ class lammps(object): type_lmp = (c_int*n)() try: type_lmp[:] = type[0:n] - except: + except: # lgtm [py/catch-base-exception] return 0 three_n = 3*n x_lmp = (c_double*three_n)() try: x_lmp[:] = x[0:three_n] - except: + except: # lgtm [py/catch-base-exception] return 0 if v: v_lmp = (c_double*(three_n))() try: v_lmp[:] = v[0:three_n] - except: + except: # lgtm [py/catch-base-exception] return 0 else: v_lmp = None @@ -1383,7 +1382,7 @@ class lammps(object): img_lmp = (self.c_imageint*n)() try: img_lmp[:] = image[0:n] - except: + except: # lgtm [py/catch-base-exception] return 0 else: img_lmp = None diff --git a/python/lammps/numpy_wrapper.py b/python/lammps/numpy_wrapper.py index 399affa51a..20fdf4cc68 100644 --- a/python/lammps/numpy_wrapper.py +++ b/python/lammps/numpy_wrapper.py @@ -20,7 +20,7 @@ import warnings from ctypes import POINTER, c_double, c_int, c_int32, c_int64, cast -from .constants import * +from .constants import * # lgtm [py/polluting-import] from .data import NeighList diff --git a/python/setup.py b/python/setup.py index 2ccbb373e3..1ae423d59f 100644 --- a/python/setup.py +++ b/python/setup.py @@ -8,8 +8,14 @@ LAMMPS_PYTHON_DIR = os.path.dirname(os.path.realpath(__file__)) LAMMPS_DIR = os.path.dirname(LAMMPS_PYTHON_DIR) LAMMPS_SOURCE_DIR = os.path.join(LAMMPS_DIR, 'src') +if not os.path.exists(LAMMPS_SOURCE_DIR): + # allows installing and building wheel from current directory + LAMMPS_DIR = os.path.realpath(os.path.join(os.environ['PWD'], '..')) + LAMMPS_SOURCE_DIR = os.path.join(LAMMPS_DIR, 'src') + def get_lammps_version(): - with open(os.path.join(LAMMPS_SOURCE_DIR, 'version.h'), 'r') as f: + version_h_file = os.path.join(LAMMPS_SOURCE_DIR, 'version.h') + with open(version_h_file, 'r') as f: line = f.readline() start_pos = line.find('"')+1 end_pos = line.find('"', start_pos) diff --git a/src/.gitignore b/src/.gitignore index 97229711cb..b15707ed79 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -47,6 +47,13 @@ /pair_pace.cpp /pair_pace.h +/fix_polarize*.cpp +/fix_polarize*.h +/*_dielectric.cpp +/*_dielectric.h +/compute_efield_atom.cpp +/compute_efield_atom.j + /superpose3d.h /kokkos.cpp diff --git a/src/Makefile b/src/Makefile index 24d99a5fe3..5e7a3c000f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -52,7 +52,7 @@ PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \ python qeq replica rigid shock snap spin srd voronoi PACKUSER = user-adios user-atc user-awpmd user-brownian user-bocs user-cgdna \ - user-cgsdk user-colvars user-diffraction user-dpd user-drude \ + user-cgsdk user-colvars user-dielectric user-diffraction user-dpd user-drude \ user-eff user-fep user-h5md user-hdnnp user-intel user-lb user-manifold \ user-mdi user-meamc user-mesodpd user-mesont user-mgpt user-misc \ user-mofff user-molfile user-netcdf user-omp user-phonon \ diff --git a/src/USER-DIELECTRIC/Install.sh b/src/USER-DIELECTRIC/Install.sh new file mode 100644 index 0000000000..fd540f3c7e --- /dev/null +++ b/src/USER-DIELECTRIC/Install.sh @@ -0,0 +1,41 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# compute efield/atom is only usable when all styles +# are installed, which in turn requires KSPACE + +if (test $1 = 1) then + if (test ! -e ../ppp.cpp) then + echo "Must install KSPACE package with USER-DIELECTRIC" + exit 1 + fi +fi + +for file in *.cpp *.h; do + action ${file} +done diff --git a/src/USER-DIELECTRIC/README b/src/USER-DIELECTRIC/README new file mode 100644 index 0000000000..11e9bde03f --- /dev/null +++ b/src/USER-DIELECTRIC/README @@ -0,0 +1,28 @@ +The USER-DIELECTRIC package provides several solvers for computing surface induced charges +at the interface between two media with different dielectric constants: + + * the boundary element solver using the GMRES algorithm (fix polarize/bem/gmres), + * the boundary element solver using the successive overelaxation algorithm (fix polarize/bem/icc), + * the direct optimization of an energy functional (fix polarize/functional). + +The interfaces can be immobile (for example, graphene layers in contact with water), +or mobile (for example, dielectric colloids in a solvent). + +See the header of the source files for more details on the references of the methods. + +The USER-DIELECTRIC package was created by Trung Nguyen while at Northwestern. +Questions can be addressed to Trung Nguyen (ndactrung@gmail.com). + +* Citation + +Please cite the following paper if you use the code for your publications + +T. D. Nguyen, H. Li, D. Bagchi, F. J. Solis, M. Olvera de la Cruz, +"Incorporating surface polarization effects into large-scale coarse-grained +Molecular Dynamics simulation", Computer Physics Communications 241, 80--91 (2019). + +* Examples + +Example input scripts and data files can be found under examples/USER/dielectric: + +mpirun -np 8 ../../../src/lmp_mpi -in in.confined diff --git a/src/USER-DIELECTRIC/atom_vec_dielectric.cpp b/src/USER-DIELECTRIC/atom_vec_dielectric.cpp new file mode 100644 index 0000000000..b0e3487807 --- /dev/null +++ b/src/USER-DIELECTRIC/atom_vec_dielectric.cpp @@ -0,0 +1,242 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "atom_vec_dielectric.h" + +#include "atom.h" +#include "citeme.h" + +using namespace LAMMPS_NS; + +static const char cite_user_dielectric_package[] = + "USER-DIELECTRIC package:\n\n" + "@Article{TrungCPC19,\n" + " author = {Trung Dac Nguyen, Honghao Li, Debarshee Bagchi," + " Francisco J. Solis, Monica Olvera de la Cruz,\n" + " title = {Incorporating surface polarization effects into large-scale" + " coarse-grained Molecular Dynamics simulation},\n" + " journal = {Comp.~Phys.~Comm.},\n" + " year = 2019,\n" + " volume = 241,\n" + " pages = {80--91}\n" + "}\n\n" + ; + +/* ---------------------------------------------------------------------- */ + +AtomVecDielectric::AtomVecDielectric(LAMMPS *lmp) : AtomVec(lmp) +{ + if (lmp->citeme) lmp->citeme->add(cite_user_dielectric_package); + + molecular = Atom::MOLECULAR; + bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 1; + mass_type = PER_TYPE; + + atom->molecule_flag = atom->q_flag = atom->mu_flag = 1; + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) + "q molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special " + "mu area ed em epsilon curvature q_unscaled"; + fields_copy = (char *) + "q molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special " + "mu area ed em epsilon curvature q_unscaled"; + fields_comm = (char *) "q mu area ed em epsilon curvature q_unscaled"; + fields_comm_vel = (char *) ""; + fields_reverse = (char *) ""; + fields_border = (char *) "q molecule mu area ed em epsilon curvature q_unscaled"; + fields_border_vel = (char *) "q molecule mu area ed em epsilon curvature q_unscaled"; + fields_exchange = (char *) + "q molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special " + "mu area ed em epsilon curvature q_unscaled"; + fields_restart = (char *) + "q molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "mu area ed em epsilon curvature q_unscaled"; + fields_create = (char *) + "q molecule num_bond num_angle num_dihedral num_improper nspecial " + "mu area ed em epsilon curvature q_unscaled"; + fields_data_atom = (char *) "id molecule type q x " + "mu3 area ed em epsilon curvature"; + fields_data_vel = (char *) "id v"; + + setup_fields(); + + bond_per_atom = angle_per_atom = dihedral_per_atom = improper_per_atom = 0; +} + +/* ---------------------------------------------------------------------- + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() +------------------------------------------------------------------------- */ + +void AtomVecDielectric::grow_pointers() +{ + num_bond = atom->num_bond; + bond_type = atom->bond_type; + num_angle = atom->num_angle; + angle_type = atom->angle_type; + num_dihedral = atom->num_dihedral; + dihedral_type = atom->dihedral_type; + num_improper = atom->num_improper; + improper_type = atom->improper_type; + nspecial = atom->nspecial; + + mu = atom->mu; + area = atom->area; + ed = atom->ed; + em = atom->em; + epsilon = atom->epsilon; + curvature = atom->curvature; + q_unscaled = atom->q_unscaled; +} + +/* ---------------------------------------------------------------------- + initialize non-zero atom quantities +------------------------------------------------------------------------- */ + +void AtomVecDielectric::create_atom_post(int ilocal) +{ + area[ilocal] = 1.0; + em[ilocal] = 1.0; + epsilon[ilocal] = 1.0; +} + +/* ---------------------------------------------------------------------- + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecDielectric::data_atom_post(int ilocal) +{ + num_bond[ilocal] = 0; + num_angle[ilocal] = 0; + num_dihedral[ilocal] = 0; + num_improper[ilocal] = 0; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; + + double* q = atom->q; + q_unscaled[ilocal] = q[ilocal]; + q[ilocal] /= epsilon[ilocal]; + + double *mu_one = mu[ilocal]; + mu_one[3] = + sqrt(mu_one[0]*mu_one[0] + mu_one[1]*mu_one[1] + mu_one[2]*mu_one[2]); +} + +/* ---------------------------------------------------------------------- + initialize other atom quantities after AtomVec::unpack_restart() +------------------------------------------------------------------------- */ + +void AtomVecDielectric::unpack_restart_init(int ilocal) +{ + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; +} + +/* ---------------------------------------------------------------------- + assign an index to named atom property and return index + return -1 if name is unknown to this atom style +------------------------------------------------------------------------- */ + +int AtomVecDielectric::property_atom(char *name) +{ + if (strcmp(name,"area") == 0) return 0; + if (strcmp(name,"ed") == 0) return 1; + if (strcmp(name,"em") == 0) return 2; + if (strcmp(name,"epsilon") == 0) return 3; + if (strcmp(name,"curvature") == 0) return 4; + if (strcmp(name,"q_unscaled") == 0) return 5; + return -1; +} + +/* ---------------------------------------------------------------------- + pack per-atom data into buf for ComputePropertyAtom + index maps to data specific to this atom style +------------------------------------------------------------------------- */ + +void AtomVecDielectric::pack_property_atom(int index, double *buf, + int nvalues, int groupbit) +{ + int *mask = atom->mask; + int nlocal = atom->nlocal; + int n = 0; + + if (index == 0) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = area[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 1) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = ed[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 2) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = em[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 3) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = epsilon[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 4) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = curvature[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 5) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = q_unscaled[i]; + else buf[n] = 0.0; + n += nvalues; + } + } +} diff --git a/src/USER-DIELECTRIC/atom_vec_dielectric.h b/src/USER-DIELECTRIC/atom_vec_dielectric.h new file mode 100644 index 0000000000..8e342eda08 --- /dev/null +++ b/src/USER-DIELECTRIC/atom_vec_dielectric.h @@ -0,0 +1,68 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef ATOM_CLASS +// clang-format off +AtomStyle(dielectric,AtomVecDielectric); +// clang-format on +#else + +#ifndef LMP_ATOM_VEC_DIELECTRIC_H +#define LMP_ATOM_VEC_DIELECTRIC_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecDielectric : public AtomVec { + friend class PairLJCutCoulDebyeDielectric; + friend class PairLJLongCoulLongDielectric; + + public: + AtomVecDielectric(class LAMMPS *); + + void grow_pointers(); + void create_atom_post(int); + void data_atom_post(int); + void unpack_restart_init(int); + int property_atom(char *); + void pack_property_atom(int, double *, int, int); + + protected: + int *num_bond, *num_angle, *num_dihedral, *num_improper; + int **bond_type, **angle_type, **dihedral_type, **improper_type; + int **nspecial; + + int bond_per_atom, angle_per_atom, dihedral_per_atom, improper_per_atom; + + double **mu; + double *area, *ed, *em, *epsilon, *curvature, *q_unscaled; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Per-processor system is too big + +The number of owned atoms plus ghost atoms on a single +processor must fit in 32-bit integer. + +E: Invalid atom type in Atoms section of data file + +Atom types must range from 1 to specified # of types. + +*/ diff --git a/src/USER-DIELECTRIC/compute_efield_atom.cpp b/src/USER-DIELECTRIC/compute_efield_atom.cpp new file mode 100644 index 0000000000..f81cb06f18 --- /dev/null +++ b/src/USER-DIELECTRIC/compute_efield_atom.cpp @@ -0,0 +1,235 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "compute_efield_atom.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "kspace.h" +#include "memory.h" +#include "msm_dielectric.h" +#include "pair_coul_cut_dielectric.h" +#include "pair_coul_long_dielectric.h" +#include "pair_lj_cut_coul_cut_dielectric.h" +#include "pair_lj_cut_coul_long_dielectric.h" +#include "pair_lj_cut_coul_msm_dielectric.h" +#include "pppm_dielectric.h" +#include "update.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeEfieldAtom::ComputeEfieldAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), efield(NULL) +{ + if (narg < 3) error->all(FLERR,"Illegal compute efield/atom command"); + + peratom_flag = 1; + size_peratom_cols = 3; + timeflag = 1; + comm_reverse = 3; + + pairflag = 0; + kspaceflag = 0; + + if (narg == 3) { + pairflag = 1; + kspaceflag = 1; + } else { + int iarg = 3; + while (iarg < narg) { + if (strcmp(arg[iarg],"pair") == 0) pairflag = 1; + else if (strcmp(arg[iarg],"kspace") == 0) kspaceflag = 1; + else error->all(FLERR,"Illegal compute efield/atom command"); + iarg++; + } + } + + nmax = 0; + + comm_reverse = 1; +} + +/* ---------------------------------------------------------------------- */ + +ComputeEfieldAtom::~ComputeEfieldAtom() +{ + memory->destroy(efield); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEfieldAtom::init() +{ + if (!atom->q_flag) error->all(FLERR,"compute efield/atom requires atom attribute q"); + if (!force->kspace) kspaceflag = 0; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEfieldAtom::setup() +{ + if (strcmp(force->pair_style,"lj/cut/coul/long/dielectric") == 0) + efield_pair = ((PairLJCutCoulLongDielectric*)force->pair)->efield; + else if (strcmp(force->pair_style,"lj/cut/coul/long/dielectric/omp") == 0) + efield_pair = ((PairLJCutCoulMSMDielectric*)force->pair)->efield; + else if (strcmp(force->pair_style,"lj/cut/coul/msm/dielectric") == 0) + efield_pair = ((PairLJCutCoulMSMDielectric*)force->pair)->efield; + else if (strcmp(force->pair_style,"lj/cut/coul/cut/dielectric") == 0) + efield_pair = ((PairLJCutCoulCutDielectric*)force->pair)->efield; + else if (strcmp(force->pair_style,"lj/cut/coul/cut/dielectric/omp") == 0) + efield_pair = ((PairLJCutCoulCutDielectric*)force->pair)->efield; + else if (strcmp(force->pair_style,"coul/long/dielectric") == 0) + efield_pair = ((PairCoulLongDielectric*)force->pair)->efield; + else if (strcmp(force->pair_style,"coul/cut/dielectric") == 0) + efield_pair = ((PairCoulCutDielectric*)force->pair)->efield; + else error->all(FLERR,"Compute efield/atom not supported by pair style"); + + if (force->kspace) { + if (strcmp(force->kspace_style,"pppm/dielectric") == 0) + efield_kspace = ((PPPMDielectric*)force->kspace)->efield; + else if (strcmp(force->kspace_style,"msm/dielectric") == 0) + efield_kspace = ((MSMDielectric*)force->kspace)->efield; + else error->all(FLERR,"Compute efield/atom not supported by kspace style"); + kspaceflag = 1; + } + + if (!efield_pair && !efield_kspace) + error->all(FLERR, "Compute efield/atom does not access to efield"); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEfieldAtom::compute_peratom() +{ + int i,j; + double onemass; + + invoked_peratom = update->ntimestep; + if (update->vflag_atom != invoked_peratom) + error->all(FLERR,"Per-atom virial was not tallied on needed timestep"); + + // grow local stress array if necessary + // needs to be atom->nmax in length + + if (atom->nmax > nmax) { + memory->destroy(efield); + nmax = atom->nmax; + memory->create(efield,nmax,3,"stress/atom:efield"); + array_atom = efield; + } + + // npair includes ghosts if either newton flag is set + // b/c some bonds/dihedrals call pair::ev_tally with pairwise info + // nbond includes ghosts if newton_bond is set + // ntotal includes ghosts if either newton flag is set + // KSpace includes ghosts if tip4pflag is set + + double** f = atom->f; + double* q = atom->q; + int nlocal = atom->nlocal; + int npair = nlocal; + int ntotal = nlocal; + int nkspace = nlocal; + if (force->newton) npair += atom->nghost; + if (force->newton) ntotal += atom->nghost; + if (force->kspace && force->kspace->tip4pflag) nkspace += atom->nghost; + + // clear local stress array + + for (i = 0; i < ntotal; i++) + for (j = 0; j < 3; j++) + efield[i][j] = 0.0; + + // add in per-atom contributions from each force + + if (pairflag && force->pair) { + for (i = 0; i < npair; i++) + for (j = 0; j < 3; j++) { + if (q[i] != 0) efield[i][j] += efield_pair[i][j]; + } + } + + if (kspaceflag && force->kspace) { + for (i = 0; i < nkspace; i++) + for (j = 0; j < 3; j++) + efield[i][j] += efield_kspace[i][j]; + } + + // communicate ghost efield between neighbor procs + + if (force->newton || (force->kspace && force->kspace->tip4pflag)) + comm->reverse_comm_compute(this); + + // zero efield of atoms not in group + // only do this after comm since ghost contributions must be included + + int *mask = atom->mask; + + for (i = 0; i < nlocal; i++) + if (!(mask[i] & groupbit)) { + efield[i][0] = 0.0; + efield[i][1] = 0.0; + efield[i][2] = 0.0; + } +} + + +/* ---------------------------------------------------------------------- */ + +int ComputeEfieldAtom::pack_reverse_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = efield[i][0]; + buf[m++] = efield[i][1]; + buf[m++] = efield[i][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEfieldAtom::unpack_reverse_comm(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + efield[j][0] += buf[m++]; + efield[j][1] += buf[m++]; + efield[j][2] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +double ComputeEfieldAtom::memory_usage() +{ + double bytes = nmax*3 * sizeof(double); + return bytes; +} diff --git a/src/USER-DIELECTRIC/compute_efield_atom.h b/src/USER-DIELECTRIC/compute_efield_atom.h new file mode 100644 index 0000000000..1961e15d69 --- /dev/null +++ b/src/USER-DIELECTRIC/compute_efield_atom.h @@ -0,0 +1,74 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMPUTE_CLASS +// clang-format off +ComputeStyle(efield/atom,ComputeEfieldAtom); +// clang-format on +#else + +#ifndef LMP_COMPUTE_EFIELD_ATOM_H +#define LMP_COMPUTE_EFIELD_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeEfieldAtom : public Compute { + public: + ComputeEfieldAtom(class LAMMPS *, int, char **); + ~ComputeEfieldAtom(); + void init(); + void setup(); + void compute_peratom(); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + double memory_usage(); + + private: + int pairflag; + int kspaceflag; + double **efield_pair, **efield_kspace; + + int nmax; + double **efield; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Could not find compute stress/atom temperature ID + +Self-explanatory. + +E: Compute stress/atom temperature ID does not compute temperature + +The specified compute must compute temperature. + +E: Per-atom virial was not tallied on needed timestep + +You are using a thermo keyword that requires potentials to have +tallied the virial, but they didn't on this timestep. See the +variable doc page for ideas on how to make this work. + +*/ diff --git a/src/USER-DIELECTRIC/fix_polarize_bem_gmres.cpp b/src/USER-DIELECTRIC/fix_polarize_bem_gmres.cpp new file mode 100644 index 0000000000..2fd3d14b3f --- /dev/null +++ b/src/USER-DIELECTRIC/fix_polarize_bem_gmres.cpp @@ -0,0 +1,955 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + Trung Nguyen and Monica Olvera de la Cruz (Northwestern) + + Implement a boundary element solver for surface induced charges + using the GMRES algorithm + + Reference: Barros, Sinkovits, Luijten, J. Chem. Phys 2014, 140, 064903 + + GMRES solver: Original C version by Lili Ju, C++ version by John Burkardt. + The version adapted here is implemented where A is an operator acting on x, + and the residual (b-Ax) is computed directly. + + References: + 1) R. Barrett, M. Berry, T. Chan, J. Demmel, J. Donato, J. Dongarra, + V. Eijkhout, R. Pozo, C. Romine, H. van der Vorst, + Templates for the Solution of Linear Systems: Building Blocks for + Iterative Methods, SIAM, 1994, ISBN: 0898714710, LC: QA297.8.T45. + + 2) T. Kelley, Iterative Methods for Linear and Nonlinear Equations, + SIAM, 2004, ISBN: 0898713528, LC: QA297.8.K45. +------------------------------------------------------------------------- */ + +#include "fix_polarize_bem_gmres.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "group.h" +#include "kspace.h" +#include "math_const.h" +#include "memory.h" +#include "modify.h" +#include "msm_dielectric.h" +#include "pair_coul_cut_dielectric.h" +#include "pair_coul_long_dielectric.h" +#include "pair_lj_cut_coul_cut_dielectric.h" +#include "pair_lj_cut_coul_long_dielectric.h" +#include "pair_lj_cut_coul_msm_dielectric.h" +#include "pppm_dielectric.h" +#include "random_park.h" +#include "timer.h" +#include "update.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace FixConst; +using namespace MathConst; + +//#define _POLARIZE_DEBUG + +/* ---------------------------------------------------------------------- */ + +FixPolarizeBEMGMRES::FixPolarizeBEMGMRES(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg), q_backup(NULL), c(NULL), g(NULL), h(NULL), r(NULL), s(NULL), v(NULL), + y(NULL) +{ + if (narg < 5) error->all(FLERR, "Illegal fix polarize/bem/gmres command"); + + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Fix polarize requires atom style dielectric"); + + // parse required arguments + + nevery = utils::numeric(FLERR, arg[3], false, lmp); + if (nevery < 0) error->all(FLERR, "Illegal fix polarize/bem/gmres command"); + double tol = utils::numeric(FLERR, arg[4], false, lmp); + tol_abs = tol_rel = tol; + + itr_max = 20; + mr = 0; + randomized = 0; + ave_charge = 0; + + efield_pair = nullptr; + efield_kspace = nullptr; + + comm_forward = 1; + nmax = 0; + allocated = 0; + kspaceflag = 0; + + induced_charge_idx = nullptr; + induced_charges = nullptr; + rhs = nullptr; + buffer = nullptr; + tag2mat = nullptr; + mat2tag = nullptr; + + // set flags for arrays to clear in force_clear() + + torqueflag = extraflag = 0; + if (atom->torque_flag) torqueflag = 1; + if (atom->avec->forceclearflag) extraflag = 1; + + grow_arrays(atom->nmax); + atom->add_callback(0); // to ensure to work with atom->sort() + + // output the residual and actual number of iterations + + global_freq = 1; + vector_flag = 1; + size_vector = 2; + extvector = 0; +} + +/* ---------------------------------------------------------------------- */ + +FixPolarizeBEMGMRES::~FixPolarizeBEMGMRES() +{ + memory->destroy(q_backup); + memory->destroy(induced_charge_idx); + memory->destroy(induced_charges); + memory->destroy(rhs); + memory->destroy(buffer); + memory->destroy(mat2tag); + memory->destroy(tag2mat); + + if (allocated) deallocate(); + atom->delete_callback(id, 0); +} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeBEMGMRES::setmask() +{ + int mask = 0; + mask |= PRE_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::init() +{ + // mapping induced charge matrix/vector to atom tags and vice versa + + int i, maxtag; + double *q = atom->q; + int *mask = atom->mask; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + + tagint max_tag = -1; + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) max_tag = MAX(max_tag, tag[i]); + + tagint itmp; + MPI_Allreduce(&max_tag, &itmp, 1, MPI_LMP_TAGINT, MPI_MAX, world); + maxtag = (int) itmp; + + int *ncount; + memory->create(ncount, maxtag + 1, "polarize:ncount"); + for (i = 0; i <= maxtag; i++) ncount[i] = 0; + + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) ncount[tag[i]]++; + + memory->create(tag2mat, maxtag + 1, "polarize:tag2mat"); + MPI_Allreduce(ncount, tag2mat, maxtag + 1, MPI_INT, MPI_SUM, world); + + num_induced_charges = 0; + for (i = 0; i <= maxtag; i++) + if (tag2mat[i]) + tag2mat[i] = num_induced_charges++; + else + tag2mat[i] = -1; + + memory->create(mat2tag, num_induced_charges, "polarize:mat2tag"); + + num_induced_charges = 0; + for (i = 0; i <= maxtag; i++) + if (tag2mat[i] >= 0) mat2tag[num_induced_charges++] = i; + + for (i = 0; i < nlocal; i++) { + induced_charge_idx[i] = -1; + if (mask[i] & groupbit) induced_charge_idx[i] = tag2mat[tag[i]]; + } + + memory->destroy(ncount); + + // allocate memory for the solver + + memory->create(induced_charges, num_induced_charges, "polarize:induced_charges"); + memory->create(rhs, num_induced_charges, "polarize:rhs"); + memory->create(buffer, num_induced_charges, "polarize:buffer"); + + mat_dim = num_induced_charges; + if (mr > mat_dim - 1 || mr <= 0) mr = mat_dim - 1; + + if (allocated == 0) { + allocate(); + allocated = 1; + } + + // initialize random induced charges with zero sum + + if (randomized) { + + RanPark *random = new RanPark(lmp, seed_charge + comm->me); + for (i = 0; i < 100; i++) random->uniform(); + double sum, tmp = 0; + for (i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] < 0) continue; + q[i] = ave_charge * (random->uniform() - 0.5); + tmp += q[i]; + } + MPI_Allreduce(&tmp, &sum, 1, MPI_DOUBLE, MPI_SUM, world); + sum /= (double) num_induced_charges; + + tmp = 0; + for (i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] < 0) continue; + q[i] -= sum; + tmp += q[i]; + } + MPI_Allreduce(&tmp, &sum, 1, MPI_DOUBLE, MPI_SUM, world); + + if (comm->me == 0) utils::logmesg(lmp, "ave induced charge q = {:.8}\n", sum); + delete random; + } + + if (comm->me == 0) + utils::logmesg(lmp, + "GMRES solver for {} induced charges " + "using maximum {} q-vectors\n", + num_induced_charges, mr); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::setup(int vflag) +{ + // check if the pair styles in use are compatible + + if (strcmp(force->pair_style, "lj/cut/coul/long/dielectric") == 0) + efield_pair = ((PairLJCutCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/long/dielectric/omp") == 0) + efield_pair = ((PairLJCutCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/msm/dielectric") == 0) + efield_pair = ((PairLJCutCoulMSMDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/cut/dielectric") == 0) + efield_pair = ((PairLJCutCoulCutDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/cut/dielectric/omp") == 0) + efield_pair = ((PairLJCutCoulCutDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "coul/long/dielectric") == 0) + efield_pair = ((PairCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "coul/cut/dielectric") == 0) + efield_pair = ((PairCoulCutDielectric *) force->pair)->efield; + else + error->all(FLERR, "Pair style not compatible with fix polarize"); + + if (kspaceflag) { + if (force->kspace) { + if (strcmp(force->kspace_style, "pppm/dielectric") == 0) + efield_kspace = ((PPPMDielectric *) force->kspace)->efield; + else if (strcmp(force->kspace_style, "msm/dielectric") == 0) + efield_kspace = ((MSMDielectric *) force->kspace)->efield; + else + error->all(FLERR, "Kspace style not compatible with fix polarize/bem/gmres"); + } else + error->all(FLERR, "No Kspace style available for fix polarize/bem/gmres"); + } + + first = 1; + compute_induced_charges(); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::pre_force(int) +{ + if (nevery == 0) return; + if (update->ntimestep % nevery) return; + + compute_induced_charges(); + + // make sure forces are reset to zero before actual forces are computed + + force_clear(); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::compute_induced_charges() +{ + double *q = atom->q; + double *q_real = atom->q_unscaled; + double **norm = atom->mu; + double *area = atom->area; + double *ed = atom->ed; + double *em = atom->em; + double *epsilon = atom->epsilon; + int *mask = atom->mask; + int nlocal = atom->nlocal; + double epsilon0 = force->dielectric; + int eflag = 0; + int vflag = 0; + + // compute the right hand side (vector b) of Eq. (40) according to Eq. (42) + // keep the scaled real charges intact here to compute efield for the right hand side (b) + // and backup all the charges + // for induced charges q_real stores the free surface charge + // set the induced charges to be zero to compute the right hand side (b) + // the current value can be accessed via induced_charges[induced_charge_idx[i]] + + for (int i = 0; i < nlocal; i++) { + q_backup[i] = q[i]; + if (induced_charge_idx[i] >= 0) q[i] = 0; + } + + comm->forward_comm_fix(this); + + // note here q[i] are the bound charges including area + // so that kspace solver can be used directly with the charge values + // for the moment, require that newton off and full neighbor list for pair + // Note that in the definition of the electrical fields in Equations (41) and (53) + // in Ref. Barros et al there is a factor 1/(4pi), and + // that these are the electrical field is due to the rescaled real charges + // Note: the right-hand side (b) is in the unit of charge density + + force_clear(); + force->pair->compute(eflag, vflag); + if (kspaceflag) force->kspace->compute(eflag, vflag); + if (force->newton) comm->reverse_comm(); + + for (int i = 0; i < num_induced_charges; i++) buffer[i] = 0; + + for (int i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] < 0) continue; + int idx = induced_charge_idx[i]; + if (ed[i] == 0) { + buffer[idx] = 0; + continue; + } + double Ex = efield_pair[i][0]; + double Ey = efield_pair[i][1]; + double Ez = efield_pair[i][2]; + if (kspaceflag) { + Ex += efield_kspace[i][0]; + Ey += efield_kspace[i][1]; + Ez += efield_kspace[i][2]; + } + double dot = (Ex * norm[i][0] + Ey * norm[i][1] + Ez * norm[i][2]) / epsilon[i]; + double sigma_f = q_real[i] / area[i]; + buffer[idx] = (1 - em[i]) * sigma_f - epsilon0 * ed[i] * dot / (4 * MY_PI); + } + + MPI_Allreduce(buffer, rhs, num_induced_charges, MPI_DOUBLE, MPI_SUM, world); + + // compute the initial residual r before iteration + // while it seems that assigning induced charges to the last values + // could improve convergence, it's not necessarily the cases + // where the system is evolving or diffusive + // to be defensive here, reset induced charges to zeros + // and initial residual r equal to rhs + + for (int i = 0; i < num_induced_charges; i++) { + induced_charges[i] = 0; + r[i] = rhs[i]; + } + + // get the norm of the right hand side vector + + normb = sqrt(vec_dot(rhs, rhs, num_induced_charges)); + if (normb < tol_abs) return; + + // use the GMRES solver to solve for the induced charges + + gmres_solve(induced_charges, r); + + // set the particle charges in the group to be the induced charges + // restore the charges of the real particles (that are not in the group) + + for (int i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] >= 0) { + int idx = induced_charge_idx[i]; + q[i] = induced_charges[idx] * area[i] + q_real[i]; + } else { + q[i] = q_backup[i]; + } + } + + comm->forward_comm_fix(this); + + if (first) first = 0; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::gmres_solve(double *x, double *r) +{ + int i, j, k, k_copy, n, itr; + double av, htmp, mu, rho_tol; + double delta = 1.0e-03; + + n = mat_dim; + + // compute the relative tolerance + // rho = norm(r) + rho = sqrt(vec_dot(r, r, n)); + rho_tol = rho * tol_rel; + + // the outer loop to itr_max + // let the compiler optimize the 1d loops + + for (itr = 1; itr <= itr_max; itr++) { + + // the first vector v (i.e. v[0]) is the updated residual normalized + + for (i = 0; i < n; i++) v[i + 0 * n] = r[i] / rho; + + g[0] = rho; + for (i = 1; i <= mr; i++) g[i] = 0.0; + + // fill up h with zero + + memset(h, 0, (mr + 1) * mr * sizeof(double)); + + // the inner loop k = 1..(n-1) + // build up the k-th Krylov space, + // actually build the Q_k matrix of size n by k, + // whose the columns are k vectors v(1)...v(k) + // remember that v[0] is computed from the updated residual as above + + for (k = 1; k <= mr; k++) { + k_copy = k; + + // compute v(k) <- a * v(k-1) + // here is the tricky part: v(k-1) plays a role as "charges" + // matvec(a, v+(k-1)*n, v+k*n, n); + + apply_operator(v + (k - 1) * n, v + k * n, n); + + // compute the norm of the vector v(k) + + av = sqrt(vec_dot(v + k * n, v + k * n, n)); + + // Arnoldi iteration to find v's + // orthogonalize the k vectors v(1) . . . v(k) + + for (j = 1; j <= k; j++) { + h[(j - 1) + (k - 1) * (mr + 1)] = vec_dot(v + k * n, v + (j - 1) * n, n); + for (i = 0; i < n; i++) + v[i + k * n] = v[i + k * n] - h[(j - 1) + (k - 1) * (mr + 1)] * v[i + (j - 1) * n]; + } + + // compute the norm of the newly created vector v(k) + + h[k + (k - 1) * (mr + 1)] = sqrt(vec_dot(v + k * n, v + k * n, n)); + + // if the norm is close to zero, repeat the above orthogonalization + + if ((av + delta * h[k + (k - 1) * (mr + 1)]) == av) { + for (j = 1; j <= k; j++) { + htmp = vec_dot(v + k * n, v + (j - 1) * n, n); + h[(j - 1) + (k - 1) * (mr + 1)] = h[(j - 1) + (k - 1) * (mr + 1)] + htmp; + for (i = 0; i < n; i++) v[i + k * n] = v[i + k * n] - htmp * v[i + (j - 1) * n]; + } + h[k + (k - 1) * (mr + 1)] = sqrt(vec_dot(v + k * n, v + k * n, n)); + } + + // if the norm of v(k) is nonzero, normalize v(k) + + if (h[k + (k - 1) * (mr + 1)] != 0.0) { + for (i = 0; i < n; i++) { v[i + k * n] = v[i + k * n] / h[k + (k - 1) * (mr + 1)]; } + } + + // if k is not the first iteration, + // find the vector y that minimizes the norm of the residual + // using the least square method + + if (k > 1) { + + // update y(i-1) <- h(k-1, i-1) for i = 1...(k+1) + + for (i = 1; i <= k + 1; i++) y[i - 1] = h[(i - 1) + (k - 1) * (mr + 1)]; + + // apply the Given rotation to y[j-1] and y[j] for j = 1..(k-1) + + for (j = 1; j <= k - 1; j++) mult_givens(c[j - 1], s[j - 1], j - 1, y); + + // update h(k-1, i-1) <- y(i-1) for i = 1..(k_1) + + for (i = 1; i <= k + 1; i++) h[i - 1 + (k - 1) * (mr + 1)] = y[i - 1]; + } + + // compute cosine and sine terms of the Given rotations + + mu = sqrt(h[(k - 1) + (k - 1) * (mr + 1)] * h[(k - 1) + (k - 1) * (mr + 1)] + + h[k + (k - 1) * (mr + 1)] * h[k + (k - 1) * (mr + 1)]); + c[k - 1] = h[(k - 1) + (k - 1) * (mr + 1)] / mu; + s[k - 1] = -h[k + (k - 1) * (mr + 1)] / mu; + + // update h(k-1,k-1) and set h(k-1,k) to zero + + h[(k - 1) + (k - 1) * (mr + 1)] = + c[k - 1] * h[(k - 1) + (k - 1) * (mr + 1)] - s[k - 1] * h[k + (k - 1) * (mr + 1)]; + h[k + (k - 1) * (mr + 1)] = 0; + + // apply the Givens rotation to g[k-1] and g[k] + + mult_givens(c[k - 1], s[k - 1], k - 1, g); + + // compute the norm of the residual + + rho = fabs(g[k]); + +#ifdef _POLARIZE_DEBUG + if (comm->me == 0) { + char message[256]; + sprintf(message, "itr = %d: k = %d, norm(r) = %g norm(b) = %g", itr, k, rho, normb); + error->warning(FLERR, message); + } +#endif + + if (rho <= rho_tol && rho <= tol_abs) break; + } + + k = k_copy - 1; + + // compute the estimate y from h + + y[k] = g[k] / h[k + k * (mr + 1)]; + for (i = k; i >= 1; i--) { + y[i - 1] = g[i - 1]; + for (j = i + 1; j <= k + 1; j++) + y[i - 1] = y[i - 1] - h[(i - 1) + (j - 1) * (mr + 1)] * y[j - 1]; + y[i - 1] = y[i - 1] / h[(i - 1) + (i - 1) * (mr + 1)]; + } + + // update x at the current iteration: x <- Q(n by k) * y (k by 1) + + for (i = 1; i <= n; i++) { + for (j = 1; j <= k + 1; j++) x[i - 1] = x[i - 1] + v[(i - 1) + (j - 1) * n] * y[j - 1]; + } + + // update the residual with the updated induced charges (x) + + update_residual(x, r, n); + + // rho = norm(r) + + rho = sqrt(vec_dot(r, r, n)); + +#ifdef _POLARIZE_DEBUG + if (comm->me == 0) { + char message[256]; + sprintf(message, "itr = %d: norm(r) = %g norm(b) = %g", itr, rho, normb); + error->warning(FLERR, message); + } +#endif + + // Barros et al. suggested the condition: norm(r) < EPSILON norm(b) + + if (rho < tol_rel * normb) break; + + // general GMRES convergence criteria + + if (rho <= rho_tol && rho <= tol_abs) break; + } + + iterations = itr; +} + +/* ---------------------------------------------------------------------- + compute the result of operator A on a given vector w + matvec(A, v(k-1), v(k), n); +------------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::apply_operator(double *w, double *Aw, int n) +{ + int i; + double *q = atom->q; + double **norm = atom->mu; + double *area = atom->area; + double *ed = atom->ed; + double *em = atom->em; + double *epsilon = atom->epsilon; + int *mask = atom->mask; + int nlocal = atom->nlocal; + double epsilon0 = force->dielectric; + int eflag = 0; + int vflag = 0; + + // set the induced charges to be w + // the real charges are set to zero: Aw only involves sigma_b (not sigma_f) + // need not to revert the induced charges + // because update_residual() will set the induced charges anyway + + for (i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] < 0) { + q[i] = 0; + } else { + int idx = induced_charge_idx[i]; + q[i] = w[idx] * area[i]; + } + } + + comm->forward_comm_fix(this); + + // compute the electrical field due to w*area: y = A (w*area) + + force_clear(); + force->pair->compute(eflag, vflag); + if (kspaceflag) force->kspace->compute(eflag, vflag); + if (force->newton) comm->reverse_comm(); + + // now efield is the electrical field due to induced charges only + // Note that in the definition of the electrical fields in Equations (41) and (53) + // in Ref. Barros et al there is a factor 1/(4pi). + + for (i = 0; i < num_induced_charges; i++) buffer[i] = 0; + + for (i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] < 0) continue; + + int idx = induced_charge_idx[i]; + double Ex = efield_pair[i][0]; + double Ey = efield_pair[i][1]; + double Ez = efield_pair[i][2]; + if (kspaceflag) { + Ex += efield_kspace[i][0]; + Ey += efield_kspace[i][1]; + Ez += efield_kspace[i][2]; + } + double dot = (Ex * norm[i][0] + Ey * norm[i][1] + Ez * norm[i][2]) / epsilon[i]; + buffer[idx] = em[i] * w[idx] + epsilon0 * ed[i] * dot / (4 * MY_PI); + } + + MPI_Allreduce(buffer, Aw, num_induced_charges, MPI_DOUBLE, MPI_SUM, world); +} + +/* ---------------------------------------------------------------------- + need to turn the real charges back on + set the induced charges to be w + compute the new residual in r = b - Ax without directly computing A x + using Eq. (60) in Barros et al. +------------------------------------------------------------------------ */ + +void FixPolarizeBEMGMRES::update_residual(double *w, double *r, int n) +{ + int i; + double *q = atom->q; + double *q_real = atom->q_unscaled; + double **norm = atom->mu; + double *area = atom->area; + double *ed = atom->ed; + double *em = atom->em; + double *epsilon = atom->epsilon; + int *mask = atom->mask; + int nlocal = atom->nlocal; + double epsilon0 = force->dielectric; + int eflag = 0; + int vflag = 0; + + // compute the Coulombic forces and electrical field E + // due to both ions and induced charges + // note here q[i] = the bound charges including area + free surface charges + // so that kspace solver can be used directly + + for (i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] < 0) { + q[i] = q_backup[i]; + } else { + int idx = induced_charge_idx[i]; + q[i] = w[idx] * area[i] + q_real[i]; + } + } + + comm->forward_comm_fix(this); + + force_clear(); + force->pair->compute(eflag, vflag); + if (kspaceflag) force->kspace->compute(eflag, vflag); + if (force->newton) comm->reverse_comm(); + + // compute the residual according to Eq. (60) in Barros et al. + // Note: in the definition of the electrical fields in Equations (41) and (53) + // in Ref. Barros et al there is a factor 1/(4pi). + + for (i = 0; i < num_induced_charges; i++) buffer[i] = 0; + + for (i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] < 0) continue; + + int idx = induced_charge_idx[i]; + if (ed[i] == 0) { + buffer[idx] = 0; + continue; + } + double Ex = efield_pair[i][0]; + double Ey = efield_pair[i][1]; + double Ez = efield_pair[i][2]; + if (kspaceflag) { + Ex += efield_kspace[i][0]; + Ey += efield_kspace[i][1]; + Ez += efield_kspace[i][2]; + } + double dot = (Ex * norm[i][0] + Ey * norm[i][1] + Ez * norm[i][2]) / epsilon[i]; + double sigma_f = q_real[i] / area[i]; + buffer[idx] = (1 - em[i]) * sigma_f - em[i] * w[idx] - epsilon0 * ed[i] * dot / (4 * MY_PI); + } + + MPI_Allreduce(buffer, r, num_induced_charges, MPI_DOUBLE, MPI_SUM, world); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::force_clear() +{ + int nbytes = sizeof(double) * atom->nlocal; + if (force->newton) nbytes += sizeof(double) * atom->nghost; + + if (nbytes) { + memset(&atom->f[0][0], 0, 3 * nbytes); + if (torqueflag) memset(&atom->torque[0][0], 0, 3 * nbytes); + if (extraflag) atom->avec->force_clear(0, nbytes); + } +} + +/* ---------------------------------------------------------------------- */ + +double FixPolarizeBEMGMRES::vec_dot(const double *a1, const double *a2, int n) +{ + double value = 0.0; + for (int i = 0; i < n; i++) value += (a1[i] * a2[i]); + return value; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +double FixPolarizeBEMGMRES::memory_usage() +{ + double bytes = 0; + bytes += mat_dim * sizeof(double); // induced_charges + bytes += mat_dim * sizeof(double); // buffer + bytes += mat_dim * sizeof(double); // rhs + bytes += atom->nmax * sizeof(double); // induced_charge_idx + bytes += atom->nmax * sizeof(double); // q_backup + bytes += mr * sizeof(double); // c + bytes += (mr + 1) * sizeof(double); // g + bytes += (mr + 1) * mr * sizeof(double); // h + bytes += mat_dim * sizeof(double); // r + bytes += mr * (mr + 1) * sizeof(double); // s + bytes += mat_dim * sizeof(double); // v + bytes += (mr + 1) * mr * sizeof(double); // y + return bytes; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::allocate() +{ + memory->create(c, mr, "polarize:c"); + memory->create(g, mr + 1, "polarize:g"); + memory->create(h, (mr + 1) * mr, "polarize:h"); + memory->create(r, mat_dim, "polarize:r"); + memory->create(s, mr, "polarize:s"); + memory->create(v, mat_dim * (mr + 1), "polarize:v"); + memory->create(y, mr + 1, "polarize:y"); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::deallocate() +{ + memory->destroy(c); + memory->destroy(g); + memory->destroy(h); + memory->destroy(r); + memory->destroy(s); + memory->destroy(v); + memory->destroy(y); +} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeBEMGMRES::modify_param(int narg, char **arg) +{ + int iarg = 0; + while (iarg < narg) { + if (strcmp(arg[iarg], "itr_max") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix_modify command"); + itr_max = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + iarg += 2; + } else if (strcmp(arg[iarg], "mr") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix_modify command"); + mr = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + iarg += 2; + } else if (strcmp(arg[iarg], "kspace") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix_modify command"); + if (strcmp(arg[iarg + 1], "yes") == 0) + kspaceflag = 1; + else if (strcmp(arg[iarg + 1], "no") == 0) + kspaceflag = 0; + else + error->all(FLERR, "Illegal fix_modify command for fix polarize"); + iarg += 2; + } else if (strcmp(arg[iarg], "dielectrics") == 0) { + if (iarg + 6 > narg) error->all(FLERR, "Illegal fix_modify command"); + double epsiloni = -1, areai = -1; + double qreali = 0; + int set_charge = 0; + double ediff = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + double emean = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + if (strcmp(arg[iarg + 3], "NULL") != 0) + epsiloni = utils::numeric(FLERR, arg[iarg + 3], false, lmp); + if (strcmp(arg[iarg + 4], "NULL") != 0) + areai = utils::numeric(FLERR, arg[iarg + 4], false, lmp); + if (strcmp(arg[iarg + 5], "NULL") != 0) { + qreali = utils::numeric(FLERR, arg[iarg + 5], false, lmp); + set_charge = 1; + } + set_dielectric_params(ediff, emean, epsiloni, areai, set_charge, qreali); + + iarg += 6; + } else if (strcmp(arg[iarg], "rand") == 0) { + if (iarg + 3 > narg) error->all(FLERR, "Illegal fix_modify command"); + ave_charge = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + seed_charge = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + randomized = 1; + iarg += 3; + } else + error->all(FLERR, "Illegal fix_modify command"); + } + + return iarg; +} + +/* ---------------------------------------------------------------------- + allocate local atom-based arrays +------------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::grow_arrays(int n) +{ + if (n > nmax) nmax = n; + memory->grow(induced_charge_idx, nmax, "polarize:induced_charge_idx"); + memory->grow(q_backup, nmax, "polarize:q_backup"); +} + +/* ---------------------------------------------------------------------- + copy values within local atom-based arrays +------------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::copy_arrays(int i, int j, int delflag) +{ + induced_charge_idx[j] = induced_charge_idx[i]; +} + +/* ---------------------------------------------------------------------- + initialize one atom's array values, called when atom is created +------------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::set_arrays(int i) +{ + induced_charge_idx[i] = -1; +} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeBEMGMRES::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +{ + int m; + for (m = 0; m < n; m++) buf[m] = atom->q[list[m]]; + return n; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::unpack_forward_comm(int n, int first, double *buf) +{ + int i, m; + for (m = 0, i = first; m < n; m++, i++) atom->q[i] = buf[m]; +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based arrays for exchange with another proc +------------------------------------------------------------------------- */ + +int FixPolarizeBEMGMRES::pack_exchange(int i, double *buf) +{ + buf[0] = ubuf(induced_charge_idx[i]).d; + return 1; +} + +/* ---------------------------------------------------------------------- + unpack values in local atom-based arrays from exchange with another proc +------------------------------------------------------------------------- */ + +int FixPolarizeBEMGMRES::unpack_exchange(int nlocal, double *buf) +{ + induced_charge_idx[nlocal] = (int) ubuf(buf[0]).i; + return 1; +} + +/* ---------------------------------------------------------------------- + return the number of iterations for convergence + and current residual +------------------------------------------------------------------------- */ + +double FixPolarizeBEMGMRES::compute_vector(int n) +{ + if (n == 0) + return iterations; + else if (n == 1) + return rho; + else + return 0; +} + +/* ---------------------------------------------------------------------- + set dielectric params for the atoms in the group +------------------------------------------------------------------------- */ + +void FixPolarizeBEMGMRES::set_dielectric_params(double ediff, double emean, double epsiloni, + double areai, int set_charge, double qvalue) +{ + double *area = atom->area; + double *ed = atom->ed; + double *em = atom->em; + double *q_unscaled = atom->q_unscaled; + double *epsilon = atom->epsilon; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + ed[i] = ediff; + em[i] = emean; + if (areai > 0) area[i] = areai; + if (epsiloni > 0) epsilon[i] = epsiloni; + if (set_charge) q_unscaled[i] = qvalue; + } + } +} diff --git a/src/USER-DIELECTRIC/fix_polarize_bem_gmres.h b/src/USER-DIELECTRIC/fix_polarize_bem_gmres.h new file mode 100644 index 0000000000..7671ddf1c2 --- /dev/null +++ b/src/USER-DIELECTRIC/fix_polarize_bem_gmres.h @@ -0,0 +1,120 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS +// clang-format off +FixStyle(polarize/bem/gmres,FixPolarizeBEMGMRES); +// clang-format on +#else + +#ifndef LMP_FIX_POLARIZE_BEM_GMRES_H +#define LMP_FIX_POLARIZE_BEM_GMRES_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixPolarizeBEMGMRES : public Fix { + public: + FixPolarizeBEMGMRES(class LAMMPS *, int, char **); + ~FixPolarizeBEMGMRES(); + virtual int setmask(); + virtual void init(); + virtual void setup(int); + virtual void pre_force(int); + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + int pack_exchange(int, double *); + int unpack_exchange(int, double *); + virtual double compute_vector(int); + + int modify_param(int, char **); + double memory_usage(); + void grow_arrays(int); + void copy_arrays(int, int, int); + void set_arrays(int); + virtual void allocate(); + virtual void deallocate(); + + virtual void compute_induced_charges(); + void set_dielectric_params(double, double, double, double, int, double); + + class AtomVecDielectric *avec; + + protected: + int nmax; + int nevery; // to be invoked every time steps + int * + tag2mat; // tag2mat[atom->tag[i]] = the index of the atoms in the induced charge arrays from atom tags + int * + mat2tag; // mat2tag[idx] = the atom tag of the induced charge idx in the induced charge arrays + int *induced_charge_idx; // return the index of the atoms in the induced charge arrays + int num_induced_charges; // total number of induced charges + double *induced_charges; // values of induced charges + double *buffer; // buffer of size num_induced_charges + double *q_backup; // backup for the real charges + int allocated; + double **efield_pair; // electrical field at position of atom i due to pair contribution + double **efield_kspace; // electrical field at position of atom i due to kspace contribution + int kspaceflag; // 1 if kspace is used for the induced charge computation + int torqueflag, extraflag; + + void force_clear(); + double vec_dot(const double *, const double *, + int); // dot product between two vectors of length n + + private: + int mat_dim; // matrix dimension = total number of induced charges + int mr; // number of vectors used to span the Krylov space + int iterations; // actual number of iterations + int itr_max; // maximum number of outer iterations + int randomized; // 1 if generating random induced charges, 0 otherwise + double ave_charge; // average random charge + int seed_charge; + + double *c, *g, *h, *r, *s, *v, *y; // vectors used by the solver + double *rhs; // right-hand side vector of the equation Ax = b + double tol_abs, tol_rel; // tolerance for convergence + double normb; // norm of the rhs vector b + double rho; // norm of (b - Ax) + int first; // 1 if first time invoked (initializing induced charges with zero) + + void gmres_solve(double *, double *); // GMRES workhorse + void apply_operator(double *, double *, int); // compute Ax without explicitly storing A + void update_residual(double *, double *, + int); // compute (b - Ax) directly (without computing b and Ax explcitly) + + // Givens rotations + inline void mult_givens(double c, double s, int k, double *g) + { + double g1 = c * g[k] - s * g[k + 1]; + double g2 = s * g[k] + c * g[k + 1]; + g[k] = g1; + g[k + 1] = g2; + } +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/USER-DIELECTRIC/fix_polarize_bem_icc.cpp b/src/USER-DIELECTRIC/fix_polarize_bem_icc.cpp new file mode 100644 index 0000000000..325e3044ff --- /dev/null +++ b/src/USER-DIELECTRIC/fix_polarize_bem_icc.cpp @@ -0,0 +1,454 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + Trung Nguyen and Monica Olvera de la Cruz (Northwestern) + References: + 1) Tyagi, Suzen, Sega, Barbosa, Kantorovich, Holm, J. Chem. Phys. 2010, + 132, 154112 + 2) Barros, Sinkovits, Luijten, J. Chem. Phys 2014, 140, 064903 + + Implement a boundary-element solver for image charge computation (ICC) + using successive overrelaxation +------------------------------------------------------------------------- */ + +#include "fix_polarize_bem_icc.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "group.h" +#include "kspace.h" +#include "math_const.h" +#include "memory.h" +#include "msm_dielectric.h" +#include "pair_coul_cut_dielectric.h" +#include "pair_coul_long_dielectric.h" +#include "pair_lj_cut_coul_cut_dielectric.h" +#include "pair_lj_cut_coul_long_dielectric.h" +#include "pair_lj_cut_coul_msm_dielectric.h" +#include "pppm_dielectric.h" +#include "random_park.h" +#include "update.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace FixConst; +using namespace MathConst; + +//#define _POLARIZE_DEBUG + +/* ---------------------------------------------------------------------- */ + +FixPolarizeBEMICC::FixPolarizeBEMICC(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) +{ + if (narg < 5) error->all(FLERR, "Illegal fix polarize/bem/icc command"); + + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Fix polarize requires atom style dielectric"); + + // parse required arguments + + nevery = utils::inumeric(FLERR, arg[3], false, lmp); + if (nevery < 0) error->all(FLERR, "Illegal fix polarize/bem/icc command"); + double tol = utils::numeric(FLERR, arg[4], false, lmp); + tol_abs = tol_rel = tol; + + itr_max = 20; + omega = 0.7; + randomized = 0; + ave_charge = 0; + + efield_pair = nullptr; + efield_kspace = nullptr; + + comm_forward = 1; + kspaceflag = 0; + + global_freq = 1; + vector_flag = 1; + size_vector = 2; + extvector = 0; + + // set flags for arrays to clear in force_clear() + + torqueflag = extraflag = 0; + if (atom->torque_flag) torqueflag = 1; + if (atom->avec->forceclearflag) extraflag = 1; +} + +/* ---------------------------------------------------------------------- */ + +FixPolarizeBEMICC::~FixPolarizeBEMICC() {} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeBEMICC::setmask() +{ + int mask = 0; + mask |= PRE_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMICC::init() +{ + int ncount = group->count(igroup); + if (comm->me == 0) utils::logmesg(lmp, "BEM/ICC solver for {} induced charges\n", ncount); + + // initialize random induced charges with zero sum + + if (randomized) { + + int i; + double *q = atom->q; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + RanPark *random = new RanPark(lmp, seed_charge + comm->me); + for (i = 0; i < 100; i++) random->uniform(); + double sum, tmp = 0; + for (i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + q[i] = ave_charge * (random->uniform() - 0.5); + tmp += q[i]; + } + MPI_Allreduce(&tmp, &sum, 1, MPI_DOUBLE, MPI_SUM, world); + sum /= (double) ncount; + + tmp = 0; + for (i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + q[i] -= sum; + tmp += q[i]; + } + MPI_Allreduce(&tmp, &sum, 1, MPI_DOUBLE, MPI_SUM, world); + + delete random; + } +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMICC::setup(int vflag) +{ + // check if the pair styles in use are compatible + + if (strcmp(force->pair_style, "lj/cut/coul/long/dielectric") == 0) + efield_pair = ((PairLJCutCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/long/dielectric/omp") == 0) + efield_pair = ((PairLJCutCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/msm/dielectric") == 0) + efield_pair = ((PairLJCutCoulMSMDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/cut/dielectric") == 0) + efield_pair = ((PairLJCutCoulCutDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/cut/dielectric/omp") == 0) + efield_pair = ((PairLJCutCoulCutDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "coul/long/dielectric") == 0) + efield_pair = ((PairCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "coul/cut/dielectric") == 0) + efield_pair = ((PairCoulCutDielectric *) force->pair)->efield; + else + error->all(FLERR, "Pair style not compatible with fix polarize/bem/icc"); + + // check if kspace is used for force computation + + if (force->kspace) { + + kspaceflag = 1; + if (strcmp(force->kspace_style, "pppm/dielectric") == 0) + efield_kspace = ((PPPMDielectric *) force->kspace)->efield; + else if (strcmp(force->kspace_style, "msm/dielectric") == 0) + efield_kspace = ((MSMDielectric *) force->kspace)->efield; + else + error->all(FLERR, "Kspace style not compatible with fix polarize/bem/icc"); + + } else { + + if (kspaceflag == 1) { // users specified kspace yes + error->warning(FLERR, "No Kspace style available for fix polarize/bem/icc"); + kspaceflag = 0; + } + } + + compute_induced_charges(); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMICC::pre_force(int) +{ + if (nevery == 0) return; + if (update->ntimestep % nevery) return; + + compute_induced_charges(); + + // make sure forces are reset to zero before actual forces are computed + + force_clear(); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMICC::compute_induced_charges() +{ + double *q = atom->q; + double *q_real = atom->q_unscaled; + double **norm = atom->mu; + double *area = atom->area; + double *ed = atom->ed; + double *em = atom->em; + double *epsilon = atom->epsilon; + int *mask = atom->mask; + int nlocal = atom->nlocal; + double epsilon0 = force->dielectric; + int eflag = 1; + int vflag = 0; + int itr; + + // use Eq. (64) in Barros et al. to initialize the induced charges + // Note: area[i] is included here to ensure correct charge unit + // for direct use in force/efield compute + // for induced charges q_real stores the free surface charge + // q_real are read from the data file + // Note that the electrical fields here are due to the rescaled real charges, + // and also multiplied by epsilon[i] + // Let's choose that epsilon[i] = em[i] for the interface particles + + force_clear(); + force->pair->compute(eflag, vflag); + if (kspaceflag) force->kspace->compute(eflag, vflag); + if (force->newton) comm->reverse_comm(); + + int i10 = 0; + for (int i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + + double Ex = efield_pair[i][0]; + double Ey = efield_pair[i][1]; + double Ez = efield_pair[i][2]; + if (kspaceflag) { + Ex += efield_kspace[i][0]; + Ey += efield_kspace[i][1]; + Ez += efield_kspace[i][2]; + } + + // divide (Ex,Ey,Ez) by epsilon[i] here + double dot = (Ex * norm[i][0] + Ey * norm[i][1] + Ez * norm[i][2]) / (2 * MY_PI) / epsilon[i]; + double q_free = q_real[i]; + double q_bound = 0; + q_bound = (1.0 / em[i] - 1) * q_free - epsilon0 * (ed[i] / (2 * em[i])) * dot * area[i]; + q[i] = q_free + q_bound; + } + + comm->forward_comm_fix(this); + + // iterate + + for (itr = 0; itr < itr_max; itr++) { + + force_clear(); + force->pair->compute(eflag, vflag); + if (kspaceflag) force->kspace->compute(eflag, vflag); + if (force->newton) comm->reverse_comm(); + + double tol = 0; + for (int i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + + double q_free = q_real[i]; + double qtmp = q[i] - q_free; + double Ex = efield_pair[i][0]; + double Ey = efield_pair[i][1]; + double Ez = efield_pair[i][2]; + if (kspaceflag) { + Ex += efield_kspace[i][0]; + Ey += efield_kspace[i][1]; + Ez += efield_kspace[i][2]; + } + + // Eq. (69) in Barros et al., sigma_f[i] = q_real[i] / area[i] + // note the area[i] is included here to ensure correct charge unit + // for direct use in force/efield compute + + double dot = (Ex * norm[i][0] + Ey * norm[i][1] + Ez * norm[i][2]) / (4 * MY_PI) / epsilon[i]; + double q_bound = q[i] - q_free; + q_bound = (1 - omega) * q_bound + + omega * ((1.0 / em[i] - 1) * q_free - epsilon0 * (ed[i] / em[i]) * dot * area[i]); + q[i] = q_free + q_bound; + + // Eq. (11) in Tyagi et al., with f from Eq. (6) + // NOTE: Tyagi et al. defined the normal vector n_i pointing + // from the medium containg the ions toward the other medium, + // which makes the normal vector direction depend on the ion position + // Also, since Tyagi et al. chose epsilon_1 for the uniform dielectric constant + // of the equivalent system, there is epsilon_1 in f in Eq. (6). + // Here we are using (q/epsilon_i) for the real charges and 1.0 for the equivalent system + // hence there's no epsilon_1 in the factor f + + //double dot = (Ex*norm[i][0] + Ey*norm[i][1] + Ez*norm[i][2]); + //double f = (ed[i] / (2 * em[i])) / (2*MY_PI); + //q[i] = (1 - omega) * q[i] - omega * epsilon0 * f * dot * area[i]; + + double delta = fabs(qtmp - q_bound); + double r = (fabs(qtmp) > 0) ? delta / fabs(qtmp) : 0; + if (tol < r) tol = r; + +#ifdef _POLARIZE_DEBUG +//printf("i = %d: q_bound = %f \n", i, q_bound); +#endif + } + + comm->forward_comm_fix(this); + + MPI_Allreduce(&tol, &rho, 1, MPI_DOUBLE, MPI_MAX, world); +#ifdef _POLARIZE_DEBUG + printf("itr = %d: rho = %f\n", itr, rho); +#endif + if (itr > 0 && rho < tol_rel) break; + } + + iterations = itr; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMICC::force_clear() +{ + int nbytes = sizeof(double) * atom->nlocal; + if (force->newton) nbytes += sizeof(double) * atom->nghost; + + if (nbytes) { + memset(&atom->f[0][0], 0, 3 * nbytes); + if (torqueflag) memset(&atom->torque[0][0], 0, 3 * nbytes); + if (extraflag) atom->avec->force_clear(0, nbytes); + } +} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeBEMICC::modify_param(int narg, char **arg) +{ + int iarg = 0; + while (iarg < narg) { + if (strcmp(arg[iarg], "itr_max") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix_modify command"); + itr_max = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + iarg += 2; + } else if (strcmp(arg[iarg], "omega") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix_modify command"); + omega = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + iarg += 2; + } else if (strcmp(arg[iarg], "kspace") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix_modify command"); + if (strcmp(arg[iarg + 1], "yes") == 0) + kspaceflag = 1; + else if (strcmp(arg[iarg + 1], "no") == 0) + kspaceflag = 0; + else + error->all(FLERR, "Illegal fix_modify command for fix polarize"); + iarg += 2; + } else if (strcmp(arg[iarg], "dielectrics") == 0) { + if (iarg + 6 > narg) error->all(FLERR, "Illegal fix_modify command"); + double epsiloni = -1, areai = -1; + double qunscaledi = 0; + int set_charge = 0; + double ediff = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + double emean = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + if (strcmp(arg[iarg + 3], "NULL") != 0) + epsiloni = utils::numeric(FLERR, arg[iarg + 3], false, lmp); + if (strcmp(arg[iarg + 4], "NULL") != 0) + areai = utils::numeric(FLERR, arg[iarg + 4], false, lmp); + if (strcmp(arg[iarg + 5], "NULL") != 0) { + qunscaledi = utils::numeric(FLERR, arg[iarg + 5], false, lmp); + set_charge = 1; + } + set_dielectric_params(ediff, emean, epsiloni, areai, set_charge, qunscaledi); + + iarg += 6; + } else if (strcmp(arg[iarg], "rand") == 0) { + if (iarg + 3 > narg) error->all(FLERR, "Illegal fix_modify command"); + ave_charge = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + seed_charge = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + randomized = 1; + iarg += 3; + } else + error->all(FLERR, "Illegal fix_modify command"); + } + + return iarg; +} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeBEMICC::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +{ + int m; + for (m = 0; m < n; m++) buf[m] = atom->q[list[m]]; + return n; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeBEMICC::unpack_forward_comm(int n, int first, double *buf) +{ + int i, m; + for (m = 0, i = first; m < n; m++, i++) atom->q[i] = buf[m]; +} + +/* ---------------------------------------------------------------------- + set dielectric params for the atoms in the group +------------------------------------------------------------------------- */ + +void FixPolarizeBEMICC::set_dielectric_params(double ediff, double emean, double epsiloni, + double areai, int set_charge, double qvalue) +{ + double *area = atom->area; + double *ed = atom->ed; + double *em = atom->em; + double *q_unscaled = atom->q_unscaled; + double *epsilon = atom->epsilon; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + ed[i] = ediff; + em[i] = emean; + if (areai > 0) area[i] = areai; + if (epsiloni > 0) epsilon[i] = epsiloni; + if (set_charge) q_unscaled[i] = qvalue; + } + } +} + +/* ---------------------------------------------------------------------- + return the actual number of iterations + and current relative error +------------------------------------------------------------------------- */ + +double FixPolarizeBEMICC::compute_vector(int n) +{ + if (n == 0) + return iterations; + else if (n == 1) + return rho; + else + return 0; +} diff --git a/src/USER-DIELECTRIC/fix_polarize_bem_icc.h b/src/USER-DIELECTRIC/fix_polarize_bem_icc.h new file mode 100644 index 0000000000..6ba6acb1a0 --- /dev/null +++ b/src/USER-DIELECTRIC/fix_polarize_bem_icc.h @@ -0,0 +1,78 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS +// clang-format off +FixStyle(polarize/bem/icc,FixPolarizeBEMICC); +// clang-format on +#else + +#ifndef LMP_FIX_POLARIZE_BEM_ICC_H +#define LMP_FIX_POLARIZE_BEM_ICC_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixPolarizeBEMICC : public Fix { + public: + FixPolarizeBEMICC(class LAMMPS *, int, char **); + ~FixPolarizeBEMICC(); + virtual int setmask(); + virtual void init(); + virtual void setup(int); + virtual void pre_force(int); + virtual double compute_vector(int); + int modify_param(int, char **); + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + + virtual void compute_induced_charges(); + void set_dielectric_params(double, double, double, double, int, double); + + class AtomVecDielectric *avec; + + protected: + int nevery; // to be invoked every time steps + double **efield_pair; // electrical field at position of atom i due to pair contribution + double **efield_kspace; // electrical field at position of atom i due to kspace contribution + int kspaceflag; // 1 if kspace is used for the induced charge computation + int torqueflag, extraflag; + + void force_clear(); + + private: + int iterations; // actual number of iterations + int itr_max; // maximum number of outer iterations + double tol_abs, tol_rel; // tolerance for convergence + double rho; // current error + double omega; // iterative weight + int randomized; // 1 if generating random induced charges, 0 otherwise + double ave_charge; // average random charge + int seed_charge; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/USER-DIELECTRIC/fix_polarize_functional.cpp b/src/USER-DIELECTRIC/fix_polarize_functional.cpp new file mode 100644 index 0000000000..55fcd98bbe --- /dev/null +++ b/src/USER-DIELECTRIC/fix_polarize_functional.cpp @@ -0,0 +1,1203 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + Trung Nguyen and Monica Olvera de la Cruz (Northwestern) + based on the original implementation by Honghao Li (Northwestern) + Reference: + Jadhao, Solis, Olvera de la Cruz, J. Chem. Phys. 138, 054119, 2013 + + Solve the following eq. for induced charges on fixed sharp interfaces: + (Rww + Rww^T) w = q Rwq + at every time step, the vector (q Rwq) is computed, and so + w = [Rww + Rww^T)^(-1)] (q Rwq) + NOTE: Oct 7, 2019: switch to using a conjugate gradient solver +------------------------------------------------------------------------- */ + +#include "fix_polarize_functional.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "domain.h" +#include "error.h" +#include "force.h" +#include "group.h" +#include "kspace.h" +#include "math_const.h" +#include "math_extra.h" +#include "memory.h" +#include "modify.h" +#include "msm_dielectric.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" +#include "pair_coul_cut_dielectric.h" +#include "pair_coul_long_dielectric.h" +#include "pair_lj_cut_coul_cut_dielectric.h" +#include "pair_lj_cut_coul_long_dielectric.h" +#include "pair_lj_cut_coul_msm_dielectric.h" +#include "pppm_dielectric.h" +#include "random_park.h" +#include "timer.h" +#include "update.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace FixConst; +using namespace MathExtra; +using namespace MathConst; + +enum { REAL2SCALED = 0, SCALED2REAL = 1 }; + +#define EPSILON 1e-6 + +//#define _POLARIZE_DEBUG + +/* ---------------------------------------------------------------------- */ + +FixPolarizeFunctional::FixPolarizeFunctional(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + if (narg < 4) error->all(FLERR, "Illegal fix polarize/functional command"); + + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Fix polarize/functional requires atom style dielectric"); + + nevery = utils::inumeric(FLERR, arg[3], false, lmp); + if (nevery < 0) error->all(FLERR, "Illegal fix polarize/functional command"); + + tolerance = EPSILON; + if (narg == 5) tolerance = utils::numeric(FLERR, arg[4], false, lmp); + + comm_forward = 1; + nmax = 0; + allocated = 0; + + induced_charge_idx = nullptr; + induced_charges = nullptr; + tag2mat = nullptr; + mat2tag = nullptr; + tag2mat_ions = nullptr; + mat2tag_ions = nullptr; + ion_idx = nullptr; + + rhs1 = nullptr; + rhs2 = nullptr; + buffer1 = nullptr; + buffer2 = nullptr; + + // set flags for arrays to clear in force_clear() + + torqueflag = extraflag = 0; + if (atom->torque_flag) torqueflag = 1; + if (atom->avec->forceclearflag) extraflag = 1; + + Rww = nullptr; + inverse_matrix = nullptr; + G1ww = nullptr; + G2ww = nullptr; + G3ww = nullptr; + ndotGww = nullptr; + + qiRqwVector = nullptr; + G1qw_real = nullptr; + sum2G2wq = nullptr; + + sum1G2qw = nullptr; + sum1G1qw_epsilon = nullptr; + sum2ndotGwq_epsilon = nullptr; + + efield_pair = nullptr; + efield_kspace = nullptr; + + includingG3ww = 1; + + cg_r = cg_p = cg_Ap = nullptr; + cg_A = nullptr; + + grow_arrays(atom->nmax); + atom->add_callback(0); // to ensure to work with atom->sort() +} + +/* ---------------------------------------------------------------------- */ + +FixPolarizeFunctional::~FixPolarizeFunctional() +{ + memory->destroy(mat2tag); + memory->destroy(tag2mat); + memory->destroy(tag2mat_ions); + memory->destroy(mat2tag_ions); + memory->destroy(ion_idx); + memory->destroy(induced_charge_idx); + memory->destroy(induced_charges); + memory->destroy(rhs1); + memory->destroy(rhs2); + memory->destroy(buffer1); + memory->destroy(buffer2); + + if (allocated) deallocate(); + atom->delete_callback(id, 0); +} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeFunctional::setmask() +{ + int mask = 0; + mask |= PRE_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::init() +{ + // mapping induced charge matrix/vector to atom tags and vice versa + + int i, maxtag; + double *q = atom->q; + int *mask = atom->mask; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + tagint max_tag; + tagint itmp; + int *ncount = nullptr; + + // induced charge arrays setup + + max_tag = -1; + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) max_tag = MAX(max_tag, tag[i]); + + MPI_Allreduce(&max_tag, &itmp, 1, MPI_LMP_TAGINT, MPI_MAX, world); + maxtag = (int) itmp; + + memory->create(ncount, maxtag + 1, "polarize:ncount"); + for (i = 0; i <= maxtag; i++) ncount[i] = 0; + + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) ncount[tag[i]]++; + + memory->create(tag2mat, maxtag + 1, "polarize:tag2mat"); + MPI_Allreduce(ncount, tag2mat, maxtag + 1, MPI_INT, MPI_SUM, world); + + num_induced_charges = 0; + for (i = 0; i <= maxtag; i++) + if (tag2mat[i]) + tag2mat[i] = num_induced_charges++; + else + tag2mat[i] = -1; + + memory->create(mat2tag, num_induced_charges, "polarize:mat2tag"); + + num_induced_charges = 0; + for (i = 0; i <= maxtag; i++) + if (tag2mat[i] >= 0) mat2tag[num_induced_charges++] = i; + + for (i = 0; i < nlocal; i++) { + induced_charge_idx[i] = -1; + if (mask[i] & groupbit) induced_charge_idx[i] = tag2mat[tag[i]]; + } + + memory->destroy(ncount); + + // ion arrays setup + + max_tag = -1; + for (i = 0; i < nlocal; i++) + if (!(mask[i] & groupbit)) max_tag = MAX(max_tag, tag[i]); + + MPI_Allreduce(&max_tag, &itmp, 1, MPI_LMP_TAGINT, MPI_MAX, world); + maxtag = (int) itmp; + + memory->create(ncount, maxtag + 1, "polarize:ncount"); + for (i = 0; i <= maxtag; i++) ncount[i] = 0; + + for (i = 0; i < nlocal; i++) + if (!(mask[i] & groupbit)) ncount[tag[i]]++; + + memory->create(tag2mat_ions, maxtag + 1, "polarize:tag2mat_ions"); + MPI_Allreduce(ncount, tag2mat_ions, maxtag + 1, MPI_INT, MPI_SUM, world); + + num_ions = 0; + for (i = 0; i <= maxtag; i++) + if (tag2mat_ions[i]) + tag2mat_ions[i] = num_ions++; + else + tag2mat_ions[i] = -1; + + memory->create(mat2tag_ions, num_ions, "polarize:mat2tag_ions"); + memory->create(rhs1, num_induced_charges, "polarize:rhs1"); + memory->create(rhs2, num_induced_charges, "polarize:rhs2"); + int buffer_size = (num_induced_charges > num_ions) ? num_induced_charges : num_ions; + memory->create(buffer1, buffer_size, num_induced_charges, "polarize:buffer1"); + memory->create(buffer2, num_induced_charges, num_induced_charges, "polarize:buffer2"); + memory->create(induced_charges, num_induced_charges, "polarize:induced_charges"); + + num_ions = 0; + for (i = 0; i <= maxtag; i++) + if (tag2mat_ions[i] >= 0) mat2tag_ions[num_ions++] = i; + + for (i = 0; i < nlocal; i++) { + ion_idx[i] = -1; + if (!(mask[i] & groupbit)) ion_idx[i] = tag2mat_ions[tag[i]]; + } + + memory->destroy(ncount); + + if (allocated == 0) { + nmax = atom->nmax; + allocate(); + allocated = 1; + } + + // need a full neighbor list w/ Newton off and ghost neighbors + // built whenever re-neighboring occurs + + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->fix = 1; + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->occasional = 0; + + if (force->kspace) + g_ewald = force->kspace->g_ewald; + else + g_ewald = 0.01; + + if (comm->me == 0) + utils::logmesg(lmp, "Direct solver using a variational approach for {} induced charges\n", + num_induced_charges); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::init_list(int id, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::setup(int vflag) +{ + // check if the pair styles in use are compatible + + if (strcmp(force->pair_style, "lj/cut/coul/long/dielectric") == 0) + efield_pair = ((PairLJCutCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/long/dielectric/omp") == 0) + efield_pair = ((PairLJCutCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/msm/dielectric") == 0) + efield_pair = ((PairLJCutCoulMSMDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/cut/dielectric") == 0) + efield_pair = ((PairLJCutCoulCutDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "lj/cut/coul/cut/dielectric/omp") == 0) + efield_pair = ((PairLJCutCoulCutDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "coul/long/dielectric") == 0) + efield_pair = ((PairCoulLongDielectric *) force->pair)->efield; + else if (strcmp(force->pair_style, "coul/cut/dielectric") == 0) + efield_pair = ((PairCoulCutDielectric *) force->pair)->efield; + else + error->all(FLERR, "Pair style not compatible with fix polarize/functional"); + + if (force->kspace) { + + kspaceflag = 1; + if (strcmp(force->kspace_style, "pppm/dielectric") == 0) + efield_kspace = ((PPPMDielectric *) force->kspace)->efield; + else if (strcmp(force->kspace_style, "msm/dielectric") == 0) + efield_kspace = ((MSMDielectric *) force->kspace)->efield; + else + error->all(FLERR, "Kspace style not compatible with fix polarize/functional"); + + } else { + + if (kspaceflag == 1) { // users specified kspace yes + error->warning(FLERR, "No Kspace style available for fix polarize/functional"); + kspaceflag = 0; + } + } + + update_induced_charges(); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::setup_pre_force(int vflag) +{ + // calculate Rww before the run (assuming that the interface is fixed for now) + // otherwise this should be done every time step in pre_force() + + calculate_Rww_cutoff(); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::pre_force(int) +{ + if (nevery == 0) return; + if (update->ntimestep % nevery) return; + + // solve for the induced charges + + update_induced_charges(); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::update_induced_charges() +{ + // convert all ions from scaled charges (q) to real q by multiplying with epsilon + + charge_rescaled(SCALED2REAL); + + // compute the right hand side vector qiRwVector + + calculate_qiRqw_cutoff(); + + // conjugate gradient solver for w from Rww * w = -qRqw + + for (int i = 0; i < num_induced_charges; i++) + for (int j = 0; j < num_induced_charges; j++) cg_A[i][j] = Rww[i][j] + Rww[j][i]; + + for (int i = 0; i < num_induced_charges; i++) induced_charges[i] = 0; + + cg_solver(cg_A, qiRqwVector, induced_charges, num_induced_charges); + + // assign charges to the particles in the group + + double *q = atom->q; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (induced_charge_idx[i] < 0) continue; + int idx = induced_charge_idx[i]; + q[i] = -induced_charges[idx] / (4 * MY_PI); + } + + // revert to scaled charges to calculate forces + + charge_rescaled(REAL2SCALED); +} + +/* ---------------------------------------------------------------------- + scaled2real = 1: convert ion charges from scaled values (divided by epsilon) to real values + = 0: real values to scaled values +------------------------------------------------------------------------- */ + +void FixPolarizeFunctional::charge_rescaled(int scaled2real) +{ + double *q = atom->q; + double *q_real = atom->q_unscaled; + double *epsilon = atom->epsilon; + int nlocal = atom->nlocal; + + if (scaled2real) { + for (int i = 0; i < nlocal; i++) + if (induced_charge_idx[i] < 0) q[i] = q_real[i]; + } else { + for (int i = 0; i < nlocal; i++) + if (induced_charge_idx[i] < 0) q[i] = q_real[i] / epsilon[i]; + } + + comm->forward_comm_fix(this); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::allocate() +{ + // initialize all data + // interface terms, all matrix of M*M + memory->create(inverse_matrix, num_induced_charges, num_induced_charges, "fix:inverse_matrix"); + memory->create(Rww, num_induced_charges, num_induced_charges, "fix:Rww"); + memory->create(G1ww, num_induced_charges, num_induced_charges, "fix:G1ww"); + memory->create(ndotGww, num_induced_charges, num_induced_charges, "fix:ndotGww"); + memory->create(G2ww, num_induced_charges, num_induced_charges, "fix:G2ww"); + memory->create(G3ww, num_induced_charges, num_induced_charges, "fix:G3ww"); + + // each step, qw, qq terms, temp data + + memory->create(qiRqwVector, num_induced_charges, "fix:qiRqwVector"); + memory->create(sum2G2wq, num_induced_charges, "fix:sum2G2wq"); + memory->create(G1qw_real, num_ions, num_induced_charges, "fix:G1qw_real"); + + // arrays of M + memory->create(sum1G2qw, num_induced_charges, "fix:sum1G2qw"); + memory->create(sum1G1qw_epsilon, num_induced_charges, "fix:sum1G1qw_epsilon"); + memory->create(sum2ndotGwq_epsilon, num_induced_charges, "fix:sum2ndotGwq_epsilon"); + + memory->create(cg_r, num_induced_charges, "polarize:cg_r"); + memory->create(cg_p, num_induced_charges, "polarize:cg_p"); + memory->create(cg_Ap, num_induced_charges, "polarize:cg_Ap"); + memory->create(cg_A, num_induced_charges, num_induced_charges, "polarize:cg_A"); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::deallocate() +{ + memory->destroy(inverse_matrix); + memory->destroy(Rww); + memory->destroy(G1ww); + memory->destroy(G2ww); + memory->destroy(G3ww); + memory->destroy(ndotGww); + + memory->destroy(qiRqwVector); + memory->destroy(sum2G2wq); + memory->destroy(G1qw_real); + + memory->destroy(sum1G2qw); + memory->destroy(sum1G1qw_epsilon); + memory->destroy(sum2ndotGwq_epsilon); + + memory->destroy(cg_r); + memory->destroy(cg_p); + memory->destroy(cg_Ap); + memory->destroy(cg_A); +} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeFunctional::modify_param(int narg, char **arg) +{ + int iarg = 0; + while (iarg < narg) { + if (strcmp(arg[iarg], "kspace") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix_modify command"); + if (strcmp(arg[iarg + 1], "yes") == 0) + kspaceflag = 1; + else if (strcmp(arg[iarg + 1], "no") == 0) + kspaceflag = 0; + else + error->all(FLERR, "Illegal fix_modify command for fix polarize/functional"); + iarg += 2; + } else if (strcmp(arg[iarg], "dielectrics") == 0) { + if (iarg + 6 > narg) error->all(FLERR, "Illegal fix_modify command"); + double epsiloni = -1, areai = -1; + double q_unscaled = 0; + int set_charge = 0; + double ediff = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + double emean = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + if (strcmp(arg[iarg + 3], "nullptr") != 0) + epsiloni = utils::numeric(FLERR, arg[iarg + 3], false, lmp); + if (strcmp(arg[iarg + 4], "nullptr") != 0) + areai = utils::numeric(FLERR, arg[iarg + 4], false, lmp); + if (strcmp(arg[iarg + 5], "nullptr") != 0) { + q_unscaled = utils::numeric(FLERR, arg[iarg + 5], false, lmp); + set_charge = 1; + } + set_dielectric_params(ediff, emean, epsiloni, areai, set_charge, q_unscaled); + + iarg += 6; + } else + error->all(FLERR, "Illegal fix_modify command"); + } + + return iarg; +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based arrays for exchange with another proc +------------------------------------------------------------------------- */ + +int FixPolarizeFunctional::pack_exchange(int i, double *buf) +{ + buf[0] = ubuf(induced_charge_idx[i]).d; + buf[1] = ubuf(ion_idx[i]).d; + return 2; +} + +/* ---------------------------------------------------------------------- + unpack values in local atom-based arrays from exchange with another proc +------------------------------------------------------------------------- */ + +int FixPolarizeFunctional::unpack_exchange(int nlocal, double *buf) +{ + induced_charge_idx[nlocal] = (int) ubuf(buf[0]).i; + ion_idx[nlocal] = (int) ubuf(buf[1]).i; + return 2; +} + +/* ---------------------------------------------------------------------- */ + +int FixPolarizeFunctional::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +{ + int m; + for (m = 0; m < n; m++) buf[m] = atom->q[list[m]]; + return n; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::unpack_forward_comm(int n, int first, double *buf) +{ + int i, m; + for (m = 0, i = first; m < n; m++, i++) atom->q[i] = buf[m]; +} + +/* ---------------------------------------------------------------------- + allocate local atom-based arrays +------------------------------------------------------------------------- */ + +void FixPolarizeFunctional::grow_arrays(int n) +{ + if (n > nmax) nmax = n; + memory->grow(induced_charge_idx, nmax, "fix:induced_charge_idx"); + memory->grow(ion_idx, nmax, "fix:ion_idx"); +} + +/* ---------------------------------------------------------------------- + copy values within local atom-based arrays +------------------------------------------------------------------------- */ + +void FixPolarizeFunctional::copy_arrays(int i, int j, int delflag) +{ + induced_charge_idx[j] = induced_charge_idx[i]; + ion_idx[j] = ion_idx[i]; +} + +/* ---------------------------------------------------------------------- + initialize one atom's array values, called when atom is created +------------------------------------------------------------------------- */ + +void FixPolarizeFunctional::set_arrays(int i) +{ + induced_charge_idx[i] = -1; + ion_idx[i] = 0; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +double FixPolarizeFunctional::memory_usage() +{ + double bytes = 0; + bytes += num_induced_charges * num_induced_charges * sizeof(double); // inverse_matrix + bytes += num_induced_charges * num_induced_charges * sizeof(double); // Rww + bytes += num_induced_charges * num_induced_charges * sizeof(double); // G1ww + bytes += num_induced_charges * num_induced_charges * sizeof(double); // ndotGww + bytes += num_induced_charges * num_induced_charges * sizeof(double); // G2ww + bytes += num_induced_charges * num_induced_charges * sizeof(double); // G3ww + bytes += num_induced_charges * sizeof(double); // qiRqwVector + bytes += num_induced_charges * sizeof(double); // sum2G2wq + bytes += num_induced_charges * sizeof(double); // sum1G2qw + bytes += num_induced_charges * sizeof(double); // sum1G1qw_epsilon + bytes += num_induced_charges * sizeof(double); // sum2ndotGwq_epsilon + bytes += num_ions * num_induced_charges * sizeof(double); // G1qw_real + bytes += nmax * sizeof(int); // induced_charge_idx + bytes += nmax * sizeof(int); // ion_idx + bytes += num_induced_charges * sizeof(double); // induced_charges + return bytes; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::calculate_Rww_cutoff() +{ + int *mask = atom->mask; + int *type = atom->type; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + double **x = atom->x; + double *area = atom->area; + double *curvature = atom->curvature; + double **norm = atom->mu; + double *ed = atom->ed; + double *em = atom->em; + + // invoke full neighbor list + + int inum, jnum, *ilist, *jlist, *numneigh, **firstneigh; + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // calculate G1ww, gradG1ww, ndotG1ww + // fill up buffer1 with local G1ww and buffer2 with local ndotGww + // seperate into two loops to let the compiler optimize/or later vectorization + + for (int i = 0; i < num_induced_charges; i++) + for (int j = 0; j < num_induced_charges; j++) buffer1[i][j] = 0; + + for (int i = 0; i < num_induced_charges; i++) + for (int j = 0; j < num_induced_charges; j++) buffer2[i][j] = 0; + + for (int ii = 0; ii < inum; ii++) { + int i = ilist[ii]; + if (mask[i] & groupbit) { + // interface particles + int mi = induced_charge_idx[i]; + double xtmp = x[i][0]; + double ytmp = x[i][1]; + double ztmp = x[i][2]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (int kk = 0; kk < jnum; kk++) { + int k = jlist[kk] & NEIGHMASK; + if (mask[k] & groupbit) { + + // interface particles: k can be ghost atoms + double delx = xtmp - x[k][0]; + double dely = ytmp - x[k][1]; + double delz = ztmp - x[k][2]; + domain->minimum_image(delx, dely, delz); + int mk = tag2mat[tag[k]]; + + // G1ww[mi][mk] = calculate_greens_ewald(delx, dely, delz); + buffer1[mi][mk] = calculate_greens_ewald(delx, dely, delz); + + // gradG1ww is vector, directly change it in the function + double gradG1ww[3]; + calculate_grad_greens_ewald(gradG1ww, delx, dely, delz); + + // use mu to store the normal vector of interface vertex + buffer2[mi][mk] = MathExtra::dot3(norm[i], gradG1ww) / (4 * MY_PI); + } + } + + // special treatment for the diagonal terms, + // even though in the above loop there is mk == mi + + buffer1[mi][mi] = calculate_greens_ewald_self_vertex(area[i]); + buffer2[mi][mi] = calculate_ndotgreens_ewald_self_vertex(area[i], curvature[i]) / (4 * MY_PI); + } + } + + MPI_Allreduce(buffer1[0], G1ww[0], num_induced_charges * num_induced_charges, MPI_DOUBLE, MPI_SUM, + world); + MPI_Allreduce(buffer2[0], ndotGww[0], num_induced_charges * num_induced_charges, MPI_DOUBLE, + MPI_SUM, world); + + // calculate G2ww + // fill up buffer1 with local G2ww + + for (int i = 0; i < num_induced_charges; i++) + for (int j = 0; j < num_induced_charges; j++) buffer1[i][j] = 0; + + for (int ii = 0; ii < inum; ii++) { + int i = ilist[ii]; + if (mask[i] & groupbit) { + // interface particles + int mi = induced_charge_idx[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (int kk = 0; kk < jnum; kk++) { + int k = jlist[kk] & NEIGHMASK; + + if (mask[k] & groupbit) { + // interface particles: k can be ghost atoms + int mk = tag2mat[tag[k]]; + double temp = 0; + for (int ll = 0; ll < jnum; ll++) { + int l = jlist[ll] & NEIGHMASK; + if (mask[l] & groupbit) { + // interface particles: l can be ghost atoms + int ml = tag2mat[tag[l]]; + temp += G1ww[mi][ml] * ndotGww[ml][mk] * area[l] * ed[l]; + } + } + //G2ww[mi][mk] = temp; + buffer1[mi][mk] = temp; + } + } + + double temp = 0; + for (int kk = 0; kk < jnum; kk++) { + int k = jlist[kk] & NEIGHMASK; + if (mask[k] & groupbit) { + // interface particles: k can be ghost atoms + int mk = tag2mat[tag[k]]; + temp += G1ww[mi][mk] * ndotGww[mk][mi] * area[k] * ed[k]; + } + } + //G2ww[mi][mi] = temp; + buffer1[mi][mi] = temp; + } + } + + MPI_Allreduce(buffer1[0], G2ww[0], num_induced_charges * num_induced_charges, MPI_DOUBLE, MPI_SUM, + world); + + // calculate G3ww and Rww + // G3ww is implemented as in _exact(), but can be optionally excluded + // due to its minor contribution + // fill up buffer1 with local G3ww + + for (int i = 0; i < num_induced_charges; i++) + for (int j = 0; j < num_induced_charges; j++) buffer1[i][j] = 0; + + for (int ii = 0; ii < inum; ii++) { + int i = ilist[ii]; + if (mask[i] & groupbit) { + // interface particles + int mi = induced_charge_idx[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (int kk = 0; kk < jnum; kk++) { + int k = jlist[kk] & NEIGHMASK; + + if (mask[k] & groupbit) { + + // interface particles: k can be ghost atoms + + int mk = tag2mat[tag[k]]; + + double a1 = em[i] * (em[k] - 1.0); + double a2 = 1.0 - em[i] - em[k]; + + // The first term (w/ G1ww) contributes the most to Rww + // the second term (w/ G2ww) includes certain correction + + //Rww[mi][mk] = a1 * G1ww[mi][mk] + a2 * G2ww[mi][mk]; + buffer1[mi][mk] = a1 * G1ww[mi][mk] + a2 * G2ww[mi][mk]; + + if (includingG3ww) { + double temp = 0; + for (int ll = 0; ll < jnum; ll++) { + int l = jlist[ll] & NEIGHMASK; + if (mask[l] & groupbit) { + // interface particles: l can be ghost atoms + int ml = tag2mat[tag[l]]; + temp += (ndotGww[ml][mi]) * G2ww[ml][mk] * area[l] * ed[l]; + } + } + G3ww[mi][mk] = temp; + //Rww[mi][mk] += G3ww[mi][mk]; + buffer1[mi][mk] += G3ww[mi][mk]; + } + } + } + + if (includingG3ww) { + double temp = 0; + for (int ll = 0; ll < jnum; ll++) { + int l = jlist[ll] & NEIGHMASK; + if (mask[l] & groupbit) { + // interface particles: l can be ghost atoms + int ml = tag2mat[tag[l]]; + temp += (ndotGww[ml][mi]) * G2ww[ml][mi] * area[l] * ed[l]; + } + } + G3ww[mi][mi] = temp; + //Rww[mi][mi] += G3ww[mi][mi]; + buffer1[mi][mi] += G3ww[mi][mi]; + } + + // including the diagonal term + double a1 = em[i] * (em[i] - 1.0); + double a2 = 1.0 - em[i] - em[i]; + + // The first term (w/ G1ww) contributes the most to Rww + // the second term (w/ G2ww) includes certain correction + //Rww[mi][mi] = a1 * G1ww[mi][mi] + a2 * G2ww[mi][mi]; + + buffer1[mi][mi] = a1 * G1ww[mi][mi] + a2 * G2ww[mi][mi]; + } + } + + MPI_Allreduce(buffer1[0], Rww[0], num_induced_charges * num_induced_charges, MPI_DOUBLE, MPI_SUM, + world); + +#ifdef _POLARIZE_DEBUG + if (comm->me == 0) { + FILE *fp = fopen("Rww-functional.txt", "w"); + for (int i = 0; i < num_induced_charges; i++) + fprintf(fp, "%d %g %g %g\n", i, Rww[i][i], Rww[i][num_induced_charges / 2], + Rww[num_induced_charges / 2][i]); + fclose(fp); + } +#endif +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::calculate_qiRqw_cutoff() +{ + int ii, i, k, kk, jnum; + double xtmp, ytmp, ztmp, delx, dely, delz, r; + int *mask = atom->mask; + int *type = atom->type; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + double **x = atom->x; + double *q = atom->q_unscaled; + double *epsilon = atom->epsilon; + double *area = atom->area; + double **norm = atom->mu; + double *ed = atom->ed; + double *em = atom->em; + + // invoke full neighbor list + + int inum, *ilist, *jlist, *numneigh, **firstneigh; + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // calculate G1qw_real + // fill up buffer1 with local G1qw_real + + for (int i = 0; i < num_ions; i++) + for (int j = 0; j < num_induced_charges; j++) buffer1[i][j] = 0; + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + if (!(mask[i] & groupbit)) { + // ion particles + int mi = ion_idx[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (kk = 0; kk < jnum; kk++) { + k = jlist[kk] & NEIGHMASK; + if (mask[k] & groupbit) { + // interface particles: k can be ghost atoms + delx = xtmp - x[k][0]; + dely = ytmp - x[k][1]; + delz = ztmp - x[k][2]; + domain->minimum_image(delx, dely, delz); + r = sqrt(delx * delx + dely * dely + delz * delz); + + int mk = tag2mat[tag[k]]; + //G1qw_real[mi][mk] = greens_real(r); + buffer1[mi][mk] = greens_real(r); + } + } + } + } + + MPI_Allreduce(&buffer1[0][0], &G1qw_real[0][0], num_ions * num_induced_charges, MPI_DOUBLE, + MPI_SUM, world); + + // the following loop need the above results: gradG1wq_real + // calculate sum1G1qw_epsilon and sum2ndotGwq_epsilon + // fill up rhs1 with local sum1G1qw_epsilon and rhs2 with local sum2ndotGwq_epsilon + + memset(rhs1, 0, num_induced_charges * sizeof(double)); + memset(rhs2, 0, num_induced_charges * sizeof(double)); + + for (kk = 0; kk < inum; kk++) { + k = ilist[kk]; // k is local index + if (mask[k] & groupbit) { + // interface particles + int mk = induced_charge_idx[k]; + xtmp = x[k][0]; + ytmp = x[k][1]; + ztmp = x[k][2]; + jlist = firstneigh[k]; + jnum = numneigh[k]; + + double tempndotG[3] = {0.0, 0.0, 0.0}; + double temp_sum1 = 0; + for (ii = 0; ii < jnum; ii++) { + i = jlist[ii] & NEIGHMASK; + if (!(mask[i] & groupbit)) { + // ions particles: i can be ghost atoms + delx = x[i][0] - xtmp; + dely = x[i][1] - ytmp; + delz = x[i][2] - ztmp; + domain->minimum_image(delx, dely, delz); + + int mi = tag2mat_ions[tag[i]]; //ion_idx[i]; + + //calculate_grad_greens_real(gradG1wq_real[mk][mi], delx, dely, delz); + double gradG1wq[3]; + calculate_grad_greens_real(gradG1wq, delx, dely, delz); + MathExtra::scale3(-1.0, gradG1wq); + + tempndotG[0] += gradG1wq[0] * (q[i] / epsilon[i]); + tempndotG[1] += gradG1wq[1] * (q[i] / epsilon[i]); + tempndotG[2] += gradG1wq[2] * (q[i] / epsilon[i]); + temp_sum1 += G1qw_real[mi][mk] * q[i] / epsilon[i]; + } + } + + //sum1G1qw_epsilon[mk] = temp_sum1;// + ewaldDielectric->sum1G1qw_k_epsilon[mk]; + rhs1[mk] = temp_sum1; + + //sum2ndotGwq_epsilon[mk] = MathExtra::dot3(norm[k], tempndotG); + rhs2[mk] = MathExtra::dot3(norm[k], tempndotG); + } + } + + MPI_Allreduce(rhs1, sum1G1qw_epsilon, num_induced_charges, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(rhs2, sum2ndotGwq_epsilon, num_induced_charges, MPI_DOUBLE, MPI_SUM, world); + + // calculate G2, gradient G2 + // sum2G2wq and sum1G2qw + + // for (int i = 0; i < num_induced_charges; i++) rhs1[i] = rhs2[i] = 0; + memset(rhs1, 0, num_induced_charges * sizeof(double)); + memset(rhs2, 0, num_induced_charges * sizeof(double)); + + for (kk = 0; kk < inum; kk++) { + k = ilist[kk]; // k is local index + if (mask[k] & groupbit) { + // interface particles + int mk = induced_charge_idx[k]; + jlist = firstneigh[k]; + jnum = numneigh[k]; + + double tempwq = 0; + double temp = 0; + for (ii = 0; ii < jnum; ii++) { + i = jlist[ii] & NEIGHMASK; + if (mask[i] & groupbit) { + // interface particles: i can be ghost atoms + int mi = tag2mat[tag[i]]; + tempwq += G1ww[mk][mi] * (sum2ndotGwq_epsilon[mi]) * area[i] * ed[i]; + temp += sum1G1qw_epsilon[mi] * (ndotGww[mi][mk]) * area[i] * ed[i]; + } + } + + // add the corresponding self terms + tempwq += G1ww[mk][mk] * (sum2ndotGwq_epsilon[mk]) * area[k] * ed[k]; + temp += sum1G1qw_epsilon[mk] * (ndotGww[mk][mk]) * area[k] * ed[k]; + + //sum2G2wq[mk] = tempwq; + rhs1[mk] = tempwq; + //sum1G2qw[mk] = temp; + rhs2[mk] = temp; + } + } + + MPI_Allreduce(rhs1, sum2G2wq, num_induced_charges, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(rhs2, sum1G2qw, num_induced_charges, MPI_DOUBLE, MPI_SUM, world); + + // calculate G3, gradient G3 + // fill up rhs1 with local qiRqwVector + + memset(rhs1, 0, num_induced_charges * sizeof(double)); + + for (kk = 0; kk < inum; kk++) { + k = ilist[kk]; // k is local index + if (mask[k] & groupbit) { + // interface particles + int mk = induced_charge_idx[k]; + jlist = firstneigh[k]; + jnum = numneigh[k]; + + double sum1G3qw = 0; + double qiRwwVectorTemp1 = 0; + for (ii = 0; ii < jnum; ii++) { + i = jlist[ii] & NEIGHMASK; + if (mask[i] & groupbit) { + // interface particles: i can be ghost atoms + int mi = tag2mat[tag[i]]; + sum1G3qw += sum2ndotGwq_epsilon[mi] * G2ww[mi][mk] * area[i] * ed[i]; + } else { + // ions particles: i can be ghost atoms + int mi = tag2mat_ions[tag[i]]; //ion_idx[i]; + qiRwwVectorTemp1 += q[i] * (1.0 - em[k] / epsilon[i]) * G1qw_real[mi][mk]; + } + } + + // add the diagonal term + + sum1G3qw += sum2ndotGwq_epsilon[mk] * G2ww[mk][mk] * area[k] * ed[k]; + + // qiRwwVectorTemp2 is a significant contribution, of which sum2G2wq is significant + double qiRwwVectorTemp2 = (1.0 - 2.0 * em[k]) * sum2G2wq[mk] + sum1G2qw[mk] + 2.0 * sum1G3qw; + + // qiRqwVector[mk] = qiRwwVectorTemp1 + qiRwwVectorTemp2; + rhs1[mk] = qiRwwVectorTemp1 + qiRwwVectorTemp2; + } + } + + MPI_Allreduce(rhs1, qiRqwVector, num_induced_charges, MPI_DOUBLE, MPI_SUM, world); + +#ifdef _POLARIZE_DEBUG + if (comm->me == 0) { + FILE *fp = fopen("qRqw-functional.txt", "w"); + for (int i = 0; i < num_induced_charges; i++) fprintf(fp, "%d %g\n", i, qiRqwVector[i]); + fclose(fp); + } +#endif +} + +/* ---------------------------------------------------------------------- + set dielectric params for the atom in the group +------------------------------------------------------------------------- */ + +void FixPolarizeFunctional::set_dielectric_params(double ediff, double emean, double epsiloni, + double areai, int set_charge, double qvalue) +{ + double *area = atom->area; + double *ed = atom->ed; + double *em = atom->em; + double *q_unscaled = atom->q_unscaled; + double *epsilon = atom->epsilon; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + ed[i] = ediff; + em[i] = emean; + if (areai > 0) area[i] = areai; + if (epsiloni > 0) epsilon[i] = epsiloni; + if (set_charge) q_unscaled[i] = qvalue; + } + } +} + +/* ---------------------------------------------------------------------- + real Green's function +------------------------------------------------------------------------ */ + +double FixPolarizeFunctional::greens_real(double r) +{ + return erfc(g_ewald * r) / r; +} + +/* ---------------------------------------------------------------------- */ + +double FixPolarizeFunctional::grad_greens_real_factor(double r) +{ + double alpharij = g_ewald * r; + double factor = erfc(alpharij) + 2.0 * alpharij / MY_PIS * exp(-(alpharij * alpharij)); + double r3 = r * r * r; + return (factor * (-1.0 / r3)); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::calculate_grad_greens_real(double *vec, double dx, double dy, double dz) +{ + double r = sqrt(dx * dx + dy * dy + dz * dz); + double real = grad_greens_real_factor(r); + vec[0] = real * dx; + vec[1] = real * dy; + vec[2] = real * dz; +} + +/* ---------------------------------------------------------------------- */ + +double FixPolarizeFunctional::calculate_greens_ewald(double dx, double dy, double dz) +{ + // excluding the reciprocal term + double r = sqrt(dx * dx + dy * dy + dz * dz); + return greens_real(r); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::calculate_grad_greens_ewald(double *vec, double dx, double dy, + double dz) +{ + // real part of grad greens, excluding the reciprocal term + calculate_grad_greens_real(vec, dx, dy, dz); +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::calculate_matrix_multiply_vector(double **matrix, double *in_vec, + double *out_vec, int M) +{ +#if defined(OPENMP) +#pragma parallel omp for +#endif + for (int k = 0; k < M; ++k) { + double temp = 0.0; + for (int l = 0; l < M; ++l) { temp += matrix[k][l] * in_vec[l]; } + out_vec[k] = temp; + } +} + +/* ---------------------------------------------------------------------- */ + +double FixPolarizeFunctional::calculate_greens_ewald_self_vertex(double area) +{ + // excluding the reciprocal term + double corr = 2.0 * MY_PIS / sqrt(area); + double self_energy = -2.0 * g_ewald / MY_PIS; + return corr + self_energy; +} + +/* ---------------------------------------------------------------------- */ + +double FixPolarizeFunctional::calculate_ndotgreens_ewald_self_vertex(double area, double curvature) +{ + // this term is important, cannot be set to zero + // curvature = 1 / R, minus if norm is inverse of R to center. + + return curvature * MY_PIS / sqrt(area); +} + +/* ---------------------------------------------------------------------- + compute the inner product between two vectors x and y: x^t * y + where ^t is the transpose operator +-- ---------------------------------------------------------------------- */ + +double FixPolarizeFunctional::inner_product(double *x, double *y, int N) +{ + double t = 0; + for (int i = 0; i < N; i++) t += x[i] * y[i]; + return t; +} + +/* ---------------------------------------------------------------------- */ + +void FixPolarizeFunctional::cg_solver(double **A, double *b, double *x, int N) +{ + calculate_matrix_multiply_vector(A, x, cg_p, N); + for (int i = 0; i < N; i++) { + cg_r[i] = b[i] - cg_p[i]; + cg_p[i] = cg_r[i]; + } + double rsq = inner_product(cg_r, cg_r, N); + + // maximum number of iterations do not exceed N + for (int k = 0; k < N; k++) { + + // Ap = A * p + calculate_matrix_multiply_vector(A, cg_p, cg_Ap, N); + + // pAp = p^t * Ap + double pAp = inner_product(cg_p, cg_Ap, N); + + // alpha = r^t * r / pAp + double alpha = rsq / pAp; + + // x = x + alpha * p + // r = r - alpha * Ap + for (int i = 0; i < N; i++) { + x[i] = x[i] + alpha * cg_p[i]; + cg_r[i] = cg_r[i] - alpha * cg_Ap[i]; + } + + double rsq_new = inner_product(cg_r, cg_r, N); + if (rsq_new < tolerance) break; + + // beta = rsq_new / rsq + double beta = rsq_new / rsq; + for (int i = 0; i < N; i++) cg_p[i] = cg_r[i] + beta * cg_p[i]; + rsq = rsq_new; + } +} diff --git a/src/USER-DIELECTRIC/fix_polarize_functional.h b/src/USER-DIELECTRIC/fix_polarize_functional.h new file mode 100644 index 0000000000..7a4b8c00da --- /dev/null +++ b/src/USER-DIELECTRIC/fix_polarize_functional.h @@ -0,0 +1,133 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS +// clang-format off +FixStyle(polarize/functional,FixPolarizeFunctional); +// clang-format on +#else + +#ifndef LMP_FIX_POLARIZE_FUNCTIONAL_H +#define LMP_FIX_POLARIZE_FUNCTIONAL_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixPolarizeFunctional : public Fix { + public: + FixPolarizeFunctional(class LAMMPS *, int, char **); + ~FixPolarizeFunctional(); + int setmask(); + void init(); + void init_list(int, class NeighList *); + void setup(int); + void setup_pre_force(int vflag); + void pre_force(int); + int pack_exchange(int, double *); + int unpack_exchange(int, double *); + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + + int modify_param(int, char **); + double memory_usage(); + void allocate(); + void deallocate(); + void grow_arrays(int); + void copy_arrays(int, int, int); + void set_arrays(int); + + protected: + int nmax; + class AtomVecDielectric *avec; + class NeighList *list; + + void set_dielectric_params(double, double, double, double, int, double); + void charge_rescaled(int); + void update_induced_charges(); + + double **inverse_matrix; + double **G1ww, **ndotGww, **G2ww, **G3ww, **Rww; + + int * + tag2mat; // tag2mat[atom->tag[i]] = the index of the atoms in the induced charge arrays from atom tags + int * + mat2tag; // mat2tag[idx] = the atom tag of the induced charge idx in the induced charge arrays + int *induced_charge_idx; // return the index of the atoms in the induced charge arrays + int num_induced_charges; // total number of induced charges + double *induced_charges; // values of induced charges + int * + tag2mat_ions; // tag2mat_ions[atom->tag[i]] returns the index of the atoms in the ion arrays from atom tags + int *mat2tag_ions; // mat2tag_ions[idx] returns the atom tag of the ion idx in the ion arrays + int *ion_idx; // return the index of the atoms in the ion arrays + int num_ions; // total number of ions + double *rhs1; + double *rhs2; + double **buffer1; + double **buffer2; + + int allocated; + int kspaceflag; // 1 if kspace is used for the induced charge computation + double **efield_pair; // electrical field at position of atom i due to pair contribution + double **efield_kspace; // electrical field at position of atom i due to kspace contribution + int torqueflag, extraflag; + double g_ewald; + int includingG3ww; + + void calculate_Rww_cutoff(); + void calculate_qiRqw_cutoff(); + + // qw, qq ion-interface terms + + double *qiRqwVector; + double **G1qw_real; + double *sum2G2wq; + double *sum1G2qw; + double *sum1G1qw_epsilon; + double *sum2ndotGwq_epsilon; + + // conjugate gradient solver + + double *cg_r; + double *cg_p; + double *cg_Ap; + double **cg_A; + double tolerance; + + void calculate_matrix_multiply_vector(double **, double *, double *, int); + double inner_product(double *, double *, int); + void cg_solver(double **, double *, double *, int); + + inline double greens_real(double); + inline double grad_greens_real_factor(double); + inline void calculate_grad_greens_real(double *, double, double, double); + inline double calculate_greens_ewald(double, double, double); + inline void calculate_grad_greens_ewald(double *, double, double, double); + inline double calculate_greens_ewald_self_vertex(double); + inline double calculate_ndotgreens_ewald_self_vertex(double, double); +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/USER-DIELECTRIC/msm_dielectric.cpp b/src/USER-DIELECTRIC/msm_dielectric.cpp new file mode 100644 index 0000000000..2759f21248 --- /dev/null +++ b/src/USER-DIELECTRIC/msm_dielectric.cpp @@ -0,0 +1,367 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "msm_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "domain.h" +#include "error.h" +#include "force.h" +#include "gridcomm.h" +#include "math_const.h" +#include "memory.h" +#include "neighbor.h" +#include "pair.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +enum{REVERSE_RHO,REVERSE_AD,REVERSE_AD_PERATOM}; +enum{FORWARD_RHO,FORWARD_AD,FORWARD_AD_PERATOM}; +/* ---------------------------------------------------------------------- */ + +MSMDielectric::MSMDielectric(LAMMPS *lmp) : MSM(lmp) +{ + efield = nullptr; + phi = nullptr; +} + +/* ---------------------------------------------------------------------- + free all memory +------------------------------------------------------------------------- */ + +MSMDielectric::~MSMDielectric() +{ + memory->destroy(efield); + memory->destroy(phi); +} + +/* ---------------------------------------------------------------------- + called once before run +------------------------------------------------------------------------- */ + +void MSMDielectric::init() +{ + MSM::init(); + + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR,"msm/dielectric requires atom style dielectric"); +} + +/* ---------------------------------------------------------------------- + compute the MSMDielectric long-range force, energy, virial +------------------------------------------------------------------------- */ + +void MSMDielectric::compute(int eflag, int vflag) +{ + int i,j; + + // set energy/virial flags + + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = evflag_atom = eflag_global = vflag_global = + eflag_atom = vflag_atom = eflag_either = vflag_either = 0; + + if (scalar_pressure_flag && vflag_either) { + if (vflag_atom) + error->all(FLERR,"Must use 'kspace_modify pressure/scalar no' to obtain " + "per-atom virial with kspace_style msm/dielectric"); + + // must switch on global energy computation if not already on + + if (eflag == 0 || eflag == 2) { + eflag++; + ev_setup(eflag,vflag); + } + } + + // if atom count has changed, update qsum and qsqsum + + if (atom->natoms != natoms_original) { + qsum_qsq(); + natoms_original = atom->natoms; + } + + // return if there are no charges + + if (qsqsum == 0.0) return; + + // invoke allocate_peratom() if needed for first time + + if (vflag_atom && !peratom_allocate_flag) allocate_peratom(); + + // convert atoms from box to lamda coords + + if (triclinic) + domain->x2lamda(atom->nlocal); + + // extend size of per-atom arrays if necessary + + if (atom->nmax > nmax) { + memory->destroy(part2grid); + memory->destroy(efield); + nmax = atom->nmax; + memory->create(part2grid,nmax,3,"msm:part2grid"); + memory->create(efield,nmax,3,"msm:efield"); + } + + // find grid points for all my particles + // map my particle charge onto my local 3d density grid (aninterpolation) + + particle_map(); + make_rho(); + + // all procs reverse communicate charge density values from + // their ghost grid points + // to fully sum contribution in their 3d grid + + current_level = 0; + gcall->reverse_comm_kspace(this,1,sizeof(double),REVERSE_RHO, + gcall_buf1,gcall_buf2,MPI_DOUBLE); + + // forward communicate charge density values to fill ghost grid points + // compute direct sum interaction and then restrict to coarser grid + + for (int n=0; n<=levels-2; n++) { + if (!active_flag[n]) continue; + current_level = n; + gc[n]->forward_comm_kspace(this,1,sizeof(double),FORWARD_RHO, + gc_buf1[n],gc_buf2[n],MPI_DOUBLE); + direct(n); + restriction(n); + } + + // compute direct interation for top grid level for non-periodic + // and for second from top grid level for periodic + + if (active_flag[levels-1]) { + if (domain->nonperiodic) { + current_level = levels-1; + gc[levels-1]-> + forward_comm_kspace(this,1,sizeof(double),FORWARD_RHO, + gc_buf1[levels-1],gc_buf2[levels-1],MPI_DOUBLE); + direct_top(levels-1); + gc[levels-1]-> + reverse_comm_kspace(this,1,sizeof(double),REVERSE_AD, + gc_buf1[levels-1],gc_buf2[levels-1],MPI_DOUBLE); + if (vflag_atom) + gc[levels-1]-> + reverse_comm_kspace(this,6,sizeof(double),REVERSE_AD_PERATOM, + gc_buf1[levels-1],gc_buf2[levels-1],MPI_DOUBLE); + + } else { + // Here using MPI_Allreduce is cheaper than using commgrid + grid_swap_forward(levels-1,qgrid[levels-1]); + direct(levels-1); + grid_swap_reverse(levels-1,egrid[levels-1]); + current_level = levels-1; + if (vflag_atom) + gc[levels-1]-> + reverse_comm_kspace(this,6,sizeof(double),REVERSE_AD_PERATOM, + gc_buf1[levels-1],gc_buf2[levels-1],MPI_DOUBLE); + } + } + + // prolongate energy/virial from coarser grid to finer grid + // reverse communicate from ghost grid points to get full sum + + for (int n=levels-2; n>=0; n--) { + if (!active_flag[n]) continue; + prolongation(n); + + current_level = n; + gc[n]->reverse_comm_kspace(this,1,sizeof(double),REVERSE_AD, + gc_buf1[n],gc_buf2[n],MPI_DOUBLE); + + // extra per-atom virial communication + + if (vflag_atom) + gc[n]->reverse_comm_kspace(this,6,sizeof(double),REVERSE_AD_PERATOM, + gc_buf1[n],gc_buf2[n],MPI_DOUBLE); + } + + // all procs communicate E-field values + // to fill ghost cells surrounding their 3d bricks + + current_level = 0; + gcall->forward_comm_kspace(this,1,sizeof(double),FORWARD_AD, + gcall_buf1,gcall_buf2,MPI_DOUBLE); + + // extra per-atom energy/virial communication + + if (vflag_atom) + gcall->forward_comm_kspace(this,6,sizeof(double),FORWARD_AD_PERATOM, + gcall_buf1,gcall_buf2,MPI_DOUBLE); + + // calculate the force on my particles (interpolation) + + fieldforce(); + + // calculate the per-atom energy/virial for my particles + + if (evflag_atom) fieldforce_peratom(); + + // sum global energy across procs and add in self-energy term + + const double qscale = qqrd2e * scale; + + if (eflag_global) { + double energy_all; + MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); + energy = energy_all; + + double e_self = qsqsum*gamma(0.0)/cutoff; + energy -= e_self; + energy *= 0.5*qscale; + } + + // total long-range virial + + if (vflag_global && !scalar_pressure_flag) { + double virial_all[6]; + MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) virial[i] = 0.5*qscale*virial_all[i]; + } + + // fast compute of scalar pressure (if requested) + + if (scalar_pressure_flag && vflag_global) + for (i = 0; i < 3; i++) virial[i] = energy/3.0; + + // per-atom energy/virial + // energy includes self-energy correction + + if (evflag_atom) { + double *q = atom->q; + int nlocal = atom->nlocal; + + if (eflag_atom) { + for (i = 0; i < nlocal; i++) { + eatom[i] -= q[i]*q[i]*gamma(0.0)/cutoff; + eatom[i] *= 0.5*qscale; + } + } + + if (vflag_atom) { + for (i = 0; i < nlocal; i++) + for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*qscale; + } + } + + // convert atoms back from lamda to box coords + + if (triclinic) domain->lamda2x(atom->nlocal); +} + +/* ---------------------------------------------------------------------- + interpolate from grid to get force on my particles +------------------------------------------------------------------------- */ + +void MSMDielectric::fieldforce() +{ + double ***egridn = egrid[0]; + + int i,l,m,n,nx,ny,nz,mx,my,mz; + double dx,dy,dz; + double phi_x,phi_y,phi_z,u; + double dphi_x,dphi_y,dphi_z; + double ekx,eky,ekz,etmp; + + + // loop over my charges, interpolate electric field from nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + // ek = 3 components of E-field on particle + + double *q = atom->q; + double **x = atom->x; + double **f = atom->f; + double *eps = atom->epsilon; + int nlocal = atom->nlocal; + + for (i = 0; i < nlocal; i++) { + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx - (x[i][0]-boxlo[0])*delxinv[0]; + dy = ny - (x[i][1]-boxlo[1])*delyinv[0]; + dz = nz - (x[i][2]-boxlo[2])*delzinv[0]; + + compute_phis_and_dphis(dx,dy,dz); + + u = ekx = eky = ekz = 0.0; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + phi_z = phi1d[2][n]; + dphi_z = dphi1d[2][n]; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + phi_y = phi1d[1][m]; + dphi_y = dphi1d[1][m]; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + phi_x = phi1d[0][l]; + dphi_x = dphi1d[0][l]; + etmp = egridn[mz][my][mx]; + u += phi_z*phi_y*phi_x*etmp; + ekx += dphi_x*phi_y*phi_z*etmp; + eky += phi_x*dphi_y*phi_z*etmp; + ekz += phi_x*phi_y*dphi_z*etmp; + } + } + } + + ekx *= delxinv[0]; + eky *= delyinv[0]; + ekz *= delzinv[0]; + + // electrical potential + + phi[i] = u; + + // effectively divide by length for a triclinic system + + if (triclinic) { + double tmp[3]; + tmp[0] = ekx; + tmp[1] = eky; + tmp[2] = ekz; + x2lamdaT(&tmp[0],&tmp[0]); + ekx = tmp[0]; + eky = tmp[1]; + ekz = tmp[2]; + } + + // convert E-field to force + const double efactor = scale * eps[i]; + efield[i][0] = efactor*ekx; + efield[i][1] = efactor*eky; + efield[i][2] = efactor*ekz; + + const double qfactor = qqrd2e*scale*q[i]; + f[i][0] += qfactor*ekx; + f[i][1] += qfactor*eky; + f[i][2] += qfactor*ekz; + } +} diff --git a/src/USER-DIELECTRIC/msm_dielectric.h b/src/USER-DIELECTRIC/msm_dielectric.h new file mode 100644 index 0000000000..9874f5e0b2 --- /dev/null +++ b/src/USER-DIELECTRIC/msm_dielectric.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef KSPACE_CLASS +// clang-format off +KSpaceStyle(msm/dielectric,MSMDielectric); +// clang-format on +#else + +#ifndef LMP_MSM_DIELECTRIC_H +#define LMP_MSM_DIELECTRIC_H + +#include "msm.h" + +namespace LAMMPS_NS { + +class MSMDielectric : public MSM { + public: + MSMDielectric(class LAMMPS *); + virtual ~MSMDielectric(); + virtual void init(); + virtual void compute(int, int); + void fieldforce(); + + double **efield; + double *phi; + + protected: + class AtomVecDielectric *avec; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/USER-DIELECTRIC/pair_coul_cut_dielectric.cpp b/src/USER-DIELECTRIC/pair_coul_cut_dielectric.cpp new file mode 100644 index 0000000000..1b540157e4 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_coul_cut_dielectric.cpp @@ -0,0 +1,201 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_coul_cut_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "memory.h" +#include "math_const.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EPSILON 1e-6 + +/* ---------------------------------------------------------------------- */ + +PairCoulCutDielectric::PairCoulCutDielectric(LAMMPS *lmp) : PairCoulCut(lmp) +{ + efield = nullptr; + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairCoulCutDielectric::~PairCoulCutDielectric() +{ + memory->destroy(efield); +} + +/* ---------------------------------------------------------------------- */ + +void PairCoulCutDielectric::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double qtmp,etmp,xtmp,ytmp,ztmp,delx,dely,delz,ecoul,fpair; + double fpair_i,fpair_j; + double rsq,r2inv,rinv,forcecoul,factor_coul,efield_i; + int *ilist,*jlist,*numneigh,**firstneigh; + + if (atom->nmax > nmax) { + memory->destroy(efield); + nmax = atom->nmax; + memory->create(efield,nmax,3,"pair:efield"); + } + + ecoul = 0.0; + ev_init(eflag,vflag); + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + double *q_real = atom->q_unscaled; + double* eps = atom->epsilon; + double** norm = atom->mu; + double* curvature = atom->curvature; + double* area = atom->area; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + etmp = eps[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al + + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i]/(4.0*MY_PIS*curvature_threshold) * area[i]*q[i]; + efield[i][0] = sf*norm[i][0]; + efield[i][1] = sf*norm[i][1]; + efield[i][2] = sf*norm[i][2]; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype] && rsq > EPSILON) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + efield_i = scale[itype][jtype] * q[j]*rinv; + forcecoul = qtmp*efield_i; + + fpair_i = factor_coul*etmp*forcecoul*r2inv; + f[i][0] += delx*fpair_i; + f[i][1] += dely*fpair_i; + f[i][2] += delz*fpair_i; + + efield_i *= (factor_coul*etmp*r2inv); + efield[i][0] += delx*efield_i; + efield[i][1] += dely*efield_i; + efield[i][2] += delz*efield_i; + + if (newton_pair && j >= nlocal) { + fpair_j = factor_coul*eps[j]*forcecoul*r2inv; + f[j][0] -= delx*fpair_j; + f[j][1] -= dely*fpair_j; + f[j][2] -= delz*fpair_j; + } + + if (eflag) { + ecoul = factor_coul * qqrd2e * scale[itype][jtype] * qtmp*q[j]*(etmp+eps[j])*rinv; + ecoul *= 0.5; + } + if (evflag) ev_tally_full(i,0.0,ecoul,fpair_i,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairCoulCutDielectric::init_style() +{ + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR,"Pair coul/cut/dielectric requires atom style dielectric"); + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; +} + +/* ---------------------------------------------------------------------- */ + +double PairCoulCutDielectric::single(int i, int j, int itype, int jtype, + double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + double r2inv,forcecoul,phicoul,ei,ej; + double* eps = atom->epsilon; + + r2inv = 1.0/rsq; + forcecoul = force->qqrd2e * atom->q[i]*atom->q[j]*sqrt(r2inv)*eps[i]; + + double eng = 0.0; + if (eps[i] == 1) ei = 0; + else ei = eps[i]; + if (eps[j] == 1) ej = 0; + else ej = eps[j]; + phicoul = force->qqrd2e * atom->q[i]*atom->q[j]*sqrt(r2inv); + phicoul *= 0.5*(ei+ej); + eng += factor_coul*phicoul; + + return eng; +} diff --git a/src/USER-DIELECTRIC/pair_coul_cut_dielectric.h b/src/USER-DIELECTRIC/pair_coul_cut_dielectric.h new file mode 100644 index 0000000000..ef6fd3fb45 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_coul_cut_dielectric.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(coul/cut/dielectric,PairCoulCutDielectric); +// clang-format on +#else + +#ifndef LMP_PAIR_COUL_CUT_DIELECTRIC_H +#define LMP_PAIR_COUL_CUT_DIELECTRIC_H + +#include "pair_coul_cut.h" + +namespace LAMMPS_NS { + +class PairCoulCutDielectric : public PairCoulCut { + public: + PairCoulCutDielectric(class LAMMPS *); + virtual ~PairCoulCutDielectric(); + virtual void compute(int, int); + virtual double single(int, int, int, int, double, double, double, double &); + void init_style(); + + double **efield; + + protected: + class AtomVecDielectric *avec; + int nmax; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style coul/cut/dielectric requires atom attribute q + +The atom style defined does not have these attributes. + +*/ diff --git a/src/USER-DIELECTRIC/pair_coul_long_dielectric.cpp b/src/USER-DIELECTRIC/pair_coul_long_dielectric.cpp new file mode 100644 index 0000000000..fd5110cdb6 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_coul_long_dielectric.cpp @@ -0,0 +1,230 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_coul_long_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "kspace.h" +#include "math_const.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairCoulLongDielectric::PairCoulLongDielectric(LAMMPS *lmp) : PairCoulLong(lmp) +{ + efield = nullptr; + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairCoulLongDielectric::~PairCoulLongDielectric() +{ + memory->destroy(efield); +} + +/* ---------------------------------------------------------------------- */ + +void PairCoulLongDielectric::compute(int eflag, int vflag) +{ + int i, j, ii, jj, inum, jnum, itable, itype, jtype; + double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, ecoul; + double fpair_i, fpair_j; + double fraction, table; + double r, r2inv, forcecoul, factor_coul; + double grij, expm2, prefactor, t, erfc, prefactorE, efield_i; + int *ilist, *jlist, *numneigh, **firstneigh; + double rsq; + + ecoul = 0.0; + ev_init(eflag, vflag); + + if (atom->nmax > nmax) { + memory->destroy(efield); + nmax = atom->nmax; + memory->create(efield, nmax, 3, "pair:efield"); + } + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + double **norm = atom->mu; + double *curvature = atom->curvature; + double *area = atom->area; + double *eps = atom->epsilon; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + etmp = eps[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; + efield[i][0] = sf * norm[i][0]; + efield[i][1] = sf * norm[i][1]; + efield[i][2] = sf * norm[i][2]; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq < cut_coulsq) { + r2inv = 1.0 / rsq; + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij * grij); + t = 1.0 / (1.0 + EWALD_P * grij); + erfc = t * (A1 + t * (A2 + t * (A3 + t * (A4 + t * A5)))) * expm2; + prefactor = qqrd2e * scale[itype][jtype] * qtmp * q[j] / r; + forcecoul = prefactor * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) forcecoul -= (1.0 - factor_coul) * prefactor; + + prefactorE = qqrd2e * scale[itype][jtype] * q[j] / r; + efield_i = prefactorE * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) efield_i -= (1.0 - factor_coul) * prefactorE; + + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction * dftable[itable]; + forcecoul = scale[itype][jtype] * qtmp * q[j] * table; + efield_i = scale[itype][jtype] * q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction * dctable[itable]; + prefactor = scale[itype][jtype] * qtmp * q[j] * table; + forcecoul -= (1.0 - factor_coul) * prefactor; + + prefactorE = scale[itype][jtype] * q[j] * table; + efield_i -= (1.0 - factor_coul) * prefactorE; + } + } + + fpair_i = etmp * forcecoul * r2inv; + f[i][0] += delx * fpair_i; + f[i][1] += dely * fpair_i; + f[i][2] += delz * fpair_i; + + efield_i *= (etmp * r2inv); + efield[i][0] += delx * efield_i; + efield[i][1] += dely * efield_i; + efield[i][2] += delz * efield_i; + + if (newton_pair && j >= nlocal) { + fpair_j = eps[j] * forcecoul * r2inv; + f[j][0] -= delx * fpair_j; + f[j][1] -= dely * fpair_j; + f[j][2] -= delz * fpair_j; + } + + if (eflag) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor * (etmp + eps[j]) * erfc; + else { + table = etable[itable] + fraction * detable[itable]; + ecoul = scale[itype][jtype] * qtmp * q[j] * (etmp + eps[j]) * table; + } + ecoul *= 0.5; + if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor; + } + + if (evflag) ev_tally_full(i, 0.0, ecoul, fpair_i, delx, dely, delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairCoulLongDielectric::init_style() +{ + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Pair coul/long/dielectric requires atom style dielectric"); + + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + cut_coulsq = cut_coul * cut_coul; + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) error->all(FLERR, "Pair style requires a KSpace style"); + g_ewald = force->kspace->g_ewald; + + // setup force tables + + if (ncoultablebits) init_tables(cut_coul, NULL); +} diff --git a/src/USER-DIELECTRIC/pair_coul_long_dielectric.h b/src/USER-DIELECTRIC/pair_coul_long_dielectric.h new file mode 100644 index 0000000000..993555e452 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_coul_long_dielectric.h @@ -0,0 +1,66 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(coul/long/dielectric,PairCoulLongDielectric); +// clang-format on +#else + +#ifndef LMP_PAIR_COUL_LONG_DIELECTRIC_H +#define LMP_PAIR_COUL_LONG_DIELECTRIC_H + +#include "pair_coul_long.h" + +namespace LAMMPS_NS { + +class PairCoulLongDielectric : public PairCoulLong { + public: + PairCoulLongDielectric(class LAMMPS *); + ~PairCoulLongDielectric(); + virtual void compute(int, int); + virtual void init_style(); + + double **efield; + + protected: + class AtomVecDielectric *avec; + int nmax; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style coul/long/dielectric requires atom attribute q + +The atom style defined does not have this attribute. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +*/ diff --git a/src/USER-DIELECTRIC/pair_lj_cut_coul_cut_dielectric.cpp b/src/USER-DIELECTRIC/pair_lj_cut_coul_cut_dielectric.cpp new file mode 100644 index 0000000000..82a5b0c99a --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_cut_coul_cut_dielectric.cpp @@ -0,0 +1,244 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_lj_cut_coul_cut_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "math_const.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" + +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EPSILON 1e-6 + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulCutDielectric::PairLJCutCoulCutDielectric(LAMMPS *lmp) : PairLJCutCoulCut(lmp) +{ + efield = nullptr; + epot = nullptr; + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulCutDielectric::~PairLJCutCoulCutDielectric() +{ + memory->destroy(efield); + memory->destroy(epot); +} + +/* ---------------------------------------------------------------------- */ + +void PairLJCutCoulCutDielectric::compute(int eflag, int vflag) +{ + int i, j, ii, jj, inum, jnum, itype, jtype; + double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul, fpair; + double fpair_i, fpair_j; + double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj, efield_i, epot_i; + int *ilist, *jlist, *numneigh, **firstneigh; + + if (atom->nmax > nmax) { + memory->destroy(efield); + memory->destroy(epot); + nmax = atom->nmax; + memory->create(efield, nmax, 3, "pair:efield"); + memory->create(epot, nmax, "pair:epot"); + } + + evdwl = ecoul = 0.0; + ev_init(eflag, vflag); + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + double *q_real = atom->q_unscaled; + double *eps = atom->epsilon; + double **norm = atom->mu; + double *curvature = atom->curvature; + double *area = atom->area; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + etmp = eps[i]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; + efield[i][0] = sf * norm[i][0]; + efield[i][1] = sf * norm[i][1]; + efield[i][2] = sf * norm[i][2]; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + epot[i] = 0; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0 / rsq; + + if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) { + efield_i = q[j] * sqrt(r2inv); + forcecoul = qqrd2e * qtmp * efield_i; + epot_i = efield_i; + } else + epot_i = efield_i = forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + + fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv; + f[i][0] += delx * fpair_i; + f[i][1] += dely * fpair_i; + f[i][2] += delz * fpair_i; + + efield_i *= (factor_coul * etmp * r2inv); + efield[i][0] += delx * efield_i; + efield[i][1] += dely * efield_i; + efield[i][2] += delz * efield_i; + + epot[i] += epot_i; + + if (newton_pair && j >= nlocal) { + fpair_j = (factor_coul * eps[j] * forcecoul + factor_lj * forcelj) * r2inv; + f[j][0] -= delx * fpair_j; + f[j][1] -= dely * fpair_j; + f[j][2] -= delz * fpair_j; + } + + if (eflag) { + if (rsq < cut_coulsq[itype][jtype]) { + ecoul = factor_coul * qqrd2e * qtmp * q[j] * (etmp + eps[j]) * sqrt(r2inv); + } else + ecoul = 0.0; + ecoul *= 0.5; + if (rsq < cut_ljsq[itype][jtype]) { + evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + evdwl *= factor_lj; + } else + evdwl = 0.0; + } + + if (evflag) ev_tally_full(i, evdwl, ecoul, fpair_i, delx, dely, delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJCutCoulCutDielectric::init_style() +{ + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Pair lj/cut/coul/cut/dielectric requires atom style dielectric"); + + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; +} + +/* ---------------------------------------------------------------------- */ + +double PairLJCutCoulCutDielectric::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, double &fforce) +{ + double r2inv, r6inv, forcecoul, forcelj, phicoul, ei, ej, philj; + double *eps = atom->epsilon; + + r2inv = 1.0 / rsq; + if (rsq < cut_coulsq[itype][jtype]) + forcecoul = force->qqrd2e * atom->q[i] * atom->q[j] * sqrt(r2inv) * eps[i]; + else + forcecoul = 0.0; + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + fforce = (factor_coul * forcecoul + factor_lj * forcelj) * r2inv; + + double eng = 0.0; + if (eps[i] == 1) + ei = 0; + else + ei = eps[i]; + if (eps[j] == 1) + ej = 0; + else + ej = eps[j]; + if (rsq < cut_coulsq[itype][jtype]) { + phicoul = force->qqrd2e * atom->q[i] * atom->q[j] * sqrt(r2inv); + phicoul *= 0.5 * (ei + ej); + eng += factor_coul * phicoul; + } + if (rsq < cut_ljsq[itype][jtype]) { + philj = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + eng += factor_lj * philj; + } + + return eng; +} diff --git a/src/USER-DIELECTRIC/pair_lj_cut_coul_cut_dielectric.h b/src/USER-DIELECTRIC/pair_lj_cut_coul_cut_dielectric.h new file mode 100644 index 0000000000..93bee549c8 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_cut_coul_cut_dielectric.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(lj/cut/coul/cut/dielectric,PairLJCutCoulCutDielectric); +// clang-format on +#else + +#ifndef LMP_PAIR_LJ_CUT_COUL_CUT_DIELECTRIC_H +#define LMP_PAIR_LJ_CUT_COUL_CUT_DIELECTRIC_H + +#include "pair_lj_cut_coul_cut.h" + +namespace LAMMPS_NS { + +class PairLJCutCoulCutDielectric : public PairLJCutCoulCut { + public: + PairLJCutCoulCutDielectric(class LAMMPS *); + virtual ~PairLJCutCoulCutDielectric(); + virtual void compute(int, int); + virtual double single(int, int, int, int, double, double, double, double &); + void init_style(); + + double **efield; + double *epot; + + protected: + class AtomVecDielectric *avec; + int nmax; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/cut/coul/cut/dielectric requires atom attribute q + +The atom style defined does not have this attribute. + +*/ diff --git a/src/USER-DIELECTRIC/pair_lj_cut_coul_debye_dielectric.cpp b/src/USER-DIELECTRIC/pair_lj_cut_coul_debye_dielectric.cpp new file mode 100644 index 0000000000..4f8b2d63c8 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_cut_coul_debye_dielectric.cpp @@ -0,0 +1,252 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_lj_cut_coul_debye_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "math_const.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EPSILON 1e-6 + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulDebyeDielectric::PairLJCutCoulDebyeDielectric(LAMMPS *lmp) : PairLJCutCoulDebye(lmp) +{ + efield = NULL; + epot = NULL; + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulDebyeDielectric::~PairLJCutCoulDebyeDielectric() +{ + memory->destroy(efield); + memory->destroy(epot); +} + +/* ---------------------------------------------------------------------- */ + +void PairLJCutCoulDebyeDielectric::compute(int eflag, int vflag) +{ + int i, j, ii, jj, inum, jnum, itype, jtype; + double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul, fpair; + double fpair_i, fpair_j; + double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj, efield_i, epot_i; + double r, rinv, screening; + int *ilist, *jlist, *numneigh, **firstneigh; + + if (atom->nmax > nmax) { + memory->destroy(efield); + memory->destroy(epot); + nmax = atom->nmax; + memory->create(efield, nmax, 3, "pair:efield"); + memory->create(epot, nmax, "pair:epot"); + } + + evdwl = ecoul = 0.0; + ev_init(eflag, vflag); + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + double *eps = avec->epsilon; + double **norm = avec->mu; + double *curvature = avec->curvature; + double *area = avec->area; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + etmp = eps[i]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; + efield[i][0] = sf * norm[i][0]; + efield[i][1] = sf * norm[i][1]; + efield[i][2] = sf * norm[i][2]; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + epot[i] = 0; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0 / rsq; + + if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) { + r = sqrt(rsq); + rinv = 1.0 / r; + screening = exp(-kappa * r); + efield_i = qqrd2e * q[j] * screening * (kappa + rinv); + forcecoul = qtmp * efield_i; + epot_i = efield_i; + } else + efield_i = forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + + fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv; + f[i][0] += delx * fpair_i; + f[i][1] += dely * fpair_i; + f[i][2] += delz * fpair_i; + + efield_i *= (factor_coul * etmp * r2inv); + efield[i][0] += delx * efield_i; + efield[i][1] += dely * efield_i; + efield[i][2] += delz * efield_i; + + epot[i] += epot_i; + + if (newton_pair && j >= nlocal) { + fpair_j = (factor_coul * eps[j] * forcecoul + factor_lj * forcelj) * r2inv; + f[j][0] -= delx * fpair_j; + f[j][1] -= dely * fpair_j; + f[j][2] -= delz * fpair_j; + } + + if (eflag) { + if (rsq < cut_coulsq[itype][jtype]) { + ecoul = factor_coul * qqrd2e * qtmp * q[j] * (etmp + eps[j]) * rinv * screening; + } else + ecoul = 0.0; + ecoul *= 0.5; + if (rsq < cut_ljsq[itype][jtype]) { + evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + evdwl *= factor_lj; + } else + evdwl = 0.0; + } + + if (evflag) ev_tally_full(i, evdwl, ecoul, fpair_i, delx, dely, delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJCutCoulDebyeDielectric::init_style() +{ + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Pair lj/cut/coul/debye/dielectric requires atom style dielectric"); + + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; +} + +/* ---------------------------------------------------------------------- */ + +double PairLJCutCoulDebyeDielectric::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, double &fforce) +{ + double r2inv, r6inv, forcecoul, forcelj, phicoul, ei, ej, philj; + double r, rinv, screening; + double *eps = avec->epsilon; + + r2inv = 1.0 / rsq; + if (rsq < cut_coulsq[itype][jtype]) { + r = sqrt(rsq); + rinv = 1.0 / r; + screening = exp(-kappa * r); + forcecoul = force->qqrd2e * atom->q[i] * atom->q[j] * screening * (kappa + rinv) * eps[i]; + } else + forcecoul = 0.0; + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + fforce = (factor_coul * forcecoul + factor_lj * forcelj) * r2inv; + + double eng = 0.0; + if (eps[i] == 1) + ei = 0; + else + ei = eps[i]; + if (eps[j] == 1) + ej = 0; + else + ej = eps[j]; + if (rsq < cut_coulsq[itype][jtype]) { + phicoul = force->qqrd2e * atom->q[i] * atom->q[j] * rinv * screening; + phicoul *= 0.5 * (ei + ej); + eng += factor_coul * phicoul; + } + if (rsq < cut_ljsq[itype][jtype]) { + philj = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + eng += factor_lj * philj; + } + + return eng; +} diff --git a/src/USER-DIELECTRIC/pair_lj_cut_coul_debye_dielectric.h b/src/USER-DIELECTRIC/pair_lj_cut_coul_debye_dielectric.h new file mode 100644 index 0000000000..0301ff4fbd --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_cut_coul_debye_dielectric.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(lj/cut/coul/debye/dielectric,PairLJCutCoulDebyeDielectric); +// clang-format on +#else + +#ifndef LMP_PAIR_LJ_CUT_COUL_DEBYE_DIELECTRIC_H +#define LMP_PAIR_LJ_CUT_COUL_DEBYE_DIELECTRIC_H + +#include "pair_lj_cut_coul_debye.h" + +namespace LAMMPS_NS { + +class PairLJCutCoulDebyeDielectric : public PairLJCutCoulDebye { + public: + PairLJCutCoulDebyeDielectric(class LAMMPS *); + virtual ~PairLJCutCoulDebyeDielectric(); + virtual void compute(int, int); + virtual double single(int, int, int, int, double, double, double, double &); + void init_style(); + + double **efield; + double *epot; + + protected: + class AtomVecDielectric *avec; + int nmax; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/cut/coul/debye/dielectric requires atom attribute q + +The atom style defined does not have this attribute. + +*/ diff --git a/src/USER-DIELECTRIC/pair_lj_cut_coul_long_dielectric.cpp b/src/USER-DIELECTRIC/pair_lj_cut_coul_long_dielectric.cpp new file mode 100644 index 0000000000..7f5b67a22b --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_cut_coul_long_dielectric.cpp @@ -0,0 +1,341 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_lj_cut_coul_long_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "kspace.h" +#include "math_const.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" + +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +#define EPSILON 1e-6 + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulLongDielectric::PairLJCutCoulLongDielectric(LAMMPS *lmp) : PairLJCutCoulLong(lmp) +{ + respa_enable = 0; + cut_respa = nullptr; + efield = nullptr; + epot = nullptr; + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulLongDielectric::~PairLJCutCoulLongDielectric() +{ + memory->destroy(efield); + memory->destroy(epot); +} + +/* ---------------------------------------------------------------------- */ + +void PairLJCutCoulLongDielectric::compute(int eflag, int vflag) +{ + int i, ii, j, jj, inum, jnum, itype, jtype, itable; + double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul; + double fpair_i, fpair_j; + double fraction, table; + double r, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj; + double grij, expm2, prefactor, t, erfc, prefactorE, efield_i, epot_i; + int *ilist, *jlist, *numneigh, **firstneigh; + double rsq; + + evdwl = ecoul = 0.0; + ev_init(eflag, vflag); + + if (atom->nmax > nmax) { + memory->destroy(efield); + memory->destroy(epot); + nmax = atom->nmax; + memory->create(efield, nmax, 3, "pair:efield"); + memory->create(epot, nmax, "pair:epot"); + } + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + double *eps = atom->epsilon; + double **norm = atom->mu; + double *curvature = atom->curvature; + double *area = atom->area; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + etmp = eps[i]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al. + + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; + efield[i][0] = sf * norm[i][0]; + efield[i][1] = sf * norm[i][1]; + efield[i][2] = sf * norm[i][2]; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + epot[i] = 0; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0 / rsq; + r = sqrt(rsq); + + if (rsq < cut_coulsq && rsq > EPSILON) { + if (!ncoultablebits || rsq <= tabinnersq) { + + grij = g_ewald * r; + expm2 = exp(-grij * grij); + t = 1.0 / (1.0 + EWALD_P * grij); + erfc = t * (A1 + t * (A2 + t * (A3 + t * (A4 + t * A5)))) * expm2; + prefactor = qqrd2e * qtmp * q[j] / r; + forcecoul = prefactor * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) forcecoul -= (1.0 - factor_coul) * prefactor; + + prefactorE = q[j] / r; + efield_i = prefactorE * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) efield_i -= (1.0 - factor_coul) * prefactorE; + epot_i = efield_i; + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction * dftable[itable]; + forcecoul = qtmp * q[j] * table; + efield_i = q[j] * table / qqrd2e; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction * dctable[itable]; + prefactor = qtmp * q[j] * table; + forcecoul -= (1.0 - factor_coul) * prefactor; + + prefactorE = q[j] * table / qqrd2e; + efield_i -= (1.0 - factor_coul) * prefactorE; + } + epot_i = efield_i; + } + } else + epot_i = efield_i = forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + + fpair_i = (forcecoul * etmp + factor_lj * forcelj) * r2inv; + f[i][0] += delx * fpair_i; + f[i][1] += dely * fpair_i; + f[i][2] += delz * fpair_i; + + efield_i *= (etmp * r2inv); + efield[i][0] += delx * efield_i; + efield[i][1] += dely * efield_i; + efield[i][2] += delz * efield_i; + + epot[i] += epot_i; + + if (newton_pair && j >= nlocal) { + + fpair_j = (forcecoul * eps[j] + factor_lj * forcelj) * r2inv; + f[j][0] -= delx * fpair_j; + f[j][1] -= dely * fpair_j; + f[j][2] -= delz * fpair_j; + } + + if (eflag) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor * (etmp + eps[j]) * erfc; + else { + table = etable[itable] + fraction * detable[itable]; + ecoul = qtmp * q[j] * (etmp + eps[j]) * table; + } + ecoul *= 0.5; + if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor; + } else + ecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + evdwl *= factor_lj; + } else + evdwl = 0.0; + } + + if (evflag) ev_tally_full(i, evdwl, ecoul, fpair_i, delx, dely, delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJCutCoulLongDielectric::init_style() +{ + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Pair lj/cut/coul/long/dielectric requires atom style dielectric"); + + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + cut_coulsq = cut_coul * cut_coul; + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) error->all(FLERR, "Pair style requires a KSpace style"); + g_ewald = force->kspace->g_ewald; + + // setup force tables + + if (ncoultablebits) init_tables(cut_coul, cut_respa); +} + +/* ---------------------------------------------------------------------- */ + +double PairLJCutCoulLongDielectric::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, double &fforce) +{ + double r2inv, r6inv, r, grij, expm2, t, erfc, ei, ej, prefactor; + double fraction, table, forcecoul, forcelj, phicoul, philj; + int itable; + double *eps = atom->epsilon; + + r2inv = 1.0 / rsq; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij * grij); + t = 1.0 / (1.0 + EWALD_P * grij); + erfc = t * (A1 + t * (A2 + t * (A3 + t * (A4 + t * A5)))) * expm2; + prefactor = force->qqrd2e * atom->q[i] * atom->q[j] / r; + forcecoul = prefactor * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) forcecoul -= (1.0 - factor_coul) * prefactor; + } else { + union_int_float_t rsq_lookup_single; + rsq_lookup_single.f = rsq; + itable = rsq_lookup_single.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup_single.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction * dftable[itable]; + forcecoul = atom->q[i] * atom->q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction * dctable[itable]; + prefactor = atom->q[i] * atom->q[j] * table; + forcecoul -= (1.0 - factor_coul) * prefactor; + } + } + } else + forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + + fforce = (forcecoul * eps[i] + factor_lj * forcelj) * r2inv; + + double eng = 0.0; + if (eps[i] == 1) + ei = 0; + else + ei = eps[i]; + if (eps[j] == 1) + ej = 0; + else + ej = eps[j]; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + phicoul = prefactor * (ei + ej) * erfc; + else { + table = etable[itable] + fraction * detable[itable]; + phicoul = atom->q[i] * atom->q[j] * (ei + ej) * table; + } + phicoul *= 0.5; + if (factor_coul < 1.0) phicoul -= (1.0 - factor_coul) * prefactor; + eng += phicoul; + } + + if (rsq < cut_ljsq[itype][jtype]) { + philj = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + eng += factor_lj * philj; + } + + return eng; +} diff --git a/src/USER-DIELECTRIC/pair_lj_cut_coul_long_dielectric.h b/src/USER-DIELECTRIC/pair_lj_cut_coul_long_dielectric.h new file mode 100644 index 0000000000..06ad1c5e7f --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_cut_coul_long_dielectric.h @@ -0,0 +1,74 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(lj/cut/coul/long/dielectric,PairLJCutCoulLongDielectric); +// clang-format on +#else + +#ifndef LMP_PAIR_LJ_CUT_COUL_LONG_DIELECTRIC_H +#define LMP_PAIR_LJ_CUT_COUL_LONG_DIELECTRIC_H + +#include "pair_lj_cut_coul_long.h" + +namespace LAMMPS_NS { + +class PairLJCutCoulLongDielectric : public PairLJCutCoulLong { + + public: + PairLJCutCoulLongDielectric(class LAMMPS *); + virtual ~PairLJCutCoulLongDielectric(); + virtual void compute(int, int); + virtual void init_style(); + virtual double single(int, int, int, int, double, double, double, double &); + + double **efield; + double *epot; + + protected: + class AtomVecDielectric *avec; + int nmax; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/cut/coul/long/dielectric requires atom attribute q + +The atom style defined does not have this attribute. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +E: Pair cutoff < Respa interior cutoff + +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. + +*/ diff --git a/src/USER-DIELECTRIC/pair_lj_cut_coul_msm_dielectric.cpp b/src/USER-DIELECTRIC/pair_lj_cut_coul_msm_dielectric.cpp new file mode 100644 index 0000000000..c273fc2132 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_cut_coul_msm_dielectric.cpp @@ -0,0 +1,386 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_lj_cut_coul_msm_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "integrate.h" +#include "kspace.h" +#include "math_const.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" + +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EPSILON 1e-6 + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulMSMDielectric::PairLJCutCoulMSMDielectric(LAMMPS *lmp) : PairLJCutCoulLong(lmp) +{ + ewaldflag = pppmflag = 0; + msmflag = 1; + respa_enable = 0; + cut_respa = nullptr; + + nmax = 0; + ftmp = nullptr; + efield = nullptr; +} + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulMSMDielectric::~PairLJCutCoulMSMDielectric() +{ + if (ftmp) memory->destroy(ftmp); + memory->destroy(efield); +} + +/* ---------------------------------------------------------------------- */ + +void PairLJCutCoulMSMDielectric::compute(int eflag, int vflag) +{ + int i, ii, j, jj, inum, jnum, itype, jtype, itable; + double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul, fpair, fcoul; + double fpair_i, fpair_j; + double fraction, table; + double r, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj; + double egamma, fgamma, prefactor, prefactorE, efield_i; + int *ilist, *jlist, *numneigh, **firstneigh; + double rsq; + int eflag_old = eflag; + + if (force->kspace->scalar_pressure_flag && vflag) { + if (vflag > 2) + error->all(FLERR, + "Must use 'kspace_modify pressure/scalar no' " + "to obtain per-atom virial with kspace_style MSM"); + + if (atom->nmax > nmax) { + if (ftmp) memory->destroy(ftmp); + nmax = atom->nmax; + memory->create(ftmp, nmax, 3, "pair:ftmp"); + } + memset(&ftmp[0][0], 0, nmax * 3 * sizeof(double)); + + // must switch on global energy computation if not already on + + if (eflag == 0 || eflag == 2) { eflag++; } + } + + if (!efield || atom->nmax > nmax) { + if (efield) memory->destroy(efield); + nmax = atom->nmax; + memory->create(efield, nmax, 3, "pair:efield"); + } + + evdwl = ecoul = 0.0; + ev_init(eflag, vflag); + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + double *eps = atom->epsilon; + double **norm = atom->mu; + double *curvature = atom->curvature; + double *area = atom->area; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + etmp = eps[i]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; + efield[i][0] = sf * norm[i][0]; + efield[i][1] = sf * norm[i][1]; + efield[i][2] = sf * norm[i][2]; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0 / rsq; + + if (rsq < cut_coulsq && rsq > EPSILON) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + prefactor = qqrd2e * qtmp * q[j] / r; + egamma = 1.0 - (r / cut_coul) * force->kspace->gamma(r / cut_coul); + fgamma = 1.0 + (rsq / cut_coulsq) * force->kspace->dgamma(r / cut_coul); + forcecoul = prefactor * fgamma; + if (factor_coul < 1.0) forcecoul -= (1.0 - factor_coul) * prefactor; + + prefactorE = q[j] / r; + efield_i = prefactorE * fgamma; + if (factor_coul < 1.0) efield_i -= (1.0 - factor_coul) * prefactorE; + + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction * dftable[itable]; + forcecoul = qtmp * q[j] * table; + efield_i = q[j] * table / qqrd2e; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction * dctable[itable]; + prefactor = qtmp * q[j] * table; + forcecoul -= (1.0 - factor_coul) * prefactor; + + prefactorE = q[j] * table / qqrd2e; + efield_i -= (1.0 - factor_coul) * prefactorE; + } + } + } else + forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + + if (!(force->kspace->scalar_pressure_flag && vflag)) { + + fpair_i = (forcecoul * etmp + factor_lj * forcelj) * r2inv; + f[i][0] += delx * fpair_i; + f[i][1] += dely * fpair_i; + f[i][2] += delz * fpair_i; + + efield_i *= (etmp * r2inv); + efield[i][0] += delx * efield_i; + efield[i][1] += dely * efield_i; + efield[i][2] += delz * efield_i; + + if (newton_pair && j >= nlocal) { + fpair_j = (forcecoul * eps[j] + factor_lj * forcelj) * r2inv; + f[j][0] -= delx * fpair_j; + f[j][1] -= dely * fpair_j; + f[j][2] -= delz * fpair_j; + } + } else { + + // separate LJ and Coulombic forces + + fpair = (factor_lj * forcelj) * r2inv; + + f[i][0] += delx * fpair; + f[i][1] += dely * fpair; + f[i][2] += delz * fpair; + if (newton_pair) { + f[j][0] -= delx * fpair; + f[j][1] -= dely * fpair; + f[j][2] -= delz * fpair; + } + + fpair_i = (forcecoul * etmp) * r2inv; + ftmp[i][0] += delx * fpair_i; + ftmp[i][1] += dely * fpair_i; + ftmp[i][2] += delz * fpair_i; + + efield_i *= (etmp * r2inv); + efield[i][0] += delx * efield_i; + efield[i][1] += dely * efield_i; + efield[i][2] += delz * efield_i; + + if (newton_pair && j >= nlocal) { + fpair_j = (forcecoul * eps[j]) * r2inv; + ftmp[j][0] -= delx * fpair_j; + ftmp[j][1] -= dely * fpair_j; + ftmp[j][2] -= delz * fpair_j; + } + } + + if (eflag) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor * (etmp + eps[j]) * egamma; + else { + table = etable[itable] + fraction * detable[itable]; + ecoul = qtmp * q[j] * (etmp + eps[j]) * table; + } + if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor; + } else + ecoul = 0.0; + + if (eflag_old && rsq < cut_ljsq[itype][jtype]) { + evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + evdwl *= factor_lj; + } else + evdwl = 0.0; + } + + if (evflag) ev_tally_full(i, evdwl, ecoul, fpair_i, delx, dely, delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); + + if (force->kspace->scalar_pressure_flag && vflag) { + for (i = 0; i < 3; i++) virial[i] += force->pair->eng_coul / 3.0; + for (int i = 0; i < nmax; i++) { + f[i][0] += ftmp[i][0]; + f[i][1] += ftmp[i][1]; + f[i][2] += ftmp[i][2]; + } + } +} + +/* ---------------------------------------------------------------------- */ + +double PairLJCutCoulMSMDielectric::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, double &fforce) +{ + double r2inv, r6inv, r, egamma, fgamma, prefactor; + double fraction, table, forcecoul, forcelj, phicoul, philj; + int itable; + + r2inv = 1.0 / rsq; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + prefactor = force->qqrd2e * atom->q[i] * atom->q[j] / r; + egamma = 1.0 - (r / cut_coul) * force->kspace->gamma(r / cut_coul); + fgamma = 1.0 + (rsq / cut_coulsq) * force->kspace->dgamma(r / cut_coul); + forcecoul = prefactor * fgamma; + if (factor_coul < 1.0) forcecoul -= (1.0 - factor_coul) * prefactor; + } else { + union_int_float_t rsq_lookup_single; + rsq_lookup_single.f = rsq; + itable = rsq_lookup_single.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup_single.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction * dftable[itable]; + forcecoul = atom->q[i] * atom->q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction * dctable[itable]; + prefactor = atom->q[i] * atom->q[j] * table; + forcecoul -= (1.0 - factor_coul) * prefactor; + } + } + } else + forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + + fforce = (forcecoul + factor_lj * forcelj) * r2inv; + + double eng = 0.0; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + phicoul = prefactor * egamma; + else { + table = etable[itable] + fraction * detable[itable]; + phicoul = atom->q[i] * atom->q[j] * table; + } + if (factor_coul < 1.0) phicoul -= (1.0 - factor_coul) * prefactor; + eng += phicoul; + } + + if (rsq < cut_ljsq[itype][jtype]) { + philj = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + eng += factor_lj * philj; + } + + return eng; +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJCutCoulMSMDielectric::init_style() +{ + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Pair lj/cut/coul/msm/dielectric requires atom style dielectric"); + + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + cut_coulsq = cut_coul * cut_coul; + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) error->all(FLERR, "Pair style requires a KSpace style"); + g_ewald = force->kspace->g_ewald; + + // setup force tables + + if (ncoultablebits) init_tables(cut_coul, cut_respa); +} + +/* ---------------------------------------------------------------------- */ + +void *PairLJCutCoulMSMDielectric::extract(const char *str, int &dim) +{ + dim = 0; + if (strcmp(str, "cut_coul") == 0) return (void *) &cut_coul; + dim = 2; + if (strcmp(str, "epsilon") == 0) return (void *) epsilon; + if (strcmp(str, "sigma") == 0) return (void *) sigma; + return NULL; +} diff --git a/src/USER-DIELECTRIC/pair_lj_cut_coul_msm_dielectric.h b/src/USER-DIELECTRIC/pair_lj_cut_coul_msm_dielectric.h new file mode 100644 index 0000000000..3e9e06bbc9 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_cut_coul_msm_dielectric.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(lj/cut/coul/msm/dielectric,PairLJCutCoulMSMDielectric); +// clang-format on +#else + +#ifndef LMP_PAIR_LJ_CUT_COUL_MSM_DIELECTRIC_H +#define LMP_PAIR_LJ_CUT_COUL_MSM_DIELECTRIC_H + +#include "pair_lj_cut_coul_long.h" + +namespace LAMMPS_NS { + +class PairLJCutCoulMSMDielectric : public PairLJCutCoulLong { + public: + PairLJCutCoulMSMDielectric(class LAMMPS *); + virtual ~PairLJCutCoulMSMDielectric(); + virtual void init_style(); + virtual void compute(int, int); + virtual double single(int, int, int, int, double, double, double, double &); + virtual void *extract(const char *, int &); + + double **efield; + + protected: + class AtomVecDielectric *avec; + int nmax; + double **ftmp; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Must use 'kspace_modify pressure/scalar no' to obtain per-atom virial with kspace_style MSM + +The kspace scalar pressure option cannot be used to obtain per-atom virial. + +E: Must use 'kspace_modify pressure/scalar no' for rRESPA with kspace_style MSM + +The kspace scalar pressure option cannot (yet) be used with rRESPA. + +*/ diff --git a/src/USER-DIELECTRIC/pair_lj_long_coul_long_dielectric.cpp b/src/USER-DIELECTRIC/pair_lj_long_coul_long_dielectric.cpp new file mode 100644 index 0000000000..564a156a04 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_long_coul_long_dielectric.cpp @@ -0,0 +1,375 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_lj_long_coul_long_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "integrate.h" +#include "kspace.h" +#include "math_const.h" +#include "math_extra.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" +#include "respa.h" +#include "update.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace MathConst; +using namespace MathExtra; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairLJLongCoulLongDielectric::PairLJLongCoulLongDielectric(LAMMPS *lmp) : PairLJLongCoulLong(lmp) +{ + respa_enable = 0; + cut_respa = NULL; + efield = NULL; + epot = NULL; + nmax = 0; +} + +/* ---------------------------------------------------------------------- + free all arrays +------------------------------------------------------------------------- */ + +PairLJLongCoulLongDielectric::~PairLJLongCoulLongDielectric() +{ + memory->destroy(efield); + memory->destroy(epot); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJLongCoulLongDielectric::init_style() +{ + PairLJLongCoulLongDielectric::init_style(); + + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR, "Pair lj/long/coul/long/dielectric requires atom style dielectric"); + + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; +} + +/* ---------------------------------------------------------------------- + compute pair interactions +------------------------------------------------------------------------- */ + +void PairLJLongCoulLongDielectric::compute(int eflag, int vflag) +{ + double evdwl, ecoul, fpair; + evdwl = ecoul = 0.0; + ev_init(eflag, vflag); + + if (atom->nmax > nmax) { + memory->destroy(efield); + memory->destroy(epot); + nmax = atom->nmax; + memory->create(efield, nmax, 3, "pair:efield"); + memory->create(epot, nmax, "pair:epot"); + } + + double **x = atom->x, *x0 = x[0]; + double **f = atom->f, *f0 = f[0], *fi = f0; + double *q = atom->q; + double *eps = avec->epsilon; + double **norm = avec->mu; + double *curvature = avec->curvature; + double *area = avec->area; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + int i, ii, j, jj, inum, jnum, itype, jtype, itable; + double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz; + int order1 = ewald_order & (1 << 1), order6 = ewald_order & (1 << 6); + int *ineigh, *ineighn, *jneigh, *jneighn, typei, typej, ni; + double qi = 0.0, qri = 0.0; + double fpair_i, fpair_j; + double fraction, table; + double *cutsqi, *cut_ljsqi, *lj1i, *lj2i, *lj3i, *lj4i, *offseti; + double grij, expm2, prefactor, t, erfc, prefactorE, efield_i, epot_i; + double r, rsq, r2inv, force_coul, force_lj, factor_coul, factor_lj; + double g2 = g_ewald_6 * g_ewald_6, g6 = g2 * g2 * g2, g8 = g6 * g2; + double xi[3], d[3]; + + ineighn = (ineigh = list->ilist) + list->inum; + + for (; ineigh < ineighn; ++ineigh) { // loop over my atoms + i = *ineigh; + fi = f0 + 3 * i; + qtmp = q[i]; + + if (order1) qri = (qi = q[i]) * qqrd2e; // initialize constants + offseti = offset[typei = type[i]]; + lj1i = lj1[typei]; + lj2i = lj2[typei]; + lj3i = lj3[typei]; + lj4i = lj4[typei]; + cutsqi = cutsq[typei]; + cut_ljsqi = cut_ljsq[typei]; + memcpy(xi, x0 + (i + (i << 1)), 3 * sizeof(double)); + jneighn = (jneigh = list->firstneigh[i]) + list->numneigh[i]; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; + efield[i][0] = sf * norm[i][0]; + efield[i][1] = sf * norm[i][1]; + efield[i][2] = sf * norm[i][2]; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + epot[i] = 0; + + for (; jneigh < jneighn; ++jneigh) { // loop over neighbors + j = *jneigh; + ni = sbmask(j); + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq >= cutsq[typei][typej]) continue; + + r2inv = 1.0 / rsq; + r = sqrt(rsq); + + if (order1 && (rsq < cut_coulsq)) { // coulombic + if (!ncoultablebits || rsq <= tabinnersq) { + + grij = g_ewald * r; + expm2 = exp(-grij * grij); + t = 1.0 / (1.0 + EWALD_P * grij); + erfc = t * (A1 + t * (A2 + t * (A3 + t * (A4 + t * A5)))) * expm2; + prefactor = qqrd2e * qtmp * q[j] / r; + force_coul = prefactor * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) force_coul -= (1.0 - factor_coul) * prefactor; + + prefactorE = q[j] / r; + efield_i = prefactorE * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) efield_i -= (1.0 - factor_coul) * prefactorE; + epot_i = efield_i; + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction * dftable[itable]; + force_coul = qtmp * q[j] * table; + efield_i = q[j] * table / qqrd2e; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction * dctable[itable]; + prefactor = qtmp * q[j] * table; + force_coul -= (1.0 - factor_coul) * prefactor; + + prefactorE = q[j] * table / qqrd2e; + efield_i -= (1.0 - factor_coul) * prefactorE; + } + epot_i = efield_i; + } + } else + epot_i = efield_i = force_coul = ecoul = 0.0; + + if (rsq < cut_ljsqi[typej]) { // lj + if (order6) { // long-range lj + if (!ndisptablebits || rsq <= tabinnerdispsq) { // series real space + double rn = r2inv * r2inv * r2inv; + double x2 = g2 * rsq, a2 = 1.0 / x2; + x2 = a2 * exp(-x2) * lj4i[typej]; + if (ni == 0) { + force_lj = (rn *= rn) * lj1i[typej] - + g8 * (((6.0 * a2 + 6.0) * a2 + 3.0) * a2 + 1.0) * x2 * rsq; + if (eflag) evdwl = rn * lj3i[typej] - g6 * ((a2 + 1.0) * a2 + 0.5) * x2; + } else { // special case + double f = special_lj[ni], t = rn * (1.0 - f); + force_lj = f * (rn *= rn) * lj1i[typej] - + g8 * (((6.0 * a2 + 6.0) * a2 + 3.0) * a2 + 1.0) * x2 * rsq + t * lj2i[typej]; + if (eflag) + evdwl = f * rn * lj3i[typej] - g6 * ((a2 + 1.0) * a2 + 0.5) * x2 + t * lj4i[typej]; + } + } else { // table real space + union_int_float_t disp_t; + disp_t.f = rsq; + const int disp_k = (disp_t.i & ndispmask) >> ndispshiftbits; + double f_disp = (rsq - rdisptable[disp_k]) * drdisptable[disp_k]; + double rn = r2inv * r2inv * r2inv; + if (ni == 0) { + force_lj = (rn *= rn) * lj1i[typej] - + (fdisptable[disp_k] + f_disp * dfdisptable[disp_k]) * lj4i[typej]; + if (eflag) + evdwl = rn * lj3i[typej] - + (edisptable[disp_k] + f_disp * dedisptable[disp_k]) * lj4i[typej]; + } else { // special case + double f = special_lj[ni], t = rn * (1.0 - f); + force_lj = f * (rn *= rn) * lj1i[typej] - + (fdisptable[disp_k] + f_disp * dfdisptable[disp_k]) * lj4i[typej] + + t * lj2i[typej]; + if (eflag) + evdwl = f * rn * lj3i[typej] - + (edisptable[disp_k] + f_disp * dedisptable[disp_k]) * lj4i[typej] + + t * lj4i[typej]; + } + } + } else { // cut lj + double rn = r2inv * r2inv * r2inv; + if (ni == 0) { + force_lj = rn * (rn * lj1i[typej] - lj2i[typej]); + if (eflag) evdwl = rn * (rn * lj3i[typej] - lj4i[typej]) - offseti[typej]; + } else { // special case + double f = special_lj[ni]; + force_lj = f * rn * (rn * lj1i[typej] - lj2i[typej]); + if (eflag) evdwl = f * (rn * (rn * lj3i[typej] - lj4i[typej]) - offseti[typej]); + } + } + } + + else + force_lj = evdwl = 0.0; + + fpair = (force_coul * etmp + force_lj) * r2inv; + f[i][0] += delx * fpair_i; + f[i][1] += dely * fpair_i; + f[i][2] += delz * fpair_i; + + efield_i *= (etmp * r2inv); + efield[i][0] += delx * efield_i; + efield[i][1] += dely * efield_i; + efield[i][2] += delz * efield_i; + + epot[i] += epot_i; + + if (newton_pair && j >= nlocal) { + + fpair_j = (force_coul * eps[j] + factor_lj * force_lj) * r2inv; + f[j][0] -= delx * fpair_j; + f[j][1] -= dely * fpair_j; + f[j][2] -= delz * fpair_j; + } + + if (eflag) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor * (etmp + eps[j]) * erfc; + else { + table = etable[itable] + fraction * detable[itable]; + ecoul = qtmp * q[j] * (etmp + eps[j]) * table; + } + ecoul *= 0.5; + if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor; + } else + ecoul = 0.0; + } + + if (evflag) ev_tally_full(i, evdwl, ecoul, fpair_i, delx, dely, delz); + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- */ + +double PairLJLongCoulLongDielectric::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, double &fforce) +{ + double r2inv, r6inv, force_coul, force_lj, ei, ej; + double g2 = g_ewald_6 * g_ewald_6, g6 = g2 * g2 * g2, g8 = g6 * g2, *q = atom->q; + double *eps = avec->epsilon; + + double eng = 0.0; + if (eps[i] == 1) + ei = 0; + else + ei = eps[i]; + if (eps[j] == 1) + ej = 0; + else + ej = eps[j]; + + r2inv = 1.0 / rsq; + if ((ewald_order & 2) && (rsq < cut_coulsq)) { // coulombic + if (!ncoultablebits || rsq <= tabinnersq) { // series real space + double r = sqrt(rsq), x = g_ewald * r; + double s = force->qqrd2e * q[i] * q[j], t = 1.0 / (1.0 + EWALD_P * x); + r = s * (1.0 - factor_coul) / r; + s *= g_ewald * exp(-x * x); + force_coul = (t *= ((((t * A5 + A4) * t + A3) * t + A2) * t + A1) * s / x) + EWALD_F * s - r; + eng += (t - r) * (ei + ej) * 0.5; + } else { // table real space + union_int_float_t t; + t.f = rsq; + const int k = (t.i & ncoulmask) >> ncoulshiftbits; + double f = (rsq - rtable[k]) * drtable[k], qiqj = q[i] * q[j]; + t.f = (1.0 - factor_coul) * (ctable[k] + f * dctable[k]); + force_coul = qiqj * (ftable[k] + f * dftable[k] - t.f); + eng += qiqj * (etable[k] + f * detable[k] - t.f) * (ei + ej) * 0.5; + } + } else + force_coul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { // lennard-jones + r6inv = r2inv * r2inv * r2inv; + if (ewald_order & 64) { // long-range + double x2 = g2 * rsq, a2 = 1.0 / x2, t = r6inv * (1.0 - factor_lj); + x2 = a2 * exp(-x2) * lj4[itype][jtype]; + force_lj = factor_lj * (r6inv *= r6inv) * lj1[itype][jtype] - + g8 * (((6.0 * a2 + 6.0) * a2 + 3.0) * a2 + a2) * x2 * rsq + t * lj2[itype][jtype]; + eng += factor_lj * r6inv * lj3[itype][jtype] - g6 * ((a2 + 1.0) * a2 + 0.5) * x2 + + t * lj4[itype][jtype]; + } else { // cut + force_lj = factor_lj * r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + eng += factor_lj * + (r6inv * (r6inv * lj3[itype][jtype] - lj4[itype][jtype]) - offset[itype][jtype]); + } + } else + force_lj = 0.0; + + fforce = (force_coul * eps[i] + force_lj) * r2inv; + return eng; +} diff --git a/src/USER-DIELECTRIC/pair_lj_long_coul_long_dielectric.h b/src/USER-DIELECTRIC/pair_lj_long_coul_long_dielectric.h new file mode 100644 index 0000000000..83ba66a9a0 --- /dev/null +++ b/src/USER-DIELECTRIC/pair_lj_long_coul_long_dielectric.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(lj/long/coul/long/dielectric,PairLJLongCoulLongDielectric); +// clang-format on +#else + +#ifndef LMP_PAIR_LJ_LONG_COUL_LONG_DIELECTRIC_H +#define LMP_PAIR_LJ_LONG_COUL_LONG_DIELECTRIC_H + +#include "pair_lj_long_coul_long.h" + +namespace LAMMPS_NS { + +class PairLJLongCoulLongDielectric : public PairLJLongCoulLong { + public: + PairLJLongCoulLongDielectric(class LAMMPS *); + virtual ~PairLJLongCoulLongDielectric(); + virtual void compute(int, int); + void init_style(); + double single(int, int, int, int, double, double, double, double &); + + double **efield; + double *epot; + + protected: + class AtomVecDielectric *avec; + int nmax; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/USER-DIELECTRIC/pppm_dielectric.cpp b/src/USER-DIELECTRIC/pppm_dielectric.cpp new file mode 100644 index 0000000000..7fdb0b76c4 --- /dev/null +++ b/src/USER-DIELECTRIC/pppm_dielectric.cpp @@ -0,0 +1,493 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pppm_dielectric.h" + +#include "atom.h" +#include "atom_vec_dielectric.h" +#include "comm.h" +#include "domain.h" +#include "error.h" +#include "fft3d_wrap.h" +#include "force.h" +#include "gridcomm.h" +#include "math_const.h" +#include "math_special.h" +#include "memory.h" +#include "neighbor.h" +#include "pair.h" +#include "remap_wrap.h" + +#include + +using namespace LAMMPS_NS; +using namespace MathConst; +using namespace MathSpecial; + +#define SMALL 0.00001 + +enum{REVERSE_RHO}; +enum{FORWARD_IK,FORWARD_AD,FORWARD_IK_PERATOM,FORWARD_AD_PERATOM}; + +#ifdef FFT_SINGLE +#define ZEROF 0.0f +#define ONEF 1.0f +#else +#define ZEROF 0.0 +#define ONEF 1.0 +#endif + +/* ---------------------------------------------------------------------- */ + +PPPMDielectric::PPPMDielectric(LAMMPS *lmp) : PPPM(lmp) +{ + group_group_enable = 0; + + efield = nullptr; + phi = nullptr; + potflag = 0; + + avec = (AtomVecDielectric *) atom->style_match("dielectric"); + if (!avec) error->all(FLERR,"pppm/dielectric requires atom style dielectric"); +} + +/* ---------------------------------------------------------------------- */ + +PPPMDielectric::~PPPMDielectric() +{ + memory->destroy(efield); + memory->destroy(phi); +} + +/* ---------------------------------------------------------------------- + compute the PPPMDielectric long-range force, energy, virial +------------------------------------------------------------------------- */ + +void PPPMDielectric::compute(int eflag, int vflag) +{ + int i,j; + + // set energy/virial flags + // invoke allocate_peratom() if needed for first time + + ev_init(eflag,vflag); + + if (evflag_atom && !peratom_allocate_flag) allocate_peratom(); + + // if atom count has changed, update qsum and qsqsum + + if (atom->natoms != natoms_original) { + qsum_qsq(); + natoms_original = atom->natoms; + } + + // return if there are no charges or dipoles + + if (qsqsum == 0.0) return; + + // convert atoms from box to lamda coords + + if (triclinic == 0) boxlo = domain->boxlo; + else { + boxlo = domain->boxlo_lamda; + domain->x2lamda(atom->nlocal); + } + + // extend size of per-atom arrays if necessary + + if (atom->nmax > nmax) { + memory->destroy(part2grid); + memory->destroy(efield); + memory->destroy(phi); + nmax = atom->nmax; + memory->create(part2grid,nmax,3,"pppm/dielectric:part2grid"); + memory->create(efield,nmax,3,"pppm/dielectric:efield"); + memory->create(phi,nmax,"pppm/dielectric:phi"); + } + + // find grid points for all my particles + // map my particle charge onto my local 3d density grid + + particle_map(); + make_rho(); + + // all procs communicate density values from their ghost cells + // to fully sum contribution in their 3d bricks + // remap from 3d decomposition to FFT decomposition + + gc->reverse_comm_kspace(this,1,sizeof(FFT_SCALAR),REVERSE_RHO, + gc_buf1,gc_buf2,MPI_FFT_SCALAR); + brick2fft(); + + // compute potential gradient on my FFT grid and + // portion of e_long on this proc's FFT grid + // return gradients (electric fields) in 3d brick decomposition + // also performs per-atom calculations via poisson_peratom() + + poisson(); + + // all procs communicate E-field values + // to fill ghost cells surrounding their 3d bricks + + if (differentiation_flag == 1) + gc->forward_comm_kspace(this,1,sizeof(FFT_SCALAR),FORWARD_AD, + gc_buf1,gc_buf2,MPI_FFT_SCALAR); + else + gc->forward_comm_kspace(this,3,sizeof(FFT_SCALAR),FORWARD_IK, + gc_buf1,gc_buf2,MPI_FFT_SCALAR); + + // extra per-atom energy/virial communication + + if (evflag_atom) { + if (differentiation_flag == 1 && vflag_atom) + gc->forward_comm_kspace(this,6,sizeof(FFT_SCALAR),FORWARD_AD_PERATOM, + gc_buf1,gc_buf2,MPI_FFT_SCALAR); + else if (differentiation_flag == 0) + gc->forward_comm_kspace(this,7,sizeof(FFT_SCALAR),FORWARD_IK_PERATOM, + gc_buf1,gc_buf2,MPI_FFT_SCALAR); + } + + // calculate the force on my particles + + fieldforce(); + + // extra per-atom energy/virial communication + + if (evflag_atom) fieldforce_peratom(); + + // sum global energy across procs and add in volume-dependent term + + const double qscale = qqrd2e * scale; + + if (eflag_global) { + double energy_all; + MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); + energy = energy_all; + + energy *= 0.5*volume; + energy -= g_ewald*qsqsum/MY_PIS + + MY_PI2*qsum*qsum / (g_ewald*g_ewald*volume); + energy *= qscale; + } + + // sum global virial across procs + + if (vflag_global) { + double virial_all[6]; + MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) virial[i] = 0.5*qscale*volume*virial_all[i]; + } + + // per-atom energy/virial + // energy includes self-energy correction + // ntotal accounts for TIP4P tallying eatom/vatom for ghost atoms + + if (evflag_atom) { + double *q = atom->q; + int nlocal = atom->nlocal; + int ntotal = nlocal; + if (tip4pflag) ntotal += atom->nghost; + + if (eflag_atom) { + for (i = 0; i < nlocal; i++) { + eatom[i] *= 0.5; + eatom[i] -= g_ewald*q[i]*q[i]/MY_PIS + MY_PI2*q[i]*qsum / + (g_ewald*g_ewald*volume); + eatom[i] *= qscale; + } + for (i = nlocal; i < ntotal; i++) eatom[i] *= 0.5*qscale; + } + + if (vflag_atom) { + for (i = 0; i < ntotal; i++) + for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*qscale; + } + } + + // 2d slab correction + + if (slabflag == 1) slabcorr(); + + // convert atoms back from lamda to box coords + + if (triclinic) domain->lamda2x(atom->nlocal); +} + +/* ---------------------------------------------------------------------- + interpolate from grid to get electric field & force on my particles for ik +------------------------------------------------------------------------- */ + +void PPPMDielectric::fieldforce_ik() +{ + int i,l,m,n,nx,ny,nz,mx,my,mz; + FFT_SCALAR dx,dy,dz,x0,y0,z0; + FFT_SCALAR ekx,eky,ekz,u; + + // loop over my charges, interpolate electric field from nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + // ek = 3 components of E-field on particle + + double *q = atom->q; + double **x = atom->x; + double **f = atom->f; + double *eps = atom->epsilon; + int nlocal = atom->nlocal; + + for (i = 0; i < nlocal; i++) { + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; + dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; + dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; + + compute_rho1d(dx,dy,dz); + + u = ekx = eky = ekz = ZEROF; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + z0 = rho1d[2][n]; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + y0 = z0*rho1d[1][m]; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + x0 = y0*rho1d[0][l]; + if (potflag) u += x0*u_brick[mz][my][mx]; + ekx -= x0*vdx_brick[mz][my][mx]; + eky -= x0*vdy_brick[mz][my][mx]; + ekz -= x0*vdz_brick[mz][my][mx]; + } + } + } + + // electrostatic potential + + if (potflag) phi[i] = u; + + // convert E-field to force + const double efactor = scale * eps[i]; + efield[i][0] = efactor*ekx; + efield[i][1] = efactor*eky; + efield[i][2] = efactor*ekz; + + const double qfactor = qqrd2e * efactor * q[i]; + f[i][0] += qfactor*ekx; + f[i][1] += qfactor*eky; + if (slabflag != 2) f[i][2] += qfactor*ekz; + } +} + +/* ---------------------------------------------------------------------- + interpolate from grid to get electric field & force on my particles for ad +------------------------------------------------------------------------- */ + +void PPPMDielectric::fieldforce_ad() +{ + int i,l,m,n,nx,ny,nz,mx,my,mz; + FFT_SCALAR dx,dy,dz; + FFT_SCALAR ekx,eky,ekz,u; + + double s1,s2,s3; + double sf = 0.0; + double *prd; + + prd = domain->prd; + double xprd = prd[0]; + double yprd = prd[1]; + double zprd = prd[2]; + + double hx_inv = nx_pppm/xprd; + double hy_inv = ny_pppm/yprd; + double hz_inv = nz_pppm/zprd; + + // loop over my charges, interpolate electric field from nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + // ek = 3 components of E-field on particle + + double *q = atom->q; + double **x = atom->x; + double **f = atom->f; + double *eps = atom->epsilon; + int nlocal = atom->nlocal; + + for (i = 0; i < nlocal; i++) { + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; + dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; + dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; + + compute_rho1d(dx,dy,dz); + compute_drho1d(dx,dy,dz); + + u = ekx = eky = ekz = ZEROF; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + u += rho1d[0][l]*rho1d[1][m]*rho1d[2][n]*u_brick[mz][my][mx]; + ekx += drho1d[0][l]*rho1d[1][m]*rho1d[2][n]*u_brick[mz][my][mx]; + eky += rho1d[0][l]*drho1d[1][m]*rho1d[2][n]*u_brick[mz][my][mx]; + ekz += rho1d[0][l]*rho1d[1][m]*drho1d[2][n]*u_brick[mz][my][mx]; + } + } + } + ekx *= hx_inv; + eky *= hy_inv; + ekz *= hz_inv; + + // electrical potential + + if (potflag) phi[i] = u; + + // convert E-field to force and substract self forces + + const double qfactor = qqrd2e * scale; + double qtmp = eps[i]*q[i]; + + s1 = x[i][0]*hx_inv; + s2 = x[i][1]*hy_inv; + s3 = x[i][2]*hz_inv; + sf = sf_coeff[0]*sin(2*MY_PI*s1); + sf += sf_coeff[1]*sin(4*MY_PI*s1); + sf *= 2*qtmp*qtmp; + f[i][0] += qfactor*(ekx*qtmp - sf); + if (qtmp != 0) efield[i][0] = qfactor*(ekx - sf/qtmp); + else efield[i][0] = qfactor*ekx; + + sf = sf_coeff[2]*sin(2*MY_PI*s2); + sf += sf_coeff[3]*sin(4*MY_PI*s2); + sf *= 2*qtmp*qtmp; + f[i][1] += qfactor*(eky*qtmp - sf); + if (qtmp != 0) efield[i][1] = qfactor*(eky - sf/qtmp); + else efield[i][1] = qfactor*eky; + + sf = sf_coeff[4]*sin(2*MY_PI*s3); + sf += sf_coeff[5]*sin(4*MY_PI*s3); + sf *= 2*qtmp*qtmp; + if (slabflag != 2) { + f[i][2] += qfactor*(ekz*qtmp - sf); + if (qtmp != 0) efield[i][2] = qfactor*(ekz - sf/qtmp); + else efield[i][2] = qfactor*ekz; + } + + } +} + +/* ---------------------------------------------------------------------- + Slab-geometry correction term to dampen inter-slab interactions between + periodically repeating slabs. Yields good approximation to 2D Ewald if + adequate empty space is left between repeating slabs (J. Chem. Phys. + 111, 3155). Slabs defined here to be parallel to the xy plane. Also + extended to non-neutral systems (J. Chem. Phys. 131, 094107). +------------------------------------------------------------------------- */ + +void PPPMDielectric::slabcorr() +{ + // compute local contribution to global dipole moment + + double *q = atom->q; + double **x = atom->x; + double *eps = atom->epsilon; + + double zprd = domain->zprd; + int nlocal = atom->nlocal; + + double dipole = 0.0; + for (int i = 0; i < nlocal; i++) dipole += q[i]*x[i][2]; + + // sum local contributions to get global dipole moment + + double dipole_all; + MPI_Allreduce(&dipole,&dipole_all,1,MPI_DOUBLE,MPI_SUM,world); + + // need to make non-neutral systems and/or + // per-atom energy translationally invariant + + double dipole_r2 = 0.0; + if (eflag_atom || fabs(qsum) > SMALL) { + + for (int i = 0; i < nlocal; i++) + dipole_r2 += q[i]*x[i][2]*x[i][2]; + + // sum local contributions + + double tmp; + MPI_Allreduce(&dipole_r2,&tmp,1,MPI_DOUBLE,MPI_SUM,world); + dipole_r2 = tmp; + } + + // compute corrections + + const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - + qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; + const double qscale = qqrd2e * scale; + + if (eflag_global) energy += qscale * e_slabcorr; + + // per-atom energy + + if (eflag_atom) { + double efact = qscale * MY_2PI/volume; + for (int i = 0; i < nlocal; i++) + eatom[i] += efact * eps[i]*q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + + qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); + } + + // add on force corrections + + double ffact = qscale * (-4.0*MY_PI/volume); + double **f = atom->f; + + for (int i = 0; i < nlocal; i++) { + f[i][2] += ffact * eps[i]*q[i]*(dipole_all - qsum*x[i][2]); + efield[i][2] += ffact * eps[i]*(dipole_all - qsum*x[i][2]); + } +} + +/* ---------------------------------------------------------------------- + compute qsum,qsqsum,q2 and give error/warning if not charge neutral + called initially, when particle count changes, when charges are changed +------------------------------------------------------------------------- */ + +void PPPMDielectric::qsum_qsq() +{ + const double * const q = atom->q; + const double * const eps = atom->epsilon; + const int nlocal = atom->nlocal; + double qsum_local(0.0), qsqsum_local(0.0); + + for (int i = 0; i < nlocal; i++) { + double qtmp = eps[i]*q[i]; + qsum_local += qtmp; + qsqsum_local += qtmp*qtmp; + } + + MPI_Allreduce(&qsum_local,&qsum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&qsqsum_local,&qsqsum,1,MPI_DOUBLE,MPI_SUM,world); + + q2 = qsqsum * force->qqrd2e; +} diff --git a/src/USER-DIELECTRIC/pppm_dielectric.h b/src/USER-DIELECTRIC/pppm_dielectric.h new file mode 100644 index 0000000000..7ea6a831eb --- /dev/null +++ b/src/USER-DIELECTRIC/pppm_dielectric.h @@ -0,0 +1,61 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef KSPACE_CLASS +// clang-format off +KSpaceStyle(pppm/dielectric,PPPMDielectric); +// clang-format on +#else + +#ifndef LMP_PPPM_DIELECTRIC_H +#define LMP_PPPM_DIELECTRIC_H + +#include "pppm.h" + +namespace LAMMPS_NS { + +class PPPMDielectric : public PPPM { + public: + PPPMDielectric(class LAMMPS *); + virtual ~PPPMDielectric(); + virtual void compute(int, int); + + double **efield; + double *phi; + int potflag; // 1/0 if per-atom electrostatic potential phi is needed + + void qsum_qsq(); + + protected: + void slabcorr(); + + void fieldforce_ik(); + void fieldforce_ad(); + + class AtomVecDielectric *avec; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/USER-DIFFRACTION/README b/src/USER-DIFFRACTION/README index 2f146c4c94..fb36011960 100644 --- a/src/USER-DIFFRACTION/README +++ b/src/USER-DIFFRACTION/README @@ -49,7 +49,7 @@ examples/USER/diffraction. AUTHOR INFORMATION: The person who created this package is Shawn P. Coleman -(shawn.p.coleman8.ctr at mail.mil) while at the University of +(scolema3 at gmail.com) while at the University of Arkansas. Contact him directly if you have questions. Co-Author: Douglas Spearot (University of Arkansas) diff --git a/src/USER-MDI/fix_mdi_engine.cpp b/src/USER-MDI/fix_mdi_engine.cpp index 0eec1740d3..db9e114488 100644 --- a/src/USER-MDI/fix_mdi_engine.cpp +++ b/src/USER-MDI/fix_mdi_engine.cpp @@ -43,7 +43,7 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixMDIEngine::FixMDIEngine(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), id_pe(nullptr), pe(nullptr), id_ke(nullptr), ke(nullptr) + Fix(lmp, narg, arg), id_pe(nullptr), id_ke(nullptr), pe(nullptr), ke(nullptr) { if (narg != 3) error->all(FLERR, "Illegal fix mdi command"); @@ -167,7 +167,7 @@ void FixMDIEngine::init() /* ---------------------------------------------------------------------- */ -void FixMDIEngine::min_setup(int vflag) +void FixMDIEngine::min_setup(int /* vflag */) { engine_mode("@FORCES"); } @@ -181,21 +181,21 @@ void FixMDIEngine::post_integrate() /* ---------------------------------------------------------------------- */ -void FixMDIEngine::min_pre_force(int vflag) +void FixMDIEngine::min_pre_force(int /* vflag */) { engine_mode("@COORDS"); } /* ---------------------------------------------------------------------- */ -void FixMDIEngine::min_post_force(int vflag) +void FixMDIEngine::min_post_force(int /* vflag */) { engine_mode("@FORCES"); } /* ---------------------------------------------------------------------- */ -void FixMDIEngine::post_force(int vflag) +void FixMDIEngine::post_force(int /* vflag */) { if (most_recent_init == 1) engine_mode("@FORCES"); @@ -228,9 +228,14 @@ int FixMDIEngine::execute_command(const char *command, MDI_Comm mdicomm) // respond to any driver command if (strcmp(command, ">NATOMS") == 0) { - ierr = MDI_Recv((char *) &atom->natoms, 1, MDI_INT, mdicomm); + int64_t mdi_natoms = 0; + ierr = MDI_Recv((char *) &mdi_natoms, 1, MDI_INT64_T, mdicomm); if (ierr != 0) error->all(FLERR, "MDI: Unable to receive number of atoms from driver"); - MPI_Bcast(&atom->natoms, 1, MPI_INT, 0, world); + error->all(FLERR, "MDI: '>NATOMS' driver command not (yet) supported"); + // FIXME: to import the number of atoms, more steps than below are needed for LAMMPS. + // also a check for overflow is needed in case natoms is 32-bit + atom->natoms = mdi_natoms; + MPI_Bcast(&atom->natoms, 1, MPI_LMP_BIGINT, 0, world); } else if (strcmp(command, "natoms; @@ -444,7 +449,6 @@ void FixMDIEngine::receive_coordinates(Error *error) // pick local atoms from the buffer double **x = atom->x; - int *mask = atom->mask; int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) { x[i][0] = buffer[3 * (atom->tag[i] - 1) + 0] * posconv; @@ -500,7 +504,6 @@ void FixMDIEngine::send_coordinates(Error *error) // copy local atoms into buffer at correct locations double **x = atom->x; - int *mask = atom->mask; int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) { coords[3 * (atom->tag[i] - 1) + 0] = x[i][0] / posconv; @@ -534,7 +537,6 @@ void FixMDIEngine::send_charges(Error *error) // pick local atoms from the buffer double *charge = atom->q; - int *mask = atom->mask; int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) { charges[atom->tag[i] - 1] = charge[i]; } @@ -723,7 +725,6 @@ void FixMDIEngine::send_forces(Error *error) double *forces_reduced; double *x_buf; - int *mask = atom->mask; int nlocal = atom->nlocal; int64_t ncoords = 3 * atom->natoms; @@ -818,7 +819,6 @@ void FixMDIEngine::receive_forces(Error *error, int mode) // pick local atoms from the buffer double **f = atom->f; - int *mask = atom->mask; int nlocal = atom->nlocal; if (mode == 0) { // Replace diff --git a/src/USER-OMP/pair_lj_cut_coul_cut_dielectric_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_cut_dielectric_omp.cpp new file mode 100644 index 0000000000..22ae388236 --- /dev/null +++ b/src/USER-OMP/pair_lj_cut_coul_cut_dielectric_omp.cpp @@ -0,0 +1,234 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_lj_cut_coul_cut_dielectric_omp.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "math_const.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" + +#include + +#include "omp_compat.h" +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EPSILON 1e-6 + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulCutDielectricOMP::PairLJCutCoulCutDielectricOMP(LAMMPS *lmp) : + PairLJCutCoulCutDielectric(lmp), ThrOMP(lmp, THR_PAIR) +{ +} + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulCutDielectricOMP::~PairLJCutCoulCutDielectricOMP() {} + +/* ---------------------------------------------------------------------- */ + +void PairLJCutCoulCutDielectricOMP::compute(int eflag, int vflag) +{ + ev_init(eflag, vflag); + + if (atom->nmax > nmax) { + memory->destroy(efield); + memory->destroy(epot); + nmax = atom->nmax; + memory->create(efield, nmax, 3, "pair:efield"); + memory->create(epot, nmax, "pair:epot"); + } + + const int nall = atom->nlocal + atom->nghost; + const int nthreads = comm->nthreads; + const int inum = list->inum; + +#if defined(_OPENMP) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag, vflag) +#endif + { + int ifrom, ito, tid; + + loop_setup_thr(ifrom, ito, tid, inum, nthreads); + ThrData *thr = fix->get_thr(tid); + thr->timer(Timer::START); + ev_setup_thr(eflag, vflag, nall, eatom, vatom, nullptr, thr); + + if (evflag) { + if (eflag) { + if (force->newton_pair) + eval<1, 1, 1>(ifrom, ito, thr); + else + eval<1, 1, 0>(ifrom, ito, thr); + } else { + if (force->newton_pair) + eval<1, 0, 1>(ifrom, ito, thr); + else + eval<1, 0, 0>(ifrom, ito, thr); + } + } else { + if (force->newton_pair) + eval<0, 0, 1>(ifrom, ito, thr); + else + eval<0, 0, 0>(ifrom, ito, thr); + } + + thr->timer(Timer::PAIR); + reduce_thr(this, eflag, vflag, thr); + } // end of omp parallel region +} + +/* ---------------------------------------------------------------------- */ + +template +void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const thr) +{ + int i, j, ii, jj, jnum, itype, jtype, itable; + double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul, fpair; + double fpair_i, fpair_j; + double r, rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj; + double grij, expm2, prefactor, t, erfc, prefactorE, efield_i, epot_i; + int *ilist, *jlist, *numneigh, **firstneigh; + + evdwl = ecoul = 0.0; + + const dbl3_t *_noalias const x = (dbl3_t *) atom->x[0]; + dbl3_t *_noalias const f = (dbl3_t *) thr->get_f()[0]; + const double *_noalias const q = atom->q; + const double *_noalias const eps = atom->epsilon; + const dbl3_t *_noalias const norm = (dbl3_t *) atom->mu[0]; + const double *_noalias const curvature = atom->curvature; + const double *_noalias const area = atom->area; + const int *_noalias const type = atom->type; + const int nlocal = atom->nlocal; + const double *_noalias const special_coul = force->special_coul; + const double *_noalias const special_lj = force->special_lj; + const double qqrd2e = force->qqrd2e; + double fxtmp, fytmp, fztmp, extmp, eytmp, eztmp; + + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = iifrom; ii < iito; ++ii) { + + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i].x; + ytmp = x[i].y; + ztmp = x[i].z; + etmp = eps[i]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + fxtmp = fytmp = fztmp = 0.0; + extmp = eytmp = eztmp = 0.0; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; + efield[i][0] = sf * norm[i].x; + efield[i][1] = sf * norm[i].y; + efield[i][2] = sf * norm[i].z; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + epot[i] = 0; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j].x; + dely = ytmp - x[j].y; + delz = ztmp - x[j].z; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0 / rsq; + + if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) { + efield_i = q[j] * sqrt(r2inv); + forcecoul = qqrd2e * qtmp * efield_i; + epot_i = efield_i; + } else + epot_i = efield_i = forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + } else + forcelj = 0.0; + + fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv; + + fxtmp += delx * fpair_i; + fytmp += dely * fpair_i; + fztmp += delz * fpair_i; + + efield_i *= (factor_coul * etmp * r2inv); + extmp += delx * efield_i; + eytmp += dely * efield_i; + eztmp += delz * efield_i; + epot[i] += epot_i; + + if (NEWTON_PAIR || j >= nlocal) { + fpair_j = (factor_coul * eps[j] * forcecoul + factor_lj * forcelj) * r2inv; + f[j].x -= delx * fpair_j; + f[j].y -= dely * fpair_j; + f[j].z -= delz * fpair_j; + } + + if (EFLAG) { + if (rsq < cut_coulsq[itype][jtype]) { + ecoul = factor_coul * qqrd2e * qtmp * q[j] * (etmp + eps[j]) * sqrt(r2inv); + } else + ecoul = 0.0; + ecoul *= 0.5; + if (rsq < cut_ljsq[itype][jtype]) { + evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + evdwl *= factor_lj; + } else + evdwl = 0.0; + } + + if (EVFLAG) + ev_tally_thr(this, i, j, nlocal, NEWTON_PAIR, evdwl, ecoul, fpair, delx, dely, delz, thr); + } + } + f[i].x += fxtmp; + f[i].y += fytmp; + f[i].z += fztmp; + efield[i][0] += extmp; + efield[i][1] += eytmp; + efield[i][2] += eztmp; + } +} diff --git a/src/USER-OMP/pair_lj_cut_coul_cut_dielectric_omp.h b/src/USER-OMP/pair_lj_cut_coul_cut_dielectric_omp.h new file mode 100644 index 0000000000..f13313b511 --- /dev/null +++ b/src/USER-OMP/pair_lj_cut_coul_cut_dielectric_omp.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(lj/cut/coul/cut/dielectric/omp,PairLJCutCoulCutDielectricOMP); +// clang-format on +#else + +#ifndef LMP_PAIR_LJ_CUT_COUL_CUT_DIELECTRIC_OMP_H +#define LMP_PAIR_LJ_CUT_COUL_CUT_DIELECTRIC_OMP_H + +#include "pair_lj_cut_coul_cut_dielectric.h" +#include "thr_omp.h" + +namespace LAMMPS_NS { + +class PairLJCutCoulCutDielectricOMP : public PairLJCutCoulCutDielectric, public ThrOMP { + public: + PairLJCutCoulCutDielectricOMP(class LAMMPS *); + virtual ~PairLJCutCoulCutDielectricOMP(); + virtual void compute(int, int); + + protected: + template + void eval(int ifrom, int ito, ThrData * const thr); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/cut/coul/cut/dielectric requires atom attribute q + +The atom style defined does not have this attribute. + +*/ diff --git a/src/USER-OMP/pair_lj_cut_coul_long_dielectric_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_long_dielectric_omp.cpp new file mode 100644 index 0000000000..6aa79e18a5 --- /dev/null +++ b/src/USER-OMP/pair_lj_cut_coul_long_dielectric_omp.cpp @@ -0,0 +1,273 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Trung Nguyen (Northwestern) +------------------------------------------------------------------------- */ + +#include "pair_lj_cut_coul_long_dielectric_omp.h" + +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "math_const.h" +#include "memory.h" +#include "neigh_list.h" + +#include + +#include "omp_compat.h" +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulLongDielectricOMP::PairLJCutCoulLongDielectricOMP(LAMMPS *lmp) : + PairLJCutCoulLongDielectric(lmp), ThrOMP(lmp, THR_PAIR) +{ +} + +/* ---------------------------------------------------------------------- */ + +PairLJCutCoulLongDielectricOMP::~PairLJCutCoulLongDielectricOMP() {} + +/* ---------------------------------------------------------------------- */ + +void PairLJCutCoulLongDielectricOMP::compute(int eflag, int vflag) +{ + ev_init(eflag, vflag); + + if (atom->nmax > nmax) { + memory->destroy(efield); + memory->destroy(epot); + nmax = atom->nmax; + memory->create(efield, nmax, 3, "pair:efield"); + memory->create(epot, nmax, "pair:epot"); + } + + const int nall = atom->nlocal + atom->nghost; + const int nthreads = comm->nthreads; + const int inum = list->inum; + +#if defined(_OPENMP) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag, vflag) +#endif + { + int ifrom, ito, tid; + + loop_setup_thr(ifrom, ito, tid, inum, nthreads); + ThrData *thr = fix->get_thr(tid); + thr->timer(Timer::START); + ev_setup_thr(eflag, vflag, nall, eatom, vatom, nullptr, thr); + + if (evflag) { + if (eflag) { + if (force->newton_pair) + eval<1, 1, 1>(ifrom, ito, thr); + else + eval<1, 1, 0>(ifrom, ito, thr); + } else { + if (force->newton_pair) + eval<1, 0, 1>(ifrom, ito, thr); + else + eval<1, 0, 0>(ifrom, ito, thr); + } + } else { + if (force->newton_pair) + eval<0, 0, 1>(ifrom, ito, thr); + else + eval<0, 0, 0>(ifrom, ito, thr); + } + + thr->timer(Timer::PAIR); + reduce_thr(this, eflag, vflag, thr); + } // end of omp parallel region +} + +/* ---------------------------------------------------------------------- */ + +template +void PairLJCutCoulLongDielectricOMP::eval(int iifrom, int iito, ThrData *const thr) +{ + int i, j, ii, jj, jnum, itype, jtype, itable; + double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul, fpair; + double fraction, table; + double r, rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj; + double grij, expm2, prefactor, t, erfc, prefactorE, efield_i, epot_i; + int *ilist, *jlist, *numneigh, **firstneigh; + + evdwl = ecoul = 0.0; + + const dbl3_t *_noalias const x = (dbl3_t *) atom->x[0]; + dbl3_t *_noalias const f = (dbl3_t *) thr->get_f()[0]; + const double *_noalias const q = atom->q; + const double *_noalias const eps = atom->epsilon; + const dbl3_t *_noalias const norm = (dbl3_t *) atom->mu[0]; + const double *_noalias const curvature = atom->curvature; + const double *_noalias const area = atom->area; + const int *_noalias const type = atom->type; + const int nlocal = atom->nlocal; + const double *_noalias const special_coul = force->special_coul; + const double *_noalias const special_lj = force->special_lj; + const double qqrd2e = force->qqrd2e; + double fxtmp, fytmp, fztmp, extmp, eytmp, eztmp; + + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = iifrom; ii < iito; ++ii) { + + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i].x; + ytmp = x[i].y; + ztmp = x[i].z; + etmp = eps[i]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + fxtmp = fytmp = fztmp = 0.0; + extmp = eytmp = eztmp = 0.0; + + // self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al. + + double curvature_threshold = sqrt(area[i]); + if (curvature[i] < curvature_threshold) { + double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i]; + efield[i][0] = sf * norm[i].x; + efield[i][1] = sf * norm[i].y; + efield[i][2] = sf * norm[i].z; + } else { + efield[i][0] = efield[i][1] = efield[i][2] = 0; + } + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j].x; + dely = ytmp - x[j].y; + delz = ztmp - x[j].z; + rsq = delx * delx + dely * dely + delz * delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0 / rsq; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij * grij); + t = 1.0 / (1.0 + EWALD_P * grij); + erfc = t * (A1 + t * (A2 + t * (A3 + t * (A4 + t * A5)))) * expm2; + prefactor = qqrd2e * qtmp * q[j] / r; + forcecoul = prefactor * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) forcecoul -= (1.0 - factor_coul) * prefactor; + + prefactorE = q[j] / r; + efield_i = prefactorE * (erfc + EWALD_F * grij * expm2); + if (factor_coul < 1.0) efield_i -= (1.0 - factor_coul) * prefactorE; + epot_i = efield_i; + + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction * dftable[itable]; + forcecoul = qtmp * q[j] * table; + efield_i = q[j] * table / qqrd2e; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction * dctable[itable]; + prefactor = qtmp * q[j] * table; + forcecoul -= (1.0 - factor_coul) * prefactor; + + prefactorE = q[j] * table / qqrd2e; + efield_i -= (1.0 - factor_coul) * prefactorE; + } + epot_i = efield_i; + } + } else + epot_i = efield_i = forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r6inv = r2inv * r2inv * r2inv; + forcelj = r6inv * (lj1[itype][jtype] * r6inv - lj2[itype][jtype]); + forcelj *= factor_lj; + } else + forcelj = 0.0; + + fpair = (forcecoul + forcelj) * r2inv; + + fxtmp += delx * fpair; + fytmp += dely * fpair; + fztmp += delz * fpair; + + efield_i *= (etmp * r2inv); + extmp += delx * efield_i; + eytmp += dely * efield_i; + eztmp += delz * efield_i; + epot[i] += epot_i; + + if (NEWTON_PAIR || j < nlocal) { + f[j].x -= delx * fpair; + f[j].y -= dely * fpair; + f[j].z -= delz * fpair; + } + + if (EFLAG) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor * (etmp + eps[j]) * erfc; + else { + table = etable[itable] + fraction * detable[itable]; + ecoul = qtmp * q[j] * (etmp + eps[j]) * table; + } + if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor; + } else + ecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype]; + evdwl *= factor_lj; + } else + evdwl = 0.0; + } + + if (EVFLAG) + ev_tally_thr(this, i, j, nlocal, NEWTON_PAIR, evdwl, ecoul, fpair, delx, dely, delz, thr); + } + } + f[i].x += fxtmp; + f[i].y += fytmp; + f[i].z += fztmp; + efield[i][0] += extmp; + efield[i][1] += eytmp; + efield[i][2] += eztmp; + } +} diff --git a/src/USER-OMP/pair_lj_cut_coul_long_dielectric_omp.h b/src/USER-OMP/pair_lj_cut_coul_long_dielectric_omp.h new file mode 100644 index 0000000000..ab4c6ebdae --- /dev/null +++ b/src/USER-OMP/pair_lj_cut_coul_long_dielectric_omp.h @@ -0,0 +1,70 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(lj/cut/coul/long/dielectric/omp,PairLJCutCoulLongDielectricOMP); +// clang-format on +#else + +#ifndef LMP_PAIR_LJ_CUT_COUL_LONG_DIELECTRIC_OMP_H +#define LMP_PAIR_LJ_CUT_COUL_LONG_DIELECTRIC_OMP_H + +#include "pair_lj_cut_coul_long_dielectric.h" +#include "thr_omp.h" + +namespace LAMMPS_NS { + +class PairLJCutCoulLongDielectricOMP : public PairLJCutCoulLongDielectric, public ThrOMP { + + public: + PairLJCutCoulLongDielectricOMP(class LAMMPS *); + virtual ~PairLJCutCoulLongDielectricOMP(); + virtual void compute(int, int); + + protected: + template + void eval(int ifrom, int ito, ThrData * const thr); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/cut/coul/long/dielectric requires atom attribute q + +The atom style defined does not have this attribute. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +E: Pair cutoff < Respa interior cutoff + +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. + +*/ diff --git a/src/atom.cpp b/src/atom.cpp index 219beee01c..0a8095116b 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -199,6 +199,10 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) rho = drho = esph = desph = cv = nullptr; vest = nullptr; + // USER-DIELECTRIC package + + area = ed = em = epsilon = curvature = q_unscaled = nullptr; + // end of customization section // -------------------------------------------------------------------- @@ -511,6 +515,15 @@ void Atom::peratom_create() add_peratom("eff_plastic_strain_rate",&eff_plastic_strain_rate,DOUBLE,0); add_peratom("damage",&damage,DOUBLE,0); + // USER-DIELECTRIC package + + add_peratom("area",&area,DOUBLE,0); + add_peratom("ed",&ed,DOUBLE,0); + add_peratom("em",&em,DOUBLE,0); + add_peratom("epsilon",&epsilon,DOUBLE,0); + add_peratom("curvature",&curvature,DOUBLE,0); + add_peratom("q_unscaled",&q_unscaled,DOUBLE,0); + // end of customization section // -------------------------------------------------------------------- } @@ -2650,6 +2663,14 @@ void *Atom::extract(const char *name) if (strcmp(name,"dpdTheta") == 0) return (void *) dpdTheta; if (strcmp(name,"edpd_temp") == 0) return (void *) edpd_temp; + // USER-DIELECTRIC + if (strcmp(name,"area") == 0) return (void *) area; + if (strcmp(name,"ed") == 0) return (void *) ed; + if (strcmp(name,"em") == 0) return (void *) em; + if (strcmp(name,"epsilon") == 0) return (void *) epsilon; + if (strcmp(name,"curvature") == 0) return (void *) curvature; + if (strcmp(name,"q_unscaled") == 0) return (void *) q_unscaled; + // end of customization section // -------------------------------------------------------------------- @@ -2733,6 +2754,14 @@ int Atom::extract_datatype(const char *name) if (strcmp(name,"dpdTheta") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"edpd_temp") == 0) return LAMMPS_DOUBLE; + // USER-DIELECTRIC + if (strcmp(name,"area") == 0) return LAMMPS_DOUBLE; + if (strcmp(name,"ed") == 0) return LAMMPS_DOUBLE; + if (strcmp(name,"em") == 0) return LAMMPS_DOUBLE; + if (strcmp(name,"epsilon") == 0) return LAMMPS_DOUBLE; + if (strcmp(name,"curvature") == 0) return LAMMPS_DOUBLE; + if (strcmp(name,"q_unscaled") == 0) return LAMMPS_DOUBLE; + // end of customization section // -------------------------------------------------------------------- diff --git a/src/atom.h b/src/atom.h index 2fbd12b38e..392e5c5d5c 100644 --- a/src/atom.h +++ b/src/atom.h @@ -157,6 +157,10 @@ class Atom : protected Pointers { double *rho, *drho, *esph, *desph, *cv; double **vest; + // USER-DIELECTRIC package + + double *area,*ed,*em,*epsilon,*curvature,*q_unscaled; + // end of customization section // -------------------------------------------------------------------- diff --git a/src/balance.cpp b/src/balance.cpp index 03ee4a8195..af142f404d 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -458,7 +458,7 @@ void Balance::options(int iarg, int narg, char **arg) nopt = imb->options(narg-iarg,arg+iarg+2); imbalances[nimbalance++] = imb; } else { - error->all(FLERR,"Unknown (fix) balance weight method"); + error->all(FLERR,"Unknown (fix) balance weight method: {}", arg[iarg+1]); } iarg += 2+nopt; diff --git a/src/fix_wall.cpp b/src/fix_wall.cpp index 8f5c0dabe8..bec669ff10 100644 --- a/src/fix_wall.cpp +++ b/src/fix_wall.cpp @@ -307,8 +307,10 @@ void FixWall::post_force(int vflag) v_init(vflag); - // energy intialize + // energy intialize. + // eflag is used to track whether wall energies have been communitcated. + eflag = 0; for (int m = 0; m <= nwall; m++) ewall[m] = 0.0; // coord = current position of wall diff --git a/src/imbalance_group.cpp b/src/imbalance_group.cpp index f4c883ff4c..e674338e76 100644 --- a/src/imbalance_group.cpp +++ b/src/imbalance_group.cpp @@ -48,7 +48,7 @@ int ImbalanceGroup::options(int narg, char **arg) for (int i = 0; i < num; ++i) { id[i] = group->find(arg[2*i+1]); if (id[i] < 0) - error->all(FLERR,"Unknown group in balance weight command"); + error->all(FLERR,"Unknown group in balance weight command: {}", arg[2*i+1]); factor[i] = utils::numeric(FLERR,arg[2*i+2],false,lmp); if (factor[i] <= 0.0) error->all(FLERR,"Illegal balance weight command"); } diff --git a/src/info.cpp b/src/info.cpp index 12546b6be9..049bdd5bfd 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -814,13 +814,13 @@ bool Info::is_active(const char *category, const char *name) return (lmp->kokkos && lmp->kokkos->kokkos_exists) ? true : false; } else if (strcmp(name,"omp") == 0) { return (modify->find_fix("package_omp") >= 0) ? true : false; - } else error->all(FLERR,"Unknown name for info package category"); + } else error->all(FLERR,"Unknown name for info package category: {}", name); } else if (strcmp(category,"newton") == 0) { if (strcmp(name,"pair") == 0) return (force->newton_pair != 0); else if (strcmp(name,"bond") == 0) return (force->newton_bond != 0); else if (strcmp(name,"any") == 0) return (force->newton != 0); - else error->all(FLERR,"Unknown name for info newton category"); + else error->all(FLERR,"Unknown name for info newton category: {}", name); } else if (strcmp(category,"pair") == 0) { if (force->pair == nullptr) return false; @@ -829,7 +829,7 @@ bool Info::is_active(const char *category, const char *name) else if (strcmp(name,"manybody") == 0) return (force->pair->manybody_flag != 0); else if (strcmp(name,"tail") == 0) return (force->pair->tail_flag != 0); else if (strcmp(name,"shift") == 0) return (force->pair->offset_flag != 0); - else error->all(FLERR,"Unknown name for info pair category"); + else error->all(FLERR,"Unknown name for info pair category: {}", name); } else if (strcmp(category,"comm_style") == 0) { style = commstyles[comm->style]; @@ -851,7 +851,7 @@ bool Info::is_active(const char *category, const char *name) style = force->improper_style; } else if (strcmp(category,"kspace_style") == 0) { style = force->kspace_style; - } else error->all(FLERR,"Unknown category for info is_active()"); + } else error->all(FLERR,"Unknown category for info is_active(): {}", category); int match = 0; if (strcmp(style,name) == 0) match = 1; @@ -893,7 +893,7 @@ bool Info::is_available(const char *category, const char *name) } else if (strcmp(name,"exceptions") == 0) { return has_exceptions(); } - } else error->all(FLERR,"Unknown category for info is_available()"); + } else error->all(FLERR,"Unknown category for info is_available(): {}", category); return false; } @@ -952,7 +952,7 @@ bool Info::is_defined(const char *category, const char *name) if (strcmp(names[i],name) == 0) return true; } - } else error->all(FLERR,"Unknown category for info is_defined()"); + } else error->all(FLERR,"Unknown category for info is_defined(): {}", category); return false; } diff --git a/src/lammps.cpp b/src/lammps.cpp index a218b9e08a..131d2e66f6 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -55,6 +55,10 @@ #include #include +#if !defined(_WIN32) +#include // for isatty() +#endif + #include "lmpinstalledpkgs.h" #include "lmpgitversion.h" @@ -1114,12 +1118,24 @@ void _noopt LAMMPS::help() FILE *fp = screen; const char *pager = nullptr; - // if output is "stdout", use a pipe to a pager for paged output. + // if output is a console, use a pipe to a pager for paged output. // this will avoid the most important help text to rush past the // user. scrollback buffers are often not large enough. this is most // beneficial to windows users, who are not used to command line. - if (fp == stdout) { +#if defined(_WIN32) + int use_pager = _isatty(fileno(fp)); +#else + int use_pager = isatty(fileno(fp)); +#endif + + // cannot use this with OpenMPI since its console is non-functional + +#if defined(OPEN_MPI) + use_pager = 0; +#endif + + if (use_pager) { pager = getenv("PAGER"); if (pager == nullptr) pager = "more"; #if defined(_WIN32) @@ -1130,7 +1146,7 @@ void _noopt LAMMPS::help() // reset to original state, if pipe command failed if (fp == nullptr) { - fp = stdout; + fp = screen; pager = nullptr; } } diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 9d94265002..5b4b1c4923 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -1793,7 +1793,7 @@ int Neighbor::choose_stencil(NeighRequest *rq) // convert newton request to newtflag = on or off - int newtflag; + int newtflag = 1; if (rq->newton == 0 && newton_pair) newtflag = 1; else if (rq->newton == 0 && !newton_pair) newtflag = 0; else if (rq->newton == 1) newtflag = 1; diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index c2bc37e931..ab2fe7803a 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -494,7 +494,7 @@ void PairHybrid::coeff(int narg, char **arg) int none = 0; if (m == nstyles) { if (strcmp(arg[2],"none") == 0) none = 1; - else error->all(FLERR,"Pair coeff for hybrid has invalid style"); + else error->all(FLERR,"Pair coeff for hybrid has invalid style: {}",arg[2]); } // move 1st/2nd args to 2nd/3rd args @@ -896,7 +896,7 @@ void PairHybrid::modify_params(int narg, char **arg) int m; for (m = 0; m < nstyles; m++) if (strcmp(arg[1],keywords[m]) == 0) break; - if (m == nstyles) error->all(FLERR,"Unknown pair_modify hybrid sub-style"); + if (m == nstyles) error->all(FLERR,"Unknown pair_modify hybrid sub-style: {}",arg[1]); int iarg = 2; if (multiple[m]) { @@ -905,7 +905,7 @@ void PairHybrid::modify_params(int narg, char **arg) for (m = 0; m < nstyles; m++) if (strcmp(arg[1],keywords[m]) == 0 && multiflag == multiple[m]) break; if (m == nstyles) - error->all(FLERR,"Unknown pair_modify hybrid sub-style"); + error->all(FLERR,"Unknown pair_modify hybrid sub-style: {}",arg[1]); iarg = 3; } diff --git a/src/pair_table.cpp b/src/pair_table.cpp index ee3a6454c9..f064d56377 100644 --- a/src/pair_table.cpp +++ b/src/pair_table.cpp @@ -215,7 +215,7 @@ void PairTable::settings(int narg, char **arg) else if (strcmp(arg[0],"linear") == 0) tabstyle = LINEAR; else if (strcmp(arg[0],"spline") == 0) tabstyle = SPLINE; else if (strcmp(arg[0],"bitmap") == 0) tabstyle = BITMAP; - else error->all(FLERR,"Unknown table style in pair_style command"); + else error->all(FLERR,"Unknown table style in pair_style command: {}", arg[0]); tablength = utils::inumeric(FLERR,arg[1],false,lmp); if (tablength < 2) error->all(FLERR,"Illegal number of pair table entries"); diff --git a/src/thermo.cpp b/src/thermo.cpp index f030ac2391..1fa6f18d2c 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -908,7 +908,7 @@ void Thermo::parse_fields(char *str) if ((argi.get_type() == ArgInfo::UNKNOWN) || (argi.get_type() == ArgInfo::NONE) || (argi.get_dim() > 2)) - error->all(FLERR,"Unknown keyword in thermo_style custom command"); + error->all(FLERR,"Unknown keyword '{}' in thermo_style custom command",word); // process zero or one or two trailing brackets // argindex1,argindex2 = int inside each bracket pair, 0 if no bracket diff --git a/tools/coding_standard/homepage.py b/tools/coding_standard/homepage.py index 299729f15d..444befec36 100644 --- a/tools/coding_standard/homepage.py +++ b/tools/coding_standard/homepage.py @@ -34,7 +34,7 @@ patterns: """ def check_homepage(f): - pattern = re.compile(r'.*lammps.sandia.gov.*') + pattern = re.compile(r'.*lammps.sandia.gov.*') # lgtm [py/incomplete-hostname-regexp] lineno = 1 errors = set() @@ -48,7 +48,7 @@ def check_homepage(f): def check_file(path): if path.find('homepage.py') >= 0: return { 'homepage_errors' : '' } encoding = 'UTF-8' - whitespace_errors = set() + homepage_errors = set() try: with open(path, 'r') as f: homepage_errors = check_homepage(f) diff --git a/tools/python/pizza/dump.py b/tools/python/pizza/dump.py index 1c6eb5edfd..5c7fab33ae 100644 --- a/tools/python/pizza/dump.py +++ b/tools/python/pizza/dump.py @@ -6,21 +6,25 @@ # certain rights in this software. This software is distributed under # the GNU General Public License. +# for python3 compatibility + +from __future__ import print_function + # dump tool oneline = "Read, write, manipulate dump files and particle attributes" docstr = """ d = dump("dump.one") read in one or more dump files -d = dump("dump.1 dump.2.gz") can be gzipped -d = dump("dump.*") wildcard expands to multiple files -d = dump("dump.*",0) two args = store filenames, but don't read +d = dump("dump.1 dump.2.gz") can be gzipped +d = dump("dump.*") wildcard expands to multiple files +d = dump("dump.*",0) two args = store filenames, but don't read incomplete and duplicate snapshots are deleted + if atoms have 5 or 8 columns, assign id,type,x,y,z (ix,iy,iz) atoms will be unscaled if stored in files as scaled - self-describing column names assigned -time = d.next() read next snapshot from dump files +time = d.next() read next snapshot from dump files used with 2-argument constructor to allow reading snapshots one-at-a-time snapshot will be skipped only if another snapshot has same time stamp @@ -28,24 +32,24 @@ time = d.next() read next snapshot from dump files return -1 if no snapshots left or last snapshot is incomplete no column name assignment or unscaling is performed -d.map(1,"id",3,"x") assign names to columns (1-N) +d.map(1,"id",3,"x") assign names to atom columns (1-N) not needed if dump file is self-describing -d.tselect.all() select all timesteps -d.tselect.one(N) select only timestep N -d.tselect.none() deselect all timesteps -d.tselect.skip(M) select every Mth step +d.tselect.all() select all timesteps +d.tselect.one(N) select only timestep N +d.tselect.none() deselect all timesteps +d.tselect.skip(M) select every Mth step d.tselect.test("$t >= 100 and $t < 10000") select matching timesteps -d.delete() delete non-selected timesteps +d.delete() delete non-selected timesteps selecting a timestep also selects all atoms in the timestep skip() and test() only select from currently selected timesteps test() uses a Python Boolean expression with $t for timestep value Python comparison syntax: == != < > <= >= and or -d.aselect.all() select all atoms in all steps -d.aselect.all(N) select all atoms in one step +d.aselect.all() select all atoms in all steps +d.aselect.all(N) select all atoms in one step d.aselect.test("$id > 100 and $type == 2") select match atoms in all steps d.aselect.test("$id > 100 and $type == 2",N) select matching atoms in one step @@ -56,24 +60,24 @@ d.aselect.test("$id > 100 and $type == 2",N) select matching atoms in one step Python comparison syntax: == != < > <= >= and or $name must end with a space -d.write("file") write selected steps/atoms to dump file -d.write("file",head,app) write selected steps/atoms to dump file -d.scatter("tmp") write selected steps/atoms to multiple files +d.write("file") write selected steps/atoms to dump file +d.write("file",head,app) write selected steps/atoms to dump file +d.scatter("tmp") write selected steps/atoms to multiple files write() can be specified with 2 additional flags - head = 0/1 for no/yes snapshot header, app = 0/1 for write vs append + headd = 0/1 for no/yes snapshot header, app = 0/1 for write vs append scatter() files are given timestep suffix: e.g. tmp.0, tmp.100, etc -d.scale() scale x,y,z to 0-1 for all timesteps -d.scale(100) scale atom coords for timestep N -d.unscale() unscale x,y,z to box size to all timesteps -d.unscale(1000) unscale atom coords for timestep N -d.wrap() wrap x,y,z into periodic box via ix,iy,iz -d.unwrap() unwrap x,y,z out of box via ix,iy,iz -d.owrap("other") wrap x,y,z to same image as another atom -d.sort() sort atoms by atom ID in all selected steps -d.sort("x") sort atoms by column value in all steps -d.sort(1000) sort atoms in timestep N +d.scale() scale x,y,z to 0-1 for all timesteps +d.scale(100) scale atom coords for timestep N +d.unscale() unscale x,y,z to box size to all timesteps +d.unscale(1000) unscale atom coords for timestep N +d.wrap() wrap x,y,z into periodic box via ix,iy,iz +d.unwrap() unwrap x,y,z out of box via ix,iy,iz +d.owrap("other") wrap x,y,z to same image as another atom +d.sort() sort atoms by atom ID in all selected steps +d.sort("x") sort atoms by column value in all steps +d.sort(1000) sort atoms in timestep N scale(), unscale(), wrap(), unwrap(), owrap() operate on all steps and atoms wrap(), unwrap(), owrap() require ix,iy,iz be defined @@ -85,8 +89,8 @@ d.sort(1000) sort atoms in timestep N m1,m2 = d.minmax("type") find min/max values for a column d.set("$ke = $vx * $vx + $vy * $vy") set a column to a computed value d.setv("type",vector) set a column to a vector of values -d.spread("ke",N,"color") 2nd col = N ints spread over 1st col -d.clone(1000,"color") clone timestep N values to other steps +d.spread("ke",N,"color") 2nd col = N ints spread over 1st col +d.clone(1000,"color") clone timestep N values to other steps minmax() operates on selected timesteps and atoms set() operates on selected timesteps and atoms @@ -107,17 +111,18 @@ d.clone(1000,"color") clone timestep N values to other steps values at every timestep are set to value at timestep N for that atom ID useful for propagating a color map -t = d.time() return vector of selected timestep values +t = d.time() return vector of selected timestep values fx,fy,... = d.atom(100,"fx","fy",...) return vector(s) for atom ID N fx,fy,... = d.vecs(1000,"fx","fy",...) return vector(s) for timestep N atom() returns vectors with one value for each selected timestep vecs() returns vectors with one value for each selected atom in the timestep -index,time,flag = d.iterator(0/1) loop over dump snapshots -time,box,atoms,bonds,tris,lines = d.viz(index) return list of viz objects -d.atype = "color" set column returned as "type" by viz -d.extra(obj) extract bond/tri/line info from obj +index,time,flag = d.iterator(0/1) loop over dump snapshots +time,box,atoms,bonds,tris = d.viz(index) return list of viz objects +d.atype = "color" set column returned as "type" by viz +d.extra("dump.bond") read bond list from dump file +d.extra(data) extract bond/tri/line list from data iterator() loops over selected timesteps iterator() called with arg = 0 first time, with arg = 1 on subsequent calls @@ -125,26 +130,24 @@ d.extra(obj) extract bond/tri/line info from obj time = timestep value flag = -1 when iteration is done, 1 otherwise viz() returns info for selected atoms for specified timestep index - can also call as viz(time,1) and will find index of preceding snapshot time = timestep value - box = \[xlo,ylo,zlo,xhi,yhi,zhi\] + box = [xlo,ylo,zlo,xhi,yhi,zhi] atoms = id,type,x,y,z for each atom as 2d array bonds = id,type,x1,y1,z1,x2,y2,z2,t1,t2 for each bond as 2d array - if extra() used to define bonds, else NULL + if bonds() was used to define bonds, else empty list tris = id,type,x1,y1,z1,x2,y2,z2,x3,y3,z3,nx,ny,nz for each tri as 2d array - if extra() used to define tris, else NULL + if extra() was used to define tris, else empty list lines = id,type,x1,y1,z1,x2,y2,z2 for each line as 2d array - if extra() used to define lines, else NULL + if extra() was used to define lines, else empty list atype is column name viz() will return as atom type (def = "type") - extra() extracts bonds/tris/lines from obj each time viz() is called - obj can be data object for bonds, cdata object for tris and lines, - bdump object for bonds, tdump object for tris, ldump object for lines. - mdump object for tris + extra() stores list of bonds/tris/lines to return each time viz() is called """ # History # 8/05, Steve Plimpton (SNL): original version # 12/09, David Hart (SNL): allow use of NumPy or Numeric +# 03/17, Richard Berger (Temple U): improve Python 3 compatibility, +# simplify read_snapshot by using reshape # ToDo list # try to optimize this line in read_snap: words += f.readline().split() @@ -156,7 +159,6 @@ d.extra(obj) extract bond/tri/line info from obj # increment = 1 if reading snapshots one-at-a-time # nextfile = which file to read from via next() # eof = ptr into current file for where to read via next() -# scale_original = 0/1/-1 if coords were read in as unscaled/scaled/unknown # nsnaps = # of snapshots # nselect = # of selected snapshots # snaps = list of snapshots @@ -165,36 +167,34 @@ d.extra(obj) extract bond/tri/line info from obj # tselect = class for time selection # aselect = class for atom selection # atype = name of vector used as atom type by viz extract -# bondflag = 0 if no bonds, 1 if they are defined statically, 2 if dynamic -# bondlist = static list of bonds to return w/ viz() for all snapshots +# bondflag = 0 if no bonds, 1 if they are defined statically +# bondlist = static list of bonds to viz() return for all snapshots +# only a list of atom pairs, coords have to be created for each snapshot # triflag = 0 if no tris, 1 if they are defined statically, 2 if dynamic -# trilist = static list of tris to return w/ viz() for all snapshots -# lineflag = 0 if no lines, 1 if they are defined statically, 2 if dynamic -# linelist = static list of lines to return w/ viz() for all snapshots -# objextra = object to get bonds,tris,lines from dynamically +# trilist = static list of tris to return via viz() for all snapshots +# lineflag = 0 if no lines, 1 if they are defined statically +# linelist = static list of lines to return via viz() for all snapshots # Snap = one snapshot # time = time stamp # tselect = 0/1 if this snapshot selected # natoms = # of atoms -# boxstr = format string after BOX BOUNDS, if it exists -# triclinic = 0/1 for orthogonal/triclinic based on BOX BOUNDS fields # nselect = # of selected atoms in this snapshot # aselect[i] = 0/1 for each atom -# xlo,xhi,ylo,yhi,zlo,zhi,xy,xz,yz = box bounds (float) +# xlo,xhi,ylo,yhi,zlo,zhi = box bounds (float) # atoms[i][j] = 2d array of floats, i = 0 to natoms-1, j = 0 to ncols-1 # Imports and external programs -import sys, commands, re, glob, types +import sys, re, glob, types from os import popen from math import * # any function could be used by set() try: - import numpy as np - oldnumeric = False + import numpy as np + oldnumeric = False except: - import Numeric as np - oldnumeric = True + import Numeric as np + oldnumeric = True try: from DEFAULTS import PIZZA_GUNZIP except: PIZZA_GUNZIP = "gunzip" @@ -216,9 +216,9 @@ class dump: self.bondlist = [] self.triflag = 0 self.trilist = [] + self.triobj = 0 self.lineflag = 0 self.linelist = [] - self.objextra = None # flist = list of all dump file names @@ -226,7 +226,7 @@ class dump: self.flist = [] for word in words: self.flist += glob.glob(word) if len(self.flist) == 0 and len(list) == 1: - raise StandardError,"no dump file specified" + raise Exception("no dump file specified") if len(list) == 1: self.increment = 0 @@ -251,48 +251,57 @@ class dump: snap = self.read_snapshot(f) while snap: self.snaps.append(snap) - print snap.time, + print(snap.time,end='') sys.stdout.flush() snap = self.read_snapshot(f) f.close() - print + print() # sort entries by timestep, cull duplicates self.snaps.sort(self.compare_time) self.cull() self.nsnaps = len(self.snaps) - print "read %d snapshots" % self.nsnaps + print("read %d snapshots" % self.nsnaps) # select all timesteps and atoms self.tselect.all() - # print column assignments + # set default names for atom columns if file wasn't self-describing - if len(self.names): - print "assigned columns:",self.names2str() + if len(self.snaps) == 0: + print("no column assignments made") + elif len(self.names): + print("assigned columns:",self.names2str()) + elif self.snaps[0].atoms is None: + print("no column assignments made") + elif len(self.snaps[0].atoms[0]) == 5: + self.map(1,"id",2,"type",3,"x",4,"y",5,"z") + print("assigned columns:",self.names2str()) + elif len(self.snaps[0].atoms[0]) == 8: + self.map(1,"id",2,"type",3,"x",4,"y",5,"z",6,"ix",7,"iy",8,"iz") + print("assigned columns:",self.names2str()) else: - print "no column assignments made" + print("no column assignments made") # if snapshots are scaled, unscale them if (not self.names.has_key("x")) or \ (not self.names.has_key("y")) or \ (not self.names.has_key("z")): - print "dump scaling status is unknown" + print("no unscaling could be performed") elif self.nsnaps > 0: - if self.scale_original == 1: self.unscale() - elif self.scale_original == 0: print "dump is already unscaled" - else: print "dump scaling status is unknown" + if self.scaled(self.nsnaps-1): self.unscale() + else: print("dump is already unscaled") # -------------------------------------------------------------------- # read next snapshot from list of files def next(self): - if not self.increment: raise StandardError,"cannot read incrementally" + if not self.increment: raise Exception("cannot read incrementally") # read next snapshot in current file using eof as pointer # if fail, try next file @@ -321,7 +330,7 @@ class dump: snap = self.snaps[self.nsnaps] snap.tselect = 1 snap.nselect = snap.natoms - for i in xrange(snap.natoms): snap.aselect[i] = 1 + for i in range(snap.natoms): snap.aselect[i] = 1 self.nsnaps += 1 self.nselect += 1 @@ -330,111 +339,93 @@ class dump: # -------------------------------------------------------------------- # read a single snapshot from file f # return snapshot or 0 if failed - # for first snapshot only: - # assign column names (file must be self-describing) - # set scale_original to 0/1/-1 for unscaled/scaled/unknown - # convert xs,xu to x in names + # assign column names if not already done and file is self-describing + # convert xs,xu to x def read_snapshot(self,f): try: snap = Snap() item = f.readline() - snap.time = int(f.readline().split()[0]) # just grab 1st field + snap.time = int(f.readline().decode().split()[0]) # just grab 1st field item = f.readline() - snap.natoms = int(f.readline()) + snap.natoms = int(f.readline().decode()) snap.aselect = np.zeros(snap.natoms) - item = f.readline() - words = item.split("BOUNDS ") - if len(words) == 1: snap.boxstr = "" - else: snap.boxstr = words[1].strip() - if "xy" in snap.boxstr: snap.triclinic = 1 - else: snap.triclinic = 0 - + item = f.readline().decode() words = f.readline().split() - if len(words) == 2: - snap.xlo,snap.xhi,snap.xy = float(words[0]),float(words[1]),0.0 - else: - snap.xlo,snap.xhi,snap.xy = \ - float(words[0]),float(words[1]),float(words[2]) - + snap.xlo,snap.xhi = float(words[0]),float(words[1]) words = f.readline().split() - if len(words) == 2: - snap.ylo,snap.yhi,snap.xz = float(words[0]),float(words[1]),0.0 - else: - snap.ylo,snap.yhi,snap.xz = \ - float(words[0]),float(words[1]),float(words[2]) - + snap.ylo,snap.yhi = float(words[0]),float(words[1]) words = f.readline().split() - if len(words) == 2: - snap.zlo,snap.zhi,snap.yz = float(words[0]),float(words[1]),0.0 - else: - snap.zlo,snap.zhi,snap.yz = \ - float(words[0]),float(words[1]),float(words[2]) + snap.zlo,snap.zhi = float(words[0]),float(words[1]) - item = f.readline() + item = f.readline().decode() if len(self.names) == 0: - self.scale_original = -1 - xflag = yflag = zflag = -1 words = item.split()[2:] if len(words): for i in range(len(words)): - if words[i] == "x" or words[i] == "xu": - xflag = 0 + if words[i] == "xs" or words[i] == "xu": self.names["x"] = i - elif words[i] == "xs" or words[i] == "xsu": - xflag = 1 - self.names["x"] = i - elif words[i] == "y" or words[i] == "yu": - yflag = 0 + elif words[i] == "ys" or words[i] == "yu": self.names["y"] = i - elif words[i] == "ys" or words[i] == "ysu": - yflag = 1 - self.names["y"] = i - elif words[i] == "z" or words[i] == "zu": - zflag = 0 - self.names["z"] = i - elif words[i] == "zs" or words[i] == "zsu": - zflag = 1 + elif words[i] == "zs" or words[i] == "zu": self.names["z"] = i else: self.names[words[i]] = i - if xflag == 0 and yflag == 0 and zflag == 0: self.scale_original = 0 - if xflag == 1 and yflag == 1 and zflag == 1: self.scale_original = 1 if snap.natoms: - words = f.readline().split() + words = f.readline().decode().split() ncol = len(words) - for i in xrange(1,snap.natoms): - words += f.readline().split() + for i in range(1,snap.natoms): + words += f.readline().decode().split() floats = map(float,words) - if oldnumeric: atoms = np.zeros((snap.natoms,ncol),np.Float) - else: atoms = np.zeros((snap.natoms,ncol),np.float) - start = 0 - stop = ncol - for i in xrange(snap.natoms): - atoms[i] = floats[start:stop] - start = stop - stop += ncol - else: atoms = None - snap.atoms = atoms + if oldnumeric: + atom_data = np.array(list(floats),np.Float) + else: + atom_data = np.array(list(floats),np.float) + + snap.atoms = atom_data.reshape((snap.natoms, ncol)) + else: + snap.atoms = None return snap except: - return 0 + return None + + # -------------------------------------------------------------------- + # decide if snapshot i is scaled/unscaled from coords of first and last atom + + def scaled(self,i): + ix = self.names["x"] + iy = self.names["y"] + iz = self.names["z"] + natoms = self.snaps[i].natoms + if natoms == 0: return 0 + x1 = self.snaps[i].atoms[0][ix] + y1 = self.snaps[i].atoms[0][iy] + z1 = self.snaps[i].atoms[0][iz] + x2 = self.snaps[i].atoms[natoms-1][ix] + y2 = self.snaps[i].atoms[natoms-1][iy] + z2 = self.snaps[i].atoms[natoms-1][iz] + if x1 >= -0.1 and x1 <= 1.1 and y1 >= -0.1 and y1 <= 1.1 and \ + z1 >= -0.1 and z1 <= 1.1 and x2 >= -0.1 and x2 <= 1.1 and \ + y2 >= -0.1 and y2 <= 1.1 and z2 >= -0.1 and z2 <= 1.1: + return 1 + else: return 0 # -------------------------------------------------------------------- # map atom column names def map(self,*pairs): if len(pairs) % 2 != 0: - raise StandardError, "dump map() requires pairs of mappings" + raise Exception("dump map() requires pairs of mappings") for i in range(0,len(pairs),2): j = i + 1 self.names[pairs[j]] = pairs[i]-1 - # -------------------------------------------------------------------- # delete unselected snapshots + # -------------------------------------------------------------------- + def delete(self): ndel = i = 0 while i < self.nsnaps: @@ -443,16 +434,15 @@ class dump: self.nsnaps -= 1 ndel += 1 else: i += 1 - print "%d snapshots deleted" % ndel - print "%d snapshots remaining" % self.nsnaps + print("%d snapshots deleted" % ndel) + print("%d snapshots remaining" % self.nsnaps) # -------------------------------------------------------------------- # scale coords to 0-1 for all snapshots or just one - # use 6 params as h-matrix to treat orthogonal or triclinic boxes def scale(self,*list): if len(list) == 0: - print "Scaling dump ..." + print("Scaling dump ...") x = self.names["x"] y = self.names["y"] z = self.names["z"] @@ -467,56 +457,20 @@ class dump: # -------------------------------------------------------------------- def scale_one(self,snap,x,y,z): - if snap.xy == 0.0 and snap.xz == 0.0 and snap.yz == 0.0: - xprdinv = 1.0 / (snap.xhi - snap.xlo) - yprdinv = 1.0 / (snap.yhi - snap.ylo) - zprdinv = 1.0 / (snap.zhi - snap.zlo) - atoms = snap.atoms - if type(atoms) != types.NoneType: - atoms[:,x] = (atoms[:,x] - snap.xlo) * xprdinv - atoms[:,y] = (atoms[:,y] - snap.ylo) * yprdinv - atoms[:,z] = (atoms[:,z] - snap.zlo) * zprdinv - else: - xlo_bound = snap.xlo; xhi_bound = snap.xhi - ylo_bound = snap.ylo; yhi_bound = snap.yhi - zlo_bound = snap.zlo; zhi_bound = snap.zhi - xy = snap.xy - xz = snap.xz - yz = snap.yz - xlo = xlo_bound - min((0.0,xy,xz,xy+xz)) - xhi = xhi_bound - max((0.0,xy,xz,xy+xz)) - ylo = ylo_bound - min((0.0,yz)) - yhi = yhi_bound - max((0.0,yz)) - zlo = zlo_bound - zhi = zhi_bound - h0 = xhi - xlo - h1 = yhi - ylo - h2 = zhi - zlo - h3 = yz - h4 = xz - h5 = xy - h0inv = 1.0 / h0 - h1inv = 1.0 / h1 - h2inv = 1.0 / h2 - h3inv = yz / (h1*h2) - h4inv = (h3*h5 - h1*h4) / (h0*h1*h2) - h5inv = xy / (h0*h1) - atoms = snap.atoms - if type(atoms) != types.NoneType: - atoms[:,x] = (atoms[:,x] - snap.xlo)*h0inv + \ - (atoms[:,y] - snap.ylo)*h5inv + \ - (atoms[:,z] - snap.zlo)*h4inv - atoms[:,y] = (atoms[:,y] - snap.ylo)*h1inv + \ - (atoms[:,z] - snap.zlo)*h3inv - atoms[:,z] = (atoms[:,z] - snap.zlo)*h2inv + xprdinv = 1.0 / (snap.xhi - snap.xlo) + yprdinv = 1.0 / (snap.yhi - snap.ylo) + zprdinv = 1.0 / (snap.zhi - snap.zlo) + atoms = snap.atoms + atoms[:,x] = (atoms[:,x] - snap.xlo) * xprdinv + atoms[:,y] = (atoms[:,y] - snap.ylo) * yprdinv + atoms[:,z] = (atoms[:,z] - snap.zlo) * zprdinv # -------------------------------------------------------------------- # unscale coords from 0-1 to box size for all snapshots or just one - # use 6 params as h-matrix to treat orthogonal or triclinic boxes def unscale(self,*list): if len(list) == 0: - print "Unscaling dump ..." + print("Unscaling dump ...") x = self.names["x"] y = self.names["y"] z = self.names["z"] @@ -531,45 +485,19 @@ class dump: # -------------------------------------------------------------------- def unscale_one(self,snap,x,y,z): - if snap.xy == 0.0 and snap.xz == 0.0 and snap.yz == 0.0: - xprd = snap.xhi - snap.xlo - yprd = snap.yhi - snap.ylo - zprd = snap.zhi - snap.zlo - atoms = snap.atoms - if type(atoms) != types.NoneType: - atoms[:,x] = snap.xlo + atoms[:,x]*xprd - atoms[:,y] = snap.ylo + atoms[:,y]*yprd - atoms[:,z] = snap.zlo + atoms[:,z]*zprd - else: - xlo_bound = snap.xlo; xhi_bound = snap.xhi - ylo_bound = snap.ylo; yhi_bound = snap.yhi - zlo_bound = snap.zlo; zhi_bound = snap.zhi - xy = snap.xy - xz = snap.xz - yz = snap.yz - xlo = xlo_bound - min((0.0,xy,xz,xy+xz)) - xhi = xhi_bound - max((0.0,xy,xz,xy+xz)) - ylo = ylo_bound - min((0.0,yz)) - yhi = yhi_bound - max((0.0,yz)) - zlo = zlo_bound - zhi = zhi_bound - h0 = xhi - xlo - h1 = yhi - ylo - h2 = zhi - zlo - h3 = yz - h4 = xz - h5 = xy - atoms = snap.atoms - if type(atoms) != types.NoneType: - atoms[:,x] = snap.xlo + atoms[:,x]*h0 + atoms[:,y]*h5 + atoms[:,z]*h4 - atoms[:,y] = snap.ylo + atoms[:,y]*h1 + atoms[:,z]*h3 - atoms[:,z] = snap.zlo + atoms[:,z]*h2 + xprd = snap.xhi - snap.xlo + yprd = snap.yhi - snap.ylo + zprd = snap.zhi - snap.zlo + atoms = snap.atoms + atoms[:,x] = snap.xlo + atoms[:,x]*xprd + atoms[:,y] = snap.ylo + atoms[:,y]*yprd + atoms[:,z] = snap.zlo + atoms[:,z]*zprd # -------------------------------------------------------------------- # wrap coords from outside box to inside def wrap(self): - print "Wrapping dump ..." + print("Wrapping dump ...") x = self.names["x"] y = self.names["y"] @@ -591,7 +519,7 @@ class dump: # unwrap coords from inside box to outside def unwrap(self): - print "Unwrapping dump ..." + print("Unwrapping dump ...") x = self.names["x"] y = self.names["y"] @@ -611,10 +539,9 @@ class dump: # -------------------------------------------------------------------- # wrap coords to same image as atom ID stored in "other" column - # if dynamic extra lines or triangles defined, owrap them as well def owrap(self,other): - print "Wrapping to other ..." + print("Wrapping to other ...") id = self.names["id"] x = self.names["x"] @@ -631,26 +558,23 @@ class dump: zprd = snap.zhi - snap.zlo atoms = snap.atoms ids = {} - for i in xrange(snap.natoms): + for i in range(snap.natoms): ids[atoms[i][id]] = i - for i in xrange(snap.natoms): + for i in range(snap.natoms): j = ids[atoms[i][iother]] atoms[i][x] += (atoms[i][ix]-atoms[j][ix])*xprd atoms[i][y] += (atoms[i][iy]-atoms[j][iy])*yprd atoms[i][z] += (atoms[i][iz]-atoms[j][iz])*zprd - # should bonds also be owrapped ? - if self.lineflag == 2 or self.triflag == 2: - self.objextra.owrap(snap.time,xprd,yprd,zprd,ids,atoms,iother,ix,iy,iz) # -------------------------------------------------------------------- # convert column names assignment to a string, in column order def names2str(self): + ncol = len(self.snaps[0].atoms[0]) pairs = self.names.items() values = self.names.values() - ncol = len(pairs) str = "" - for i in xrange(ncol): + for i in range(ncol): if i in values: str += pairs[values.index(i)][0] + ' ' return str @@ -661,12 +585,12 @@ class dump: def sort(self,*list): if len(list) == 0: - print "Sorting selected snapshots ..." + print("Sorting selected snapshots ...") id = self.names["id"] for snap in self.snaps: if snap.tselect: self.sort_one(snap,id) elif type(list[0]) is types.StringType: - print "Sorting selected snapshots by %s ..." % list[0] + print("Sorting selected snapshots by %s ..." % list[0]) id = self.names[list[0]] for snap in self.snaps: if snap.tselect: self.sort_one(snap,id) @@ -682,7 +606,7 @@ class dump: atoms = snap.atoms ids = atoms[:,id] ordering = np.argsort(ids) - for i in xrange(len(atoms[0])): + for i in range(len(atoms[0])): atoms[:,i] = np.take(atoms[:,i],ordering) # -------------------------------------------------------------------- @@ -692,47 +616,35 @@ class dump: if len(self.snaps): namestr = self.names2str() if not append: f = open(file,"w") else: f = open(file,"a") - - if "id" in self.names: id = self.names["id"] - else: id = -1 - if "type" in self.names: type = self.names["type"] - else: type = -1 - for snap in self.snaps: if not snap.tselect: continue - print snap.time, + print(snap.time,end='') sys.stdout.flush() if header: - print >>f,"ITEM: TIMESTEP" - print >>f,snap.time - print >>f,"ITEM: NUMBER OF ATOMS" - print >>f,snap.nselect - if snap.boxstr: print >>f,"ITEM: BOX BOUNDS",snap.boxstr - else: print >>f,"ITEM: BOX BOUNDS" - if snap.triclinic: - print >>f,snap.xlo,snap.xhi,snap.xy - print >>f,snap.ylo,snap.yhi,snap.xz - print >>f,snap.zlo,snap.zhi,snap.yz - else: - print >>f,snap.xlo,snap.xhi - print >>f,snap.ylo,snap.yhi - print >>f,snap.zlo,snap.zhi - print >>f,"ITEM: ATOMS",namestr + print("ITEM: TIMESTEP",file=f) + print(snap.time,file=f) + print("ITEM: NUMBER OF ATOMS",file=f) + print(snap.nselect,file=f) + print("ITEM: BOX BOUNDS",file=f) + print(snap.xlo,snap.xhi,file=f) + print(snap.ylo,snap.yhi,file=f) + print(snap.zlo,snap.zhi,file=f) + print("ITEM: ATOMS",namestr,file=f) atoms = snap.atoms nvalues = len(atoms[0]) - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue line = "" - for j in xrange(nvalues): - if j == id or j == type: + for j in range(nvalues): + if (j < 2): line += str(int(atoms[i][j])) + " " else: line += str(atoms[i][j]) + " " - print >>f,line + print(line,file=f) f.close() - print "\n%d snapshots" % self.nselect + print("\n%d snapshots" % self.nselect) # -------------------------------------------------------------------- # write one dump file per snapshot from current selection @@ -741,40 +653,34 @@ class dump: if len(self.snaps): namestr = self.names2str() for snap in self.snaps: if not snap.tselect: continue - print snap.time, + print(snap.time,end='') sys.stdout.flush() file = root + "." + str(snap.time) f = open(file,"w") - print >>f,"ITEM: TIMESTEP" - print >>f,snap.time - print >>f,"ITEM: NUMBER OF ATOMS" - print >>f,snap.nselect - if snap.boxstr: print >>f,"ITEM: BOX BOUNDS",snap.boxstr - else: print >>f,"ITEM: BOX BOUNDS" - if snap.triclinic: - print >>f,snap.xlo,snap.xhi,snap.xy - print >>f,snap.ylo,snap.yhi,snap.xz - print >>f,snap.zlo,snap.zhi,snap.yz - else: - print >>f,snap.xlo,snap.xhi - print >>f,snap.ylo,snap.yhi - print >>f,snap.zlo,snap.zhi - print >>f,"ITEM: ATOMS",namestr + print("ITEM: TIMESTEP",file=f) + print(snap.time,file=f) + print("ITEM: NUMBER OF ATOMS",file=f) + print(snap.nselect,file=f) + print("ITEM: BOX BOUNDS",file=f) + print(snap.xlo,snap.xhi,file=f) + print(snap.ylo,snap.yhi,file=f) + print(snap.zlo,snap.zhi,file=f) + print("ITEM: ATOMS",namestr,file=f) atoms = snap.atoms nvalues = len(atoms[0]) - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue line = "" - for j in xrange(nvalues): + for j in range(nvalues): if (j < 2): line += str(int(atoms[i][j])) + " " else: line += str(atoms[i][j]) + " " - print >>f,line + print(line,file=f) f.close() - print "\n%d snapshots" % self.nselect + print("\n%d snapshots" % self.nselect) # -------------------------------------------------------------------- # find min/max across all selected snapshots/atoms for a particular column @@ -786,7 +692,7 @@ class dump: for snap in self.snaps: if not snap.tselect: continue atoms = snap.atoms - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue if atoms[i][icol] < min: min = atoms[i][icol] if atoms[i][icol] > max: max = atoms[i][icol] @@ -796,7 +702,7 @@ class dump: # set a column value via an equation for all selected snapshots def set(self,eq): - print "Setting ..." + print("Setting ...") pattern = "\$\w*" list = re.findall(pattern,eq) @@ -813,14 +719,14 @@ class dump: for snap in self.snaps: if not snap.tselect: continue - for i in xrange(snap.natoms): - if snap.aselect[i]: exec ceq + for i in range(snap.natoms): + if snap.aselect[i]: exec(ceq) # -------------------------------------------------------------------- # set a column value via an input vec for all selected snapshots/atoms def setv(self,colname,vec): - print "Setting ..." + print("Setting ...") if not self.names.has_key(colname): self.newcolumn(colname) icol = self.names[colname] @@ -828,10 +734,10 @@ class dump: for snap in self.snaps: if not snap.tselect: continue if snap.nselect != len(vec): - raise StandardError,"vec length does not match # of selected atoms" + raise Exception("vec length does not match # of selected atoms") atoms = snap.atoms m = 0 - for i in xrange(snap.natoms): + for i in range(snap.natoms): if snap.aselect[i]: atoms[i][icol] = vec[m] m += 1 @@ -844,12 +750,12 @@ class dump: icol = self.names[col] id = self.names["id"] ids = {} - for i in xrange(self.snaps[istep].natoms): + for i in range(self.snaps[istep].natoms): ids[self.snaps[istep].atoms[i][id]] = i for snap in self.snaps: if not snap.tselect: continue atoms = snap.atoms - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue j = ids[atoms[i][id]] atoms[i][icol] = self.snaps[istep].atoms[j][icol] @@ -863,14 +769,14 @@ class dump: inew = self.names[new] min,max = self.minmax(old) - print "min/max = ",min,max + print("min/max = ",min,max) gap = max - min invdelta = n/gap for snap in self.snaps: if not snap.tselect: continue atoms = snap.atoms - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue ivalue = int((atoms[i][iold] - min) * invdelta) + 1 if ivalue > n: ivalue = n @@ -894,7 +800,7 @@ class dump: def atom(self,n,*list): if len(list) == 0: - raise StandardError, "no columns specified" + raise Exception("no columns specified") columns = [] values = [] for name in list: @@ -907,11 +813,11 @@ class dump: for snap in self.snaps: if not snap.tselect: continue atoms = snap.atoms - for i in xrange(snap.natoms): + for i in range(snap.natoms): if atoms[i][id] == n: break if atoms[i][id] != n: - raise StandardError, "could not find atom ID in snapshot" - for j in xrange(ncol): + raise Exception("could not find atom ID in snapshot") + for j in range(ncol): values[j][m] = atoms[i][columns[j]] m += 1 @@ -925,7 +831,7 @@ class dump: snap = self.snaps[self.findtime(n)] if len(list) == 0: - raise StandardError, "no columns specified" + raise Exception("no columns specified") columns = [] values = [] for name in list: @@ -934,9 +840,9 @@ class dump: ncol = len(columns) m = 0 - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue - for j in xrange(ncol): + for j in range(ncol): values[j][m] = snap.atoms[i][columns[j]] m += 1 @@ -985,7 +891,7 @@ class dump: def iterator(self,flag): start = 0 if flag: start = self.iterate + 1 - for i in xrange(start,self.nsnaps): + for i in range(start,self.nsnaps): if self.snaps[i].tselect: self.iterate = i return i,self.snaps[i].time,1 @@ -993,20 +899,9 @@ class dump: # -------------------------------------------------------------------- # return list of atoms to viz for snapshot isnap - # if called with flag, then index is timestep, so convert to snapshot index # augment with bonds, tris, lines if extra() was invoked - def viz(self,index,flag=0): - if not flag: isnap = index - else: - times = self.time() - n = len(times) - i = 0 - while i < n: - if times[i] > index: break - i += 1 - isnap = i - 1 - + def viz(self,isnap): snap = self.snaps[isnap] time = snap.time @@ -1021,27 +916,23 @@ class dump: # need Numeric/Numpy mode here atoms = [] - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue atom = snap.atoms[i] atoms.append([atom[id],atom[type],atom[x],atom[y],atom[z]]) - # create list of bonds from static or dynamic bond list - # then generate bond coords from bondlist + # create list of current bond coords from static bondlist # alist = dictionary of atom IDs for atoms list # lookup bond atom IDs in alist and grab their coords # try is used since some atoms may be unselected - # any bond with unselected atom is not added to bonds + # any bond with unselected atom is not returned to viz caller # need Numeric/Numpy mode here bonds = [] if self.bondflag: - if self.bondflag == 1: bondlist = self.bondlist - elif self.bondflag == 2: - tmp1,tmp2,tmp3,bondlist,tmp4,tmp5 = self.objextra.viz(time,1) alist = {} - for i in xrange(len(atoms)): alist[int(atoms[i][0])] = i - for bond in bondlist: + for i in range(len(atoms)): alist[int(atoms[i][0])] = i + for bond in self.bondlist: try: i = alist[bond[2]] j = alist[bond[3]] @@ -1051,32 +942,24 @@ class dump: atom2[2],atom2[3],atom2[4],atom1[1],atom2[1]]) except: continue - # create list of tris from static or dynamic tri list - # if dynamic, could eliminate tris for unselected atoms - tris = [] if self.triflag: if self.triflag == 1: tris = self.trilist elif self.triflag == 2: - tmp1,tmp2,tmp3,tmp4,tris,tmp5 = self.objextra.viz(time,1) - - # create list of lines from static or dynamic tri list - # if dynamic, could eliminate lines for unselected atoms + timetmp,boxtmp,atomstmp,bondstmp, \ + tris,linestmp = self.triobj.viz(time,1) lines = [] - if self.lineflag: - if self.lineflag == 1: lines = self.linelist - elif self.lineflag == 2: - tmp1,tmp2,tmp3,tmp4,tmp5,lines = self.objextra.viz(time,1) + if self.lineflag: lines = self.linelist return time,box,atoms,bonds,tris,lines # -------------------------------------------------------------------- def findtime(self,n): - for i in xrange(self.nsnaps): - if self.snaps[i].time == n: return i - raise StandardError, "no step %d exists" % n + for i, snap in enumerate(self.snaps): + if snap.time == n: return i + raise Exception("no step %d exists" % n) # -------------------------------------------------------------------- # return maximum box size across all selected snapshots @@ -1086,12 +969,12 @@ class dump: xhi = yhi = zhi = None for snap in self.snaps: if not snap.tselect: continue - if xlo == None or snap.xlo < xlo: xlo = snap.xlo - if xhi == None or snap.xhi > xhi: xhi = snap.xhi - if ylo == None or snap.ylo < ylo: ylo = snap.ylo - if yhi == None or snap.yhi > yhi: yhi = snap.yhi - if zlo == None or snap.zlo < zlo: zlo = snap.zlo - if zhi == None or snap.zhi > zhi: zhi = snap.zhi + if xlo is None or snap.xlo < xlo: xlo = snap.xlo + if xhi is None or snap.xhi > xhi: xhi = snap.xhi + if ylo is None or snap.ylo < ylo: ylo = snap.ylo + if yhi is None or snap.yhi > yhi: yhi = snap.yhi + if zlo is None or snap.zlo < zlo: zlo = snap.zlo + if zhi is None or snap.zhi > zhi: zhi = snap.zhi return [xlo,ylo,zlo,xhi,yhi,zhi] # -------------------------------------------------------------------- @@ -1103,21 +986,56 @@ class dump: for snap in self.snaps: if not snap.tselect: continue atoms = snap.atoms - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue if atoms[i][icol] > max: max = atoms[i][icol] return int(max) # -------------------------------------------------------------------- # grab bonds/tris/lines from another object - # if static, grab once, else store obj to grab dynamically def extra(self,arg): - # data object, grab bonds statically + # read bonds from bond dump file - if type(arg) is types.InstanceType and ".data" in str(arg.__class__): - self.bondflag = 0 + if type(arg) is types.StringType: + try: + f = open(arg,'r') + + item = f.readline() + time = int(f.readline()) + item = f.readline() + nbonds = int(f.readline()) + item = f.readline() + if not re.search("BONDS",item): + raise Exception("could not read bonds from dump file") + + words = f.readline().split() + ncol = len(words) + for i in range(1,nbonds): + words += f.readline().split() + f.close() + + # convert values to int and absolute value since can be negative types + + if oldnumeric: bondlist = np.zeros((nbonds,4),np.Int) + else: bondlist = np.zeros((nbonds,4),np.int) + ints = [abs(int(value)) for value in words] + start = 0 + stop = 4 + for i in range(nbonds): + bondlist[i] = ints[start:stop] + start += ncol + stop += ncol + if bondlist: + self.bondflag = 1 + self.bondlist = bondlist + except: + raise Exception("could not read from bond dump file") + + # request bonds from data object + + elif type(arg) is types.InstanceType and ".data" in str(arg.__class__): try: bondlist = [] bondlines = arg.sections["Bonds"] @@ -1129,12 +1047,11 @@ class dump: self.bondflag = 1 self.bondlist = bondlist except: - raise StandardError,"could not extract bonds from data object" + raise Exception("could not extract bonds from data object") - # cdata object, grab tris and lines statically + # request tris/lines from cdata object elif type(arg) is types.InstanceType and ".cdata" in str(arg.__class__): - self.triflag = self.lineflag = 0 try: tmp,tmp,tmp,tmp,tris,lines = arg.viz(0) if tris: @@ -1144,34 +1061,19 @@ class dump: self.lineflag = 1 self.linelist = lines except: - raise StandardError,"could not extract tris/lines from cdata object" + raise Exception("could not extract tris/lines from cdata object") - # mdump object, grab tris dynamically + # request tris from mdump object elif type(arg) is types.InstanceType and ".mdump" in str(arg.__class__): - self.triflag = 2 - self.objextra = arg - - # bdump object, grab bonds dynamically - - elif type(arg) is types.InstanceType and ".bdump" in str(arg.__class__): - self.bondflag = 2 - self.objextra = arg - - # ldump object, grab lines dynamically - - elif type(arg) is types.InstanceType and ".ldump" in str(arg.__class__): - self.lineflag = 2 - self.objextra = arg - - # tdump object, grab tris dynamically - - elif type(arg) is types.InstanceType and ".tdump" in str(arg.__class__): - self.triflag = 2 - self.objextra = arg + try: + self.triflag = 2 + self.triobj = arg + except: + raise Exception("could not extract tris from mdump object") else: - raise StandardError,"unrecognized argument to dump.extra()" + raise Exception("unrecognized argument to dump.extra()") # -------------------------------------------------------------------- @@ -1205,7 +1107,7 @@ class tselect: snap.tselect = 1 data.nselect = len(data.snaps) data.aselect.all() - print "%d snapshots selected out of %d" % (data.nselect,data.nsnaps) + print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps)) # -------------------------------------------------------------------- @@ -1217,7 +1119,7 @@ class tselect: data.snaps[i].tselect = 1 data.nselect = 1 data.aselect.all() - print "%d snapshots selected out of %d" % (data.nselect,data.nsnaps) + print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps)) # -------------------------------------------------------------------- @@ -1226,7 +1128,7 @@ class tselect: for snap in data.snaps: snap.tselect = 0 data.nselect = 0 - print "%d snapshots selected out of %d" % (data.nselect,data.nsnaps) + print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps)) # -------------------------------------------------------------------- @@ -1242,7 +1144,7 @@ class tselect: snap.tselect = 0 data.nselect -= 1 data.aselect.all() - print "%d snapshots selected out of %d" % (data.nselect,data.nsnaps) + print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps)) # -------------------------------------------------------------------- @@ -1251,14 +1153,14 @@ class tselect: snaps = data.snaps cmd = "flag = " + teststr.replace("$t","snaps[i].time") ccmd = compile(cmd,'','single') - for i in xrange(data.nsnaps): + for i in range(data.nsnaps): if not snaps[i].tselect: continue - exec ccmd + exec(ccmd) if not flag: snaps[i].tselect = 0 data.nselect -= 1 data.aselect.all() - print "%d snapshots selected out of %d" % (data.nselect,data.nsnaps) + print("%d snapshots selected out of %d" % (data.nselect,data.nsnaps)) # -------------------------------------------------------------------- # atom selection class @@ -1275,12 +1177,12 @@ class aselect: if len(args) == 0: # all selected timesteps for snap in data.snaps: if not snap.tselect: continue - for i in xrange(snap.natoms): snap.aselect[i] = 1 + for i in range(snap.natoms): snap.aselect[i] = 1 snap.nselect = snap.natoms else: # one timestep n = data.findtime(args[0]) snap = data.snaps[n] - for i in xrange(snap.natoms): snap.aselect[i] = 1 + for i in range(snap.natoms): snap.aselect[i] = 1 snap.nselect = snap.natoms # -------------------------------------------------------------------- @@ -1303,29 +1205,29 @@ class aselect: if len(args) == 0: # all selected timesteps for snap in data.snaps: if not snap.tselect: continue - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue - exec ccmd + exec(ccmd) if not flag: snap.aselect[i] = 0 snap.nselect -= 1 - for i in xrange(data.nsnaps): + for i in range(data.nsnaps): if data.snaps[i].tselect: - print "%d atoms of %d selected in first step %d" % \ - (data.snaps[i].nselect,data.snaps[i].natoms,data.snaps[i].time) + print("%d atoms of %d selected in first step %d" % \ + (data.snaps[i].nselect,data.snaps[i].natoms,data.snaps[i].time)) break - for i in xrange(data.nsnaps-1,-1,-1): + for i in range(data.nsnaps-1,-1,-1): if data.snaps[i].tselect: - print "%d atoms of %d selected in last step %d" % \ - (data.snaps[i].nselect,data.snaps[i].natoms,data.snaps[i].time) + print("%d atoms of %d selected in last step %d" % \ + (data.snaps[i].nselect,data.snaps[i].natoms,data.snaps[i].time)) break else: # one timestep n = data.findtime(args[0]) snap = data.snaps[n] - for i in xrange(snap.natoms): + for i in range(snap.natoms): if not snap.aselect[i]: continue - exec ccmd + exec(ccmd) if not flag: snap.aselect[i] = 0 snap.nselect -= 1 diff --git a/tools/python/pizza/gnu.py b/tools/python/pizza/gnu.py index d99ab3811d..6e0fc1ee0b 100644 --- a/tools/python/pizza/gnu.py +++ b/tools/python/pizza/gnu.py @@ -6,17 +6,20 @@ # certain rights in this software. This software is distributed under # the GNU General Public License. +# for python3 compatibility +from __future__ import print_function + # gnu tool oneline = "Create plots via GnuPlot plotting program" docstr = """ -g = gnu() start up GnuPlot -g.stop() shut down GnuPlot process +g = gnu() start up GnuPlot +g.stop() shut down GnuPlot process g.plot(a) plot vector A against linear index -g.plot(a,b) plot B against A -g.plot(a,b,c,d,...) plot B against A, D against C, etc +g.plot(a,b) plot B against A +g.plot(a,b,c,d,...) plot B against A, D against C, etc g.mplot(M,N,S,"file",a,b,...) multiple plots saved to file0000.eps, etc each plot argument can be a tuple, list, or Numeric/NumPy vector @@ -29,21 +32,21 @@ g.mplot(M,N,S,"file",a,b,...) multiple plots saved to file0000.eps, etc g("plot 'file.dat' using 2:3 with lines") execute string in GnuPlot -g.enter() enter GnuPlot shell +g.enter() enter GnuPlot shell gnuplot> plot sin(x) with lines type commands directly to GnuPlot -gnuplot> exit, quit exit GnuPlot shell +gnuplot> exit, quit exit GnuPlot shell g.export("data",range(100),a,...) create file with columns of numbers all vectors must be of equal length could plot from file with GnuPlot command: plot 'data' using 1:2 with lines -g.select(N) figure N becomes the current plot +g.select(N) figure N becomes the current plot subsequent commands apply to this plot -g.hide(N) delete window for figure N -g.save("file") save current plot as file.eps +g.hide(N) delete window for figure N +g.save("file") save current plot as file.eps Set attributes for current plot: @@ -84,12 +87,13 @@ g.curve(N,'r') set color of curve N # Imports and external programs -import types, os +import os +import sys try: from DEFAULTS import PIZZA_GNUPLOT -except: PIZZA_GNUPLOT = "gnuplot" +except ImportError: PIZZA_GNUPLOT = "gnuplot -p" try: from DEFAULTS import PIZZA_GNUTERM -except: PIZZA_GNUTERM = "x11" +except ImportError: PIZZA_GNUTERM = "x11" # Class definition @@ -119,7 +123,10 @@ class gnu: def enter(self): while 1: - command = raw_input("gnuplot> ") + if sys.version_info[0] == 3: + command = input("gnuplot> ") + else: + command = raw_input("gnuplot> ") if command == "quit" or command == "exit": return self.__call__(command) @@ -133,7 +140,7 @@ class gnu: self.export(file,linear,vectors[0]) self.figures[self.current-1].ncurves = 1 else: - if len(vectors) % 2: raise StandardError,"vectors must come in pairs" + if len(vectors) % 2: raise Exception("vectors must come in pairs") for i in range(0,len(vectors),2): file = self.file + ".%d.%d" % (self.current,i/2+1) self.export(file,vectors[i],vectors[i+1]) @@ -167,13 +174,13 @@ class gnu: def export(self,filename,*vectors): n = len(vectors[0]) for vector in vectors: - if len(vector) != n: raise StandardError,"vectors must be same length" + if len(vector) != n: raise Exception("vectors must be same length") f = open(filename,'w') nvec = len(vectors) - for i in xrange(n): - for j in xrange(nvec): - print >>f,vectors[j][i], - print >>f + for i in range(n): + for j in range(nvec): + print(str(vectors[j][i])+" ",file=f,end='') + print ("",file=f) f.close() # -------------------------------------------------------------------- @@ -350,7 +357,7 @@ class gnu: self.__call__("set key off") cmd = 'plot ' - for i in range(fig.ncurves): + for i in range(int(fig.ncurves)): file = self.file + ".%d.%d" % (self.current,i+1) if len(fig.colors) > i and fig.colors[i]: cmd += "'" + file + "' using 1:2 with line %d, " % fig.colors[i] diff --git a/tools/python/pizza/pdbfile.py b/tools/python/pizza/pdbfile.py index 9b2238cbd6..efdf32fab1 100644 --- a/tools/python/pizza/pdbfile.py +++ b/tools/python/pizza/pdbfile.py @@ -6,6 +6,9 @@ # certain rights in this software. This software is distributed under # the GNU General Public License. +# for python3 compatibility +from __future__ import print_function + # pdb tool oneline = "Read, write PDB files in combo with LAMMPS snapshots" @@ -51,6 +54,7 @@ index,time,flag = p.iterator(1) # History # 8/05, Steve Plimpton (SNL): original version +# 3/17, Richard Berger (Temple U): improve Python 3 compatibility # ToDo list # for generic PDB file (no template) from a LJ unit system, @@ -64,7 +68,13 @@ index,time,flag = p.iterator(1) # Imports and external programs -import sys, types, glob, urllib +import sys, glob, urllib +PY3 = sys.version_info[0] == 3 + +if PY3: + string_types = str, +else: + string_types = basestring # Class definition @@ -74,7 +84,7 @@ class pdbfile: def __init__(self,*args): if len(args) == 1: - if type(args[0]) is types.StringType: + if type(args[0]) is string_types: filestr = args[0] self.data = None else: @@ -83,7 +93,7 @@ class pdbfile: elif len(args) == 2: filestr = args[0] self.data = args[1] - else: raise StandardError, "invalid args for pdb()" + else: raise Exception("invalid args for pdb()") # flist = full list of all PDB input file names # append .pdb if needed @@ -94,17 +104,17 @@ class pdbfile: for file in list: if '*' in file: flist += glob.glob(file) else: flist.append(file) - for i in xrange(len(flist)): + for i in range(len(flist)): if flist[i][-4:] != ".pdb": flist[i] += ".pdb" if len(flist) == 0: - raise StandardError,"no PDB file specified" + raise Exception("no PDB file specified") self.files = flist else: self.files = [] if len(self.files) > 1 and self.data: - raise StandardError, "cannot use multiple PDB files with data object" + raise Exception("cannot use multiple PDB files with data object") if len(self.files) == 0 and not self.data: - raise StandardError, "no input PDB file(s)" + raise Exception("no input PDB file(s)") # grab PDB file from http://rcsb.org if not a local file @@ -112,7 +122,7 @@ class pdbfile: try: open(self.files[0],'r').close() except: - print "downloading %s from http://rcsb.org" % self.files[0] + print("downloading %s from http://rcsb.org" % self.files[0]) fetchstr = "http://www.rcsb.org/pdb/cgi/export.cgi/%s?format=PDB&pdbId=2cpk&compression=None" % self.files[0] urllib.urlretrieve(fetchstr,self.files[0]) @@ -142,20 +152,20 @@ class pdbfile: which,time,flag = self.data.iterator(flag) if flag == -1: break self.convert(f,which) - print >>f,"END" - print time, + print("END",file=f) + print(time,end='') sys.stdout.flush() n += 1 else: for file in self.files: f.write(open(file,'r').read()) - print >>f,"END" - print file, + print("END",file=f) + print(file,end='') sys.stdout.flush() f.close() - print "\nwrote %d datasets to %s in PDB format" % (n,file) + print("\nwrote %d datasets to %s in PDB format" % (n,file)) # -------------------------------------------------------------------- # write series of numbered PDB files @@ -190,7 +200,7 @@ class pdbfile: self.convert(f,which) f.close() - print time, + print(time,end='') sys.stdout.flush() n += 1 @@ -210,12 +220,12 @@ class pdbfile: f = open(file,'w') f.write(open(infile,'r').read()) f.close() - print file, + print(file,end='') sys.stdout.flush() n += 1 - print "\nwrote %d datasets to %s*.pdb in PDB format" % (n,root) + print("\nwrote %d datasets to %s*.pdb in PDB format" % (n,root)) # -------------------------------------------------------------------- # write a single PDB file @@ -280,10 +290,10 @@ class pdbfile: if self.atomlines.has_key(id): (begin,end) = self.atomlines[id] line = "%s%8.3f%8.3f%8.3f%s" % (begin,atom[2],atom[3],atom[4],end) - print >>f,line, + print(line,file=f,end='') else: for atom in atoms: begin = "ATOM %6d %2d R00 1 " % (atom[0],atom[1]) middle = "%8.3f%8.3f%8.3f" % (atom[2],atom[3],atom[4]) end = " 1.00 0.00 NONE" - print >>f,begin+middle+end + print(begin+middle+end,file=f) diff --git a/tools/singularity/README.md b/tools/singularity/README.md index 100d367439..3f7b69d409 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -48,7 +48,7 @@ make | ------------------------------ | ---------------------------------------------- | | centos7.def | CentOS 7.x with EPEL enabled, no LaTeX | | centos8.def | CentOS 8.x with EPEL enabled | -| fedora32_mingw.def | Fedora 32 with MinGW cross-compiler toolchain | +| fedora34_mingw.def | Fedora 34 with MinGW cross-compiler toolchain | | ubuntu16.04.def | Ubuntu 16.04LTS with MPI == OpenMPI, no LaTeX | | ubuntu18.04.def | Ubuntu 18.04LTS with MPI == OpenMPI | | ubuntu18.04_amd_rocm.def | Ubuntu 18.04LTS with AMD ROCm toolkit | diff --git a/tools/singularity/fedora32_mingw.def b/tools/singularity/fedora34_mingw.def similarity index 86% rename from tools/singularity/fedora32_mingw.def rename to tools/singularity/fedora34_mingw.def index fbbce4f279..2f8118778f 100644 --- a/tools/singularity/fedora32_mingw.def +++ b/tools/singularity/fedora34_mingw.def @@ -1,15 +1,15 @@ BootStrap: docker -From: fedora:32 +From: fedora:34 %post dnf -y update dnf -y install vim-enhanced git file make cmake patch which file Lmod \ - ninja-build clang libomp-devel libubsan libasan libtsan diffutils \ - dos2unix findutils rsync python-devel libjpeg-devel libpng-devel \ + ninja-build clang clang-tools-extra libomp-devel libubsan libasan libtsan \ + diffutils dos2unix findutils rsync python-devel libjpeg-devel libpng-devel \ ccache gcc-c++ gcc-gfortran gdb valgrind eigen3-devel openblas-devel \ openmpi-devel mpich-devel fftw-devel voro++-devel gsl-devel hdf5-devel \ netcdf-devel netcdf-cxx-devel netcdf-mpich-devel netcdf-openmpi-devel \ - readline-devel python3-pyyaml \ + readline-devel python3-pyyaml python3-Cython \ mingw-filesystem-base mingw32-nsis mingw-binutils-generic \ mingw32-filesystem mingw32-pkg-config \ mingw64-filesystem mingw64-pkg-config \ @@ -23,6 +23,10 @@ From: fedora:32 mingw32-fftw mingw64-fftw \ mingw32-libjpeg-turbo mingw64-libjpeg-turbo \ mingw32-libpng mingw64-libpng \ + mingw32-python3 mingw64-python3 \ + mingw32-python3-numpy mingw64-python3-numpy \ + mingw32-python3-pyyaml mingw64-python3-pyyaml \ + mingw32-python3-setuptools mingw64-python3-setuptools \ mingw32-readline mingw64-readline \ mingw32-termcap mingw64-termcap \ mingw32-zlib mingw64-zlib \ @@ -44,10 +48,12 @@ From: fedora:32 # manually install Plumed mkdir plumed cd plumed - version=2.6.1 + version=2.7.1 curl -L -o plumed.tar.gz https://github.com/plumed/plumed2/releases/download/v${version}/plumed-src-${version}.tgz tar -xzf plumed.tar.gz cd plumed-${version} + # temporary fix for Plumed-2.7.1 (should do no harm on later versions) + sed -i '/^#include /a #include ' src/lepton/Operation.h ./configure --disable-doc --prefix=/usr make make install @@ -87,7 +93,7 @@ EOF CUSTOM_PROMPT_ENV=/.singularity.d/env/99-zz_custom_prompt.sh cat >$CUSTOM_PROMPT_ENV <