diff --git a/tools/i-pi/.vimrc b/tools/i-pi/.vimrc new file mode 100644 index 000000000..fd7d41af2 --- /dev/null +++ b/tools/i-pi/.vimrc @@ -0,0 +1,4 @@ +set tabstop=3 +set softtabstop=3 +set shiftwidth=3 +set expandtab diff --git a/tools/i-pi/MANIFEST.in b/tools/i-pi/MANIFEST.in new file mode 100644 index 000000000..9561fb106 --- /dev/null +++ b/tools/i-pi/MANIFEST.in @@ -0,0 +1 @@ +include README.rst diff --git a/tools/i-pi/README.rst b/tools/i-pi/README.rst new file mode 100644 index 000000000..8d10b343f --- /dev/null +++ b/tools/i-pi/README.rst @@ -0,0 +1,49 @@ +i-PI V1.0 -- LAMMPS +------------------- + +A Python interface for ab initio path integral molecular dynamics simulations. +i-PI is composed of a Python server (i-pi itself, that does not need to be +compiled but only requires a relatively recent version of Python and Numpy) +that propagates the (path integral) dynamics of the nuclei, and of an external +code that acts as client and computes the electronic energy and forces. + +This is typically a patched version of an electronic structure code, but a +simple self-contained Fortran driver that implements Lennard-Jones and +Silveira-Goldman potentials is included for test purposes. + +This folder contains a stripped-down version to be used with LAMMPS, and might +not contain all the features of the latest version. Please see +[http://epfl-cosmo.github.io/gle4md/index.html?page=ipi] or +[http://github.com/i-pi/i-pi] to obtain an up-to-date version. + + +Quick Installation and Test +--------------------------- + +Follow these instruction to test i-PI. These assume to be run from a Linux +environment, with a recent version of Python, Numpy and gfortran, and that +the terminal is initially in the i-pi package directory (the directory +containing this file). + +* Generate the driver code + +:: + +$ cd driver +$ make +$ cd .. + +* Run one of the examples + +This will first start the wrapper in the background, redirecting the output on +a log file, then run a couple of instances of the driver code and then follow +the progress of the wrapper by monitoring the log file:: + +$ cd examples/tutorial/tutorial-1/ +$ ../../../i-pi tutorial-1.xml > log & +$ ../../../drivers/driver.x -h localhost -p 31415 -m sg -o 15 & +$ ../../../drivers/driver.x -h localhost -p 31415 -m sg -o 15 & +$ tail -f log + +The monitoring can be interrupted with ``CTRL+C`` when the run has finished (5000 steps) + diff --git a/tools/i-pi/drivers/LJ.f90 b/tools/i-pi/drivers/LJ.f90 new file mode 100644 index 000000000..342425f29 --- /dev/null +++ b/tools/i-pi/drivers/LJ.f90 @@ -0,0 +1,215 @@ +! This performs the calculations necessary to run a Lennard-Jones (LJ) +! simulation. +! +! Copyright (C) 2013, Joshua More and Michele Ceriotti +! +! Permission is hereby granted, free of charge, to any person obtaining +! a copy of this software and associated documentation files (the +! "Software"), to deal in the Software without restriction, including +! without limitation the rights to use, copy, modify, merge, publish, +! distribute, sublicense, and/or sell copies of the Software, and to +! permit persons to whom the Software is furnished to do so, subject to +! the following conditions: +! +! The above copyright notice and this permission notice shall be included +! in all copies or substantial portions of the Software. +! +! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +! EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +! MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +! IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +! CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +! TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +! SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +! +! +! This contains the functions that calculate the potential, forces and +! virial tensor of a single-component LJ system. +! Includes functions which calculate the long-range correction terms for a +! simulation with a sharp nearest-neighbour cut-off. +! +! Functions: +! LJ_functions: Calculates the LJ pair potential and the magnitude of the +! forces acting on a pair of atoms. +! LJ_fij: Calculates the LJ pair potential and force vector for the +! interaction of a pair of atoms. +! LJ_longrange: Calculates the long range correction to the potential +! and virial. +! LJ_getall: Calculates the potential and virial of the system and the +! forces acting on all the atoms. + + MODULE LJ + USE DISTANCE + IMPLICIT NONE + + DOUBLE PRECISION, PARAMETER :: four_tau_by_3 = 8.3775804095727811d0 + + CONTAINS + + SUBROUTINE LJ_functions(sigma, eps, r, pot, force) + ! Calculates the magnitude of the LJ force and potential between + ! a pair of atoms at a given distance from each other. + ! + ! Args: + ! sigma: The LJ distance parameter. + ! eps: The LJ energy parameter. + ! r: The separation of the atoms. + ! pot: The LJ interaction potential. + ! force: The magnitude of the LJ force. + + DOUBLE PRECISION, INTENT(IN) :: sigma + DOUBLE PRECISION, INTENT(IN) :: eps + DOUBLE PRECISION, INTENT(IN) :: r + DOUBLE PRECISION, INTENT(OUT) :: pot + DOUBLE PRECISION, INTENT(OUT) :: force + + DOUBLE PRECISION sigma_by_r6 + + sigma_by_r6 = sigma/r + sigma_by_r6 = sigma_by_r6*sigma_by_r6*sigma_by_r6 + sigma_by_r6 = sigma_by_r6*sigma_by_r6 + + pot = 4*eps*(sigma_by_r6*(sigma_by_r6 - 1)) + force = 24*eps*(sigma_by_r6*(2*sigma_by_r6 - 1)/r) + + END SUBROUTINE + + SUBROUTINE LJ_fij(sigma, eps, rij, r, pot, fij) + ! This calculates the LJ potential energy and the magnitude and + ! direction of the force acting on a pair of atoms. + ! + ! Args: + ! sigma: The LJ distance parameter. + ! eps: The LJ energy parameter. + ! rij: The vector joining the two atoms. + ! r: The separation of the two atoms. + ! pot: The LJ interaction potential. + ! fij: The LJ force vector. + + DOUBLE PRECISION, INTENT(IN) :: sigma + DOUBLE PRECISION, INTENT(IN) :: eps + DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: rij + DOUBLE PRECISION, INTENT(IN) :: r + DOUBLE PRECISION, INTENT(OUT) :: pot + DOUBLE PRECISION, DIMENSION(3), INTENT(OUT) :: fij + + DOUBLE PRECISION f_tot + + CALL LJ_functions(sigma, eps, r, pot, f_tot) + fij = f_tot*rij/r + + END SUBROUTINE + + SUBROUTINE LJ_longrange(rc, sigma, eps, natoms, volume, pot_lr, vir_lr) + ! Calculates the long range correction to the total potential and + ! virial pressure. + ! + ! Uses the tail correction for a sharp cut-off, with no smoothing + ! function, as derived in Martyna and Hughes, Journal of Chemical + ! Physics, 110, 3275, (1999). + ! + ! Args: + ! rc: The cut-off radius. + ! sigma: The LJ distance parameter. + ! eps: The LJ energy parameter. + ! natoms: The number of atoms in the system. + ! volume: The volume of the system box. + ! pot_lr: The tail correction to the LJ interaction potential. + ! vir_lr: The tail correction to the LJ virial pressure. + + DOUBLE PRECISION, INTENT(IN) :: rc + DOUBLE PRECISION, INTENT(IN) :: sigma + DOUBLE PRECISION, INTENT(IN) :: eps + INTEGER, INTENT(IN) :: natoms + DOUBLE PRECISION, INTENT(IN) :: volume + DOUBLE PRECISION, INTENT(OUT) :: pot_lr + DOUBLE PRECISION, INTENT(OUT) :: vir_lr + + DOUBLE PRECISION sbyr, s3byr3, s6byr3, s6byr6, prefactor + + sbyr = sigma/rc + s3byr3 = sbyr*sbyr*sbyr + s6byr6 = s3byr3*s3byr3 + prefactor = four_tau_by_3*natoms*natoms*eps/volume + prefactor = prefactor*s3byr3*sigma*sigma*sigma + + pot_lr = prefactor*(s6byr6/3-1) + vir_lr = prefactor*(s6byr6-1) + pot_lr + + END SUBROUTINE + + SUBROUTINE LJ_getall(rc, sigma, eps, natoms, atoms, cell_h, cell_ih, index_list, n_list, pot, forces, virial) + ! Calculates the LJ potential energy and virial and the forces + ! acting on all the atoms. + ! + ! Args: + ! rc: The cut-off radius. + ! sigma: The LJ distance parameter. + ! eps: The LJ energy parameter. + ! natoms: The number of atoms in the system. + ! atoms: A vector holding all the atom positions. + ! cell_h: The simulation box cell vector matrix. + ! cell_ih: The inverse of the simulation box cell vector matrix. + ! index_list: A array giving the last index of n_list that + ! gives the neighbours of a given atom. + ! n_list: An array giving the indices of the atoms that neighbour + ! the atom determined by index_list. + ! pot: The total potential energy of the system. + ! forces: An array giving the forces acting on all the atoms. + ! virial: The virial tensor, not divided by the volume. + + DOUBLE PRECISION, INTENT(IN) :: rc + DOUBLE PRECISION, INTENT(IN) :: sigma + DOUBLE PRECISION, INTENT(IN) :: eps + INTEGER, INTENT(IN) :: natoms + DOUBLE PRECISION, DIMENSION(natoms,3), INTENT(IN) :: atoms + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_h + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_ih + INTEGER, DIMENSION(natoms), INTENT(IN) :: index_list + INTEGER, DIMENSION(natoms*(natoms-1)/2), INTENT(IN) :: n_list + DOUBLE PRECISION, INTENT(OUT) :: pot + DOUBLE PRECISION, DIMENSION(natoms,3), INTENT(OUT) :: forces + DOUBLE PRECISION, DIMENSION(3,3), INTENT(OUT) :: virial + + INTEGER i, j, k, l, start + DOUBLE PRECISION, DIMENSION(3) :: fij, rij + DOUBLE PRECISION r2, pot_ij, pot_lr, vir_lr, volume + + forces = 0.0d0 + pot = 0.0d0 + virial = 0.0d0 + + start = 1 + + DO i = 1, natoms - 1 + ! Only loops over the neigbour list, not all the atoms. + DO j = start, index_list(i) + CALL vector_separation(cell_h, cell_ih, atoms(i,:), atoms(n_list(j),:), rij, r2) + IF (r2 < rc*rc) THEN ! Only calculates contributions between neighbouring particles. + CALL LJ_fij(sigma, eps, rij, sqrt(r2), pot_ij, fij) + + forces(i,:) = forces(i,:) + fij + forces(n_list(j),:) = forces(n_list(j),:) - fij + pot = pot + pot_ij + DO k = 1, 3 + DO l = k, 3 + ! Only the upper triangular elements calculated. + virial(k,l) = virial(k,l) + fij(k)*rij(l) + ENDDO + ENDDO + ENDIF + ENDDO + start = index_list(i) + 1 + ENDDO + + ! Assuming an upper-triangular vector matrix for the simulation box. + volume = cell_h(1,1)*cell_h(2,2)*cell_h(3,3) + CALL LJ_longrange(rc, sigma, eps, natoms, volume, pot_lr, vir_lr) + pot = pot + pot_lr + DO k = 1, 3 + virial(k,k) = virial(k,k) + vir_lr + ENDDO + + END SUBROUTINE + + END MODULE diff --git a/tools/i-pi/drivers/Makefile b/tools/i-pi/drivers/Makefile new file mode 100644 index 000000000..ed0336f68 --- /dev/null +++ b/tools/i-pi/drivers/Makefile @@ -0,0 +1,42 @@ +# Makefile for the driver tests +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +.PHONY: all + +SOURCES=$(shell ls *.f90) +MODULES=distance.f90 LJ.f90 SG.f90 +OBJECTS=$(SOURCES:.f90=.o) sockets.o +all: modules sockets.o driver.x + +modules: $(MODULES) + gfortran -O3 -c $(MODULES) + +sockets.o: sockets.c + gcc -c -o sockets.o sockets.c + +driver.x: $(OBJECTS) + gfortran -O3 -o driver.x $(OBJECTS) + +%.o: %.f90 + gfortran -O3 -c $< + +clean: + rm *.o *.mod *.x diff --git a/tools/i-pi/drivers/README b/tools/i-pi/drivers/README new file mode 100644 index 000000000..563cbce9c --- /dev/null +++ b/tools/i-pi/drivers/README @@ -0,0 +1,14 @@ + -- Driver code directory -- + + * This gives simple test driver codes. + + * Files: + - LJ.f90: Calculates the Lennard-Jones potential/forces/virial. + - SG.f90: Calculates the Silvera-Goldman potential/forces/virial. + - distance.f90: Deals with calculating the separation between atoms and + the neighbour list calculation. + - sockets.c: Contains the functions to create the client socket and read from + and write to it. + - driver.f90: Socket interface for the driver codes. + - Makefile: A makefile that which compiles all the fortran code as + necessary. diff --git a/tools/i-pi/drivers/SG.f90 b/tools/i-pi/drivers/SG.f90 new file mode 100644 index 000000000..42d3e4945 --- /dev/null +++ b/tools/i-pi/drivers/SG.f90 @@ -0,0 +1,283 @@ +! This performs the calculations necessary to run a simulation using a +! Silvera-Goldman (SG) potential for para-hydrogen. See I. Silvera and V. +! Goldman, J. Chem. Phys., 69, 4209 (1978). +! +! Copyright (C) 2013, Joshua More and Michele Ceriotti +! +! Permission is hereby granted, free of charge, to any person obtaining +! a copy of this software and associated documentation files (the +! "Software"), to deal in the Software without restriction, including +! without limitation the rights to use, copy, modify, merge, publish, +! distribute, sublicense, and/or sell copies of the Software, and to +! permit persons to whom the Software is furnished to do so, subject to +! the following conditions: +! +! The above copyright notice and this permission notice shall be included +! in all copies or substantial portions of the Software. +! +! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +! EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +! MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +! IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +! CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +! TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +! SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +! +! +! This contains the functions that calculate the potential, forces and +! virial tensor of liquid para-hydrogen +! Includes functions which calculate the long-range correction terms for a +! simulation with a sharp nearest-neighbour cut-off. +! +! Functions: +! f_c: Calculates the damping function for the dispersive interactions +! at short range. +! exp_func: Calculates the short range repulsive part of the SG potential. +! SG_functions: Calculates the SG pair potential and the magnitude of the +! forces acting on a pair of atoms. +! SG_fij: Calculates the SG pair potential and force vector for the +! interaction of a pair of atoms. +! SG_longrange: Calculates the long range correction to the potential +! and virial. +! SG_getall: Calculates the potential and virial of the system and the +! forces acting on all the atoms. + + MODULE SG + USE DISTANCE + IMPLICIT NONE + + ! Parameters of the SG potential. This potential is of the form: + ! V(r) = exp(alpha - beta*r - delta*r**2) - + ! (C_6/r**6 + C_8/r**8 - C_9/r**9 + C_10/r**10)*f_c(r) + ! where f_c(r) = exp(-(rc_exp/r - 1)**2) if r <= rc_exp + ! = 1 otherwise + DOUBLE PRECISION, PARAMETER :: tau = 6.2831853071795862d0 !If you don't know why I used this name, you're not a real nerd + DOUBLE PRECISION, PARAMETER :: alpha = 1.713d0 + DOUBLE PRECISION, PARAMETER :: beta = 1.5671d0 + DOUBLE PRECISION, PARAMETER :: delta = 0.00993d0 + DOUBLE PRECISION, PARAMETER :: delta_diff = delta*2.0d0 + DOUBLE PRECISION, PARAMETER :: rc_exp = 8.32d0 + DOUBLE PRECISION, PARAMETER :: C_6 = 12.14d0 + DOUBLE PRECISION, PARAMETER :: C_8 = 215.2d0 + DOUBLE PRECISION, PARAMETER :: C_9 = 143.1d0 + DOUBLE PRECISION, PARAMETER :: C_10 = 4813.9d0 + DOUBLE PRECISION, PARAMETER :: C_6_diff = C_6*6d0 + DOUBLE PRECISION, PARAMETER :: C_8_diff = C_8*8d0 + DOUBLE PRECISION, PARAMETER :: C_9_diff = C_9*9d0 + DOUBLE PRECISION, PARAMETER :: C_10_diff = C_10*10d0 + DOUBLE PRECISION, PARAMETER :: C_6_int = C_6/3d0 + DOUBLE PRECISION, PARAMETER :: C_8_int = C_8/5d0 + DOUBLE PRECISION, PARAMETER :: C_9_int = C_9/6d0 + DOUBLE PRECISION, PARAMETER :: C_10_int = C_10/7d0 + + CONTAINS + + SUBROUTINE f_c(r, long_range, long_range_diff) + ! Calculates the damping function for the dispersive interactions + ! at short range. + ! + ! Args: + ! r: The separation of the atoms. + ! long_range: The value of the damping function. + ! long_range_diff: The differential of the damping function + ! with respect to r. + + DOUBLE PRECISION, INTENT(IN) :: r + DOUBLE PRECISION, INTENT(OUT) :: long_range + DOUBLE PRECISION, INTENT(OUT) :: long_range_diff + + DOUBLE PRECISION dist_frac + + IF (r > rc_exp) THEN + long_range = 1.0d0 + long_range_diff = 0.0d0 + ELSE + dist_frac = rc_exp/r - 1.0d0 + long_range = dexp(-(dist_frac)**2) + long_range_diff = 2.0d0*dist_frac*rc_exp*long_range/(r*r) + END IF + + END SUBROUTINE + + SUBROUTINE exp_func(r, pot, force) + ! Calculates the repulsive part of the SG force and potential + ! between a pair of atoms at a given distance from each other. + ! + ! Args: + ! r: The separation of the atoms. + ! pot: The repulsive part of the potential energy. + ! force: The magnitude of the repulsive part of the force. + + DOUBLE PRECISION, INTENT(IN) :: r + DOUBLE PRECISION, INTENT(OUT) :: pot + DOUBLE PRECISION, INTENT(OUT) :: force + + pot = dexp(alpha - r*(beta + delta*r)) + force = (beta + delta_diff*r)*pot + + END SUBROUTINE + + SUBROUTINE SG_functions(r, pot, force) + ! Calculates the magnitude of the SG force and potential between + ! a pair of atoms at a given distance from each other. + ! + ! Args: + ! r: The separation of the atoms. + ! pot: The SG interaction potential. + ! force: The magnitude of the SG force. + + DOUBLE PRECISION, INTENT(IN) :: r + DOUBLE PRECISION, INTENT(OUT) :: pot + DOUBLE PRECISION, INTENT(OUT) :: force + + DOUBLE PRECISION long_range, long_range_diff, disp, disp_diff, exp_pot, exp_force + DOUBLE PRECISION onr3, onr6, onr9, onr10 + + onr3 = 1/(r*r*r) + onr6 = onr3*onr3 + onr9 = onr6*onr3 + onr10 = onr9/r + + CALL exp_func(r, exp_pot, exp_force) + CALL f_c(r, long_range, long_range_diff) + + disp = -(C_6*onr6 + C_8*onr9*r - C_9*onr9 + C_10*onr10) + disp_diff = (C_6_diff*onr6/r + C_8_diff*onr9 - C_9_diff*onr10 + C_10_diff*onr10/r) + + pot = exp_pot + disp*long_range + force = exp_force - disp_diff*long_range - disp*long_range_diff + + END SUBROUTINE + + SUBROUTINE SG_fij(rij, r, pot, fij) + ! This calculates the SG potential energy and the magnitude and + ! direction of the force acting on a pair of atoms. + ! + ! Args: + ! rij: The vector joining the two atoms. + ! r: The separation of the two atoms. + ! pot: The SG interaction potential. + ! fij: The SG force vector. + + DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: rij + DOUBLE PRECISION, INTENT(IN) :: r + DOUBLE PRECISION, INTENT(OUT) :: pot + DOUBLE PRECISION, DIMENSION(3), INTENT(OUT) :: fij + + DOUBLE PRECISION f_tot + + CALL SG_functions(r, pot, f_tot) + fij = f_tot*rij/r + + END SUBROUTINE + + SUBROUTINE SG_longrange(rc, natoms, volume, pot_lr, vir_lr) + ! Calculates the long range correction to the total potential and + ! virial pressure. + ! + ! Uses the tail correction for a sharp cut-off, with no smoothing + ! function, as derived in Martyna and Hughes, Journal of Chemical + ! Physics, 110, 3275, (1999). + ! + ! Note that we will assume that rc > rc_exp, and that + ! exp(alpha - beta*rc - delta*rc**2) << 0, so we can neglect the + ! contribution of the repulsive potential and the dispersion + ! damping function in the long range correction terms. + ! + ! Args: + ! rc: The cut-off radius. + ! natoms: The number of atoms in the system. + ! volume: The volume of the system box. + ! pot_lr: The tail correction to the SG interaction potential. + ! vir_lr: The tail correction to the SG virial pressure. + + DOUBLE PRECISION, INTENT(IN) :: rc + INTEGER, INTENT(IN) :: natoms + DOUBLE PRECISION, INTENT(IN) :: volume + DOUBLE PRECISION, INTENT(OUT) :: pot_lr + DOUBLE PRECISION, INTENT(OUT) :: vir_lr + + DOUBLE PRECISION onr3, onr5, onr6, onr7, prefactor + + onr3 = 1/(rc*rc*rc) + onr6 = onr3*onr3 + onr5 = onr6*rc + onr7 = onr6/rc + prefactor = tau*natoms*natoms/volume + + pot_lr = prefactor*(-C_6_int*onr3 - C_8_int*onr5 + C_9_int*onr6 - C_10_int*onr7) + vir_lr = prefactor*(-C_6*onr3 - C_8*onr5 + C_9*onr6 - C_10*onr7)/3 + pot_lr + + END SUBROUTINE + + SUBROUTINE SG_getall(rc, natoms, atoms, cell_h, cell_ih, index_list, n_list, pot, forces, virial) + ! Calculates the SG potential energy and virial and the forces + ! acting on all the atoms. + ! + ! Args: + ! rc: The cut-off radius. + ! natoms: The number of atoms in the system. + ! atoms: A vector holding all the atom positions. + ! cell_h: The simulation box cell vector matrix. + ! cell_ih: The inverse of the simulation box cell vector matrix. + ! index_list: A array giving the last index of n_list that + ! gives the neighbours of a given atom. + ! n_list: An array giving the indices of the atoms that neighbour + ! the atom determined by index_list. + ! pot: The total potential energy of the system. + ! forces: An array giving the forces acting on all the atoms. + ! virial: The virial tensor, not divided by the volume. + + DOUBLE PRECISION, INTENT(IN) :: rc + INTEGER, INTENT(IN) :: natoms + DOUBLE PRECISION, DIMENSION(natoms,3), INTENT(IN) :: atoms + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_h + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_ih + INTEGER, DIMENSION(natoms), INTENT(IN) :: index_list + INTEGER, DIMENSION(natoms*(natoms-1)/2), INTENT(IN) :: n_list + DOUBLE PRECISION, INTENT(OUT) :: pot + DOUBLE PRECISION, DIMENSION(natoms,3), INTENT(OUT) :: forces + DOUBLE PRECISION, DIMENSION(3,3), INTENT(OUT) :: virial + + INTEGER i, j, k, l, start + DOUBLE PRECISION, DIMENSION(3) :: fij, rij + DOUBLE PRECISION r2, pot_ij, pot_lr, vir_lr, volume + + forces = 0.0d0 + pot = 0.0d0 + virial = 0.0d0 + + start = 1 + + DO i = 1, natoms - 1 + ! Only loops over the neigbour list, not all the atoms. + DO j = start, index_list(i) + CALL vector_separation(cell_h, cell_ih, atoms(i,:), atoms(n_list(j),:), rij, r2) + IF (r2 < rc*rc) THEN ! Only calculates contributions between neighbouring particles. + CALL SG_fij(rij, sqrt(r2), pot_ij, fij) + + forces(i,:) = forces(i,:) + fij + forces(n_list(j),:) = forces(n_list(j),:) - fij + pot = pot + pot_ij + DO k = 1, 3 + DO l = k, 3 + ! Only the upper triangular elements calculated. + virial(k,l) = virial(k,l) + fij(k)*rij(l) + ENDDO + ENDDO + ENDIF + ENDDO + start = index_list(i) + 1 + ENDDO + + ! Assuming an upper-triangular vector matrix for the simulation box. + volume = cell_h(1,1)*cell_h(2,2)*cell_h(3,3) + CALL SG_longrange(rc, natoms, volume, pot_lr, vir_lr) + pot = pot + pot_lr + DO k = 1, 3 + virial(k,k) = virial(k,k) + vir_lr + ENDDO + + END SUBROUTINE + + END MODULE diff --git a/tools/i-pi/drivers/distance.f90 b/tools/i-pi/drivers/distance.f90 new file mode 100644 index 000000000..aa9cde321 --- /dev/null +++ b/tools/i-pi/drivers/distance.f90 @@ -0,0 +1,174 @@ +! This contains the algorithms needed to calculate the distance between atoms. +! +! Copyright (C) 2013, Joshua More and Michele Ceriotti +! +! Permission is hereby granted, free of charge, to any person obtaining a copy +! of this software and associated documentation files (the "Software"), to deal +! in the Software without restriction, including without limitation the rights +! to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +! copies of the Software, and to permit persons to whom the Software is +! furnished to do so, subject to the following conditions: + +! The above copyright notice and this permission notice shall be included in +! all copies or substantial portions of the Software. + +! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +! THE SOFTWARE. +! +! Functions: +! vector_separation: Calculates the vector separating two atoms. +! separation: Calculates the square distance between two vectors. +! nearest_neighbours: Generates arrays to calculate the pairs of atoms within +! a certain radius of each other. + + MODULE DISTANCE + IMPLICIT NONE + + CONTAINS + + SUBROUTINE vector_separation(cell_h, cell_ih, ri, rj, rij, r2) + ! Calculates the vector separating two atoms. + ! + ! Note that minimum image convention is used, so only the image of + ! atom j that is the shortest distance from atom i is considered. + ! + ! Also note that while this may not work if the simulation + ! box is highly skewed from orthorhombic, as + ! in this case it is possible to return a distance less than the + ! nearest neighbour distance. However, this will not be of + ! importance unless the cut-off radius is more than half the + ! width of the shortest face-face distance of the simulation box, + ! which should never be the case. + ! + ! Args: + ! cell_h: The simulation box cell vector matrix. + ! cell_ih: The inverse of the simulation box cell vector matrix. + ! ri: The position vector of atom i. + ! rj: The position vector of atom j + ! rij: The vector separating atoms i and j. + ! r2: The square of the distance between atoms i and j. + + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_h + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_ih + DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: ri + DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: rj + DOUBLE PRECISION, DIMENSION(3), INTENT(OUT) :: rij + DOUBLE PRECISION, INTENT(OUT) :: r2 + + INTEGER k + DOUBLE PRECISION, DIMENSION(3) :: sij + ! The separation in a basis where the simulation box + ! is a unit cube. + + sij = matmul(cell_ih, ri - rj) + DO k = 1, 3 + ! Finds the smallest separation of all the images of atom i and j + sij(k) = sij(k) - dnint(sij(k)) + ENDDO + rij = matmul(cell_h, sij) + r2 = dot_product(rij,rij) + + END SUBROUTINE + + SUBROUTINE separation(cell_h, cell_ih, ri, rj, r2) + ! Calculates the squared distance between two position vectors. + ! + ! Note that minimum image convention is used, so only the image of + ! atom j that is the shortest distance from atom i is considered. + ! + ! Also note that while this may not work if the simulation + ! box is highly skewed from orthorhombic, as + ! in this case it is possible to return a distance less than the + ! nearest neighbour distance. However, this will not be of + ! importance unless the cut-off radius is more than half the + ! width of the shortest face-face distance of the simulation box, + ! which should never be the case. + ! + ! Args: + ! cell_h: The simulation box cell vector matrix. + ! cell_ih: The inverse of the simulation box cell vector matrix. + ! ri: The position vector of atom i. + ! rj: The position vector of atom j + ! r2: The square of the distance between atoms i and j. + + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_h + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_ih + DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: ri + DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: rj + DOUBLE PRECISION, INTENT(OUT) :: r2 + + INTEGER k + ! The separation in a basis where the simulation box + ! is a unit cube. + DOUBLE PRECISION, DIMENSION(3) :: sij + DOUBLE PRECISION, DIMENSION(3) :: rij + + sij = matmul(cell_ih, ri - rj) + DO k = 1, 3 + ! Finds the smallest separation of all the images of atom i and j + sij(k) = sij(k) - dnint(sij(k)) + ENDDO + rij = matmul(cell_h, sij) + r2 = dot_product(rij, rij) + + END SUBROUTINE + + SUBROUTINE nearest_neighbours(rn, natoms, atoms, cell_h, cell_ih, index_list, n_list) + ! Creates a list of all the pairs of atoms that are closer together + ! than a certain distance. + ! + ! This takes all the positions, and calculates which ones are + ! shorter than the distance rn. This creates two vectors, index_list + ! and n_list. index_list(i) gives the last index of n_list that + ! corresponds to a neighbour of atom i. + ! + ! + ! Args: + ! rn: The nearest neighbour list cut-off parameter. This should + ! be larger than the potential cut-off radius. + ! natoms: The number of atoms in the system. + ! atoms: A vector holding all the atom positions. + ! cell_h: The simulation box cell vector matrix. + ! cell_ih: The inverse of the simulation box cell vector matrix. + ! index_list: A array giving the last index of n_list that + ! gives the neighbours of a given atom. Essentially keeps + ! track of how many atoms neighbour a given atom. + ! n_list: An array giving the indices of the atoms that neighbour + ! the atom determined by index_list. Essentially keeps track + ! of which atoms neighbour a given atom. + + DOUBLE PRECISION, INTENT(IN) :: rn + INTEGER, INTENT(IN) :: natoms + DOUBLE PRECISION, DIMENSION(:,:), INTENT(IN) :: atoms + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_h + DOUBLE PRECISION, DIMENSION(3,3), INTENT(IN) :: cell_ih + INTEGER, DIMENSION(natoms), INTENT(OUT) :: index_list + INTEGER, DIMENSION(natoms*(natoms-1)/2), INTENT(OUT) :: n_list + + INTEGER :: i, j + DOUBLE PRECISION r2 + + index_list(1) = 0 + + DO i = 1, natoms - 1 + DO j = i + 1, natoms + CALL separation(cell_h, cell_ih, atoms(i,:), atoms(j,:), r2) + IF (r2 < rn*rn) THEN + ! We have found an atom that neighbours atom i, so the + ! i-th index of index_list is incremented by one, and a new + ! entry is added to n_list. + index_list(i) = index_list(i) + 1 + n_list(index_list(i)) = j + ENDIF + ENDDO + index_list(i+1) = index_list(i) + ENDDO + + END SUBROUTINE + + END MODULE diff --git a/tools/i-pi/drivers/driver.f90 b/tools/i-pi/drivers/driver.f90 new file mode 100644 index 000000000..9ff992dab --- /dev/null +++ b/tools/i-pi/drivers/driver.f90 @@ -0,0 +1,309 @@ +! The main program which runs our driver test case potentials +! +! Copyright (C) 2013, Joshua More and Michele Ceriotti +! +! Permission is hereby granted, free of charge, to any person obtaining +! a copy of this software and associated documentation files (the +! "Software"), to deal in the Software without restriction, including +! without limitation the rights to use, copy, modify, merge, publish, +! distribute, sublicense, and/or sell copies of the Software, and to +! permit persons to whom the Software is furnished to do so, subject to +! the following conditions: +! +! The above copyright notice and this permission notice shall be included +! in all copies or substantial portions of the Software. +! +! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +! EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +! MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +! IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +! CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +! TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +! SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +! +! +! Currently the potentials implemented are the Lennard-Jones +! potential, the Silvera-Goldman para-hydrogen potential and +! the ideal gas (i.e. no interaction at all) + + PROGRAM DRIVER + USE LJ + USE SG + IMPLICIT NONE + + ! SOCKET VARIABLES + INTEGER, PARAMETER :: MSGLEN=12 ! length of the headers of the driver/wrapper communication protocol + INTEGER socket, inet, port ! socket ID & address of the server + CHARACTER*1024 :: host + + ! COMMAND LINE PARSING + CHARACTER*1024 :: cmdbuffer, vops + INTEGER ccmd, vstyle + LOGICAL verbose + INTEGER commas(4), par_count ! stores the index of commas in the parameter string + DOUBLE PRECISION vpars(4) ! array to store the parameters of the potential + + ! SOCKET COMMUNICATION BUFFERS + CHARACTER*12 :: header + LOGICAL :: isinit=.false., hasdata=.false. + INTEGER cbuf + CHARACTER*2048 :: initbuffer ! it's unlikely a string this large will ever be passed... + DOUBLE PRECISION, ALLOCATABLE :: msgbuffer(:) + + ! PARAMETERS OF THE SYSTEM (CELL, ATOM POSITIONS, ...) + DOUBLE PRECISION sigma, eps, rc, rn, ks ! potential parameters + INTEGER nat + DOUBLE PRECISION pot + DOUBLE PRECISION, ALLOCATABLE :: atoms(:,:), forces(:,:) + DOUBLE PRECISION cell_h(3,3), cell_ih(3,3), virial(3,3) + DOUBLE PRECISION volume + + ! NEIGHBOUR LIST ARRAYS + INTEGER, DIMENSION(:), ALLOCATABLE :: n_list, index_list + DOUBLE PRECISION init_volume, init_rc ! needed to correctly adjust the cut-off radius for variable cell dynamics + DOUBLE PRECISION, ALLOCATABLE :: last_atoms(:,:) ! Holds the positions when the neighbour list is created + DOUBLE PRECISION displacement ! Tracks how far each atom has moved since the last call of nearest_neighbours + + INTEGER i + + ! parse the command line parameters + ! intialize defaults + ccmd = 0 + inet = 1 + host = "localhost"//achar(0) + port = 31415 + verbose = .false. + par_count = 0 + vstyle = -1 + + DO i = 1, IARGC() + CALL GETARG(i, cmdbuffer) + IF (cmdbuffer == "-u") THEN ! flag for unix socket + inet = 0 + ccmd = 0 + ELSEIF (cmdbuffer == "-h") THEN ! read the hostname + ccmd = 1 + ELSEIF (cmdbuffer == "-p") THEN ! reads the port number + ccmd = 2 + ELSEIF (cmdbuffer == "-m") THEN ! reads the style of the potential function + ccmd = 3 + ELSEIF (cmdbuffer == "-o") THEN ! reads the parameters + ccmd = 4 + ELSEIF (cmdbuffer == "-v") THEN ! flag for verbose standard output + verbose = .true. + ELSE + IF (ccmd == 0) THEN + WRITE(*,*) " Unrecognized command line argument", ccmd + WRITE(*,*) " SYNTAX: driver.x [-u] -h hostname -p port -m [gas|lj|sg|harm] -o 'comma_separated_parameters' [-v] " + WRITE(*,*) "" + WRITE(*,*) " For LJ potential use -o sigma,epsilon,cutoff " + WRITE(*,*) " For SG potential use -o cutoff " + WRITE(*,*) " For 1D harmonic oscillator use -o k " + WRITE(*,*) " For the ideal gas, no options needed! " + CALL EXIT(-1) + ENDIF + IF (ccmd == 1) THEN + host = trim(cmdbuffer)//achar(0) + ELSEIF (ccmd == 2) THEN + READ(cmdbuffer,*) port + ELSEIF (ccmd == 3) THEN + IF (trim(cmdbuffer) == "lj") THEN + vstyle = 1 + ELSEIF (trim(cmdbuffer) == "sg") THEN + vstyle = 2 + ELSEIF (trim(cmdbuffer) == "harm") THEN + vstyle = 3 + ELSEIF (trim(cmdbuffer) == "gas") THEN + vstyle = 0 ! ideal gas + ELSE + WRITE(*,*) " Unrecognized potential type ", trim(cmdbuffer) + WRITE(*,*) " Use -m [gas|lj|sg|harm] " + CALL EXIT(-1) + ENDIF + ELSEIF (ccmd == 4) THEN + par_count = 1 + commas(1) = 0 + DO WHILE (index(cmdbuffer(commas(par_count)+1:), ',') > 0) + commas(par_count + 1) = index(cmdbuffer(commas(par_count)+1:), ',') + commas(par_count) + READ(cmdbuffer(commas(par_count)+1:commas(par_count + 1)-1),*) vpars(par_count) + par_count = par_count + 1 + ENDDO + READ(cmdbuffer(commas(par_count)+1:),*) vpars(par_count) + ENDIF + ccmd = 0 + ENDIF + ENDDO + + IF (vstyle == -1) THEN + WRITE(*,*) " Error, type of potential not specified." + WRITE(*,*) " SYNTAX: driver.x [-u] -h hostname -p port -m [gas|lj|sg|harm] -o 'comma_separated_parameters' [-v] " + WRITE(*,*) "" + WRITE(*,*) " For LJ potential use -o sigma,epsilon,cutoff " + WRITE(*,*) " For SG potential use -o cutoff " + WRITE(*,*) " For the ideal gas, no options needed! " + CALL EXIT(-1) + ELSEIF (vstyle == 0) THEN + IF (par_count /= 0) THEN + WRITE(*,*) "Error: no initialization string needed for ideal gas." + CALL EXIT(-1) + ENDIF + isinit = .true. + ELSEIF (vstyle == 1) THEN + IF (par_count /= 3) THEN + WRITE(*,*) "Error: parameters not initialized correctly." + WRITE(*,*) "For LJ potential use -o sigma,epsilon,cutoff " + CALL EXIT(-1) ! Note that if initialization from the wrapper is implemented this exit should be removed. + ENDIF + sigma = vpars(1) + eps = vpars(2) + rc = vpars(3) + rn = rc*1.2 + isinit = .true. + ELSEIF (vstyle == 2) THEN + IF (par_count /= 1) THEN + WRITE(*,*) "Error: parameters not initialized correctly." + WRITE(*,*) "For SG potential use -o cutoff " + CALL EXIT(-1) ! Note that if initialization from the wrapper is implemented this exit should be removed. + ENDIF + rc = vpars(1) + rn = rc*1.2 + isinit = .true. + ELSEIF (vstyle == 3) THEN + IF (par_count /= 1) THEN + WRITE(*,*) "Error: parameters not initialized correctly." + WRITE(*,*) "For 1D harmonic potential use -o k " + CALL EXIT(-1) ! Note that if initialization from the wrapper is implemented this exit should be removed. + ENDIF + ks = vpars(1) + isinit = .true. + ENDIF + + IF (verbose) THEN + WRITE(*,*) " DRIVER - Connecting to host ", trim(host) + IF (inet > 0) THEN + WRITE(*,*) " on port ", port, " using an internet socket." + ELSE + WRITE(*,*) " using an UNIX socket." + ENDIF + ENDIF + + ! Calls the interface to the C sockets to open a communication channel + CALL open_socket(socket, inet, port, host) + nat = -1 + DO WHILE (.true.) ! Loops forever (or until the wrapper ends!) + + ! Reads from the socket one message header + CALL readbuffer(socket, header, MSGLEN) + IF (verbose) WRITE(*,*) " Message from server: ", trim(header) + + IF (trim(header) == "STATUS") THEN + ! The wrapper is inquiring on what we are doing + IF (.not. isinit) THEN + CALL writebuffer(socket,"NEEDINIT ",MSGLEN) ! Signals that we need initialization data + ELSEIF (hasdata) THEN + CALL writebuffer(socket,"HAVEDATA ",MSGLEN) ! Signals that we are done computing and can return forces + ELSE + CALL writebuffer(socket,"READY ",MSGLEN) ! We are idling and eager to compute something + ENDIF + ELSEIF (trim(header) == "INIT") THEN ! The driver is kindly providing a string for initialization + CALL readbuffer(socket, cbuf, 4) + CALL readbuffer(socket, initbuffer, cbuf) + IF (verbose) WRITE(*,*) " Initializing system from wrapper, using ", trim(initbuffer) + isinit=.true. ! We actually do nothing with this string, thanks anyway. Could be used to pass some information (e.g. the input parameters, or the index of the replica, from the driver + ELSEIF (trim(header) == "POSDATA") THEN ! The driver is sending the positions of the atoms. Here is where we do the calculation! + + ! Parses the flow of data from the socket + CALL readbuffer(socket, cell_h, 9*8) ! Cell matrix + CALL readbuffer(socket, cell_ih, 9*8) ! Inverse of the cell matrix (so we don't have to invert it every time here) + + ! The wrapper uses atomic units for everything, and row major storage. + ! At this stage one should take care that everything is converted in the + ! units and storage mode used in the driver. + cell_h = transpose(cell_h) + cell_ih = transpose(cell_ih) + ! We assume an upper triangular cell-vector matrix + volume = cell_h(1,1)*cell_h(2,2)*cell_h(3,3) + + CALL readbuffer(socket, cbuf, 4) ! The number of atoms in the cell + IF (nat < 0) THEN ! Assumes that the number of atoms does not change throughout a simulation, so only does this once + nat = cbuf + IF (verbose) WRITE(*,*) " Allocating buffer and data arrays, with ", nat, " atoms" + ALLOCATE(msgbuffer(3*nat)) + ALLOCATE(atoms(nat,3)) + ALLOCATE(forces(nat,3)) + ENDIF + + CALL readbuffer(socket, msgbuffer, nat*3*8) + DO i = 1, nat + atoms(i,:) = msgbuffer(3*(i-1)+1:3*i) + ENDDO + + IF (vstyle == 0) THEN ! ideal gas, so no calculation done + pot = 0 + forces = 0 + virial = 0 + ELSEIF (vstyle == 3) THEN ! 1D harmonic potential, so only uses the first position variable + pot = 0.5*ks*atoms(1,1)**2 + forces = 0 + forces(1,1) = -ks*atoms(1,1) + virial = 0 + virial(1,1) = forces(1,1)*atoms(1,1) + ELSE + IF ((allocated(n_list) .neqv. .true.)) THEN + IF (verbose) WRITE(*,*) " Allocating neighbour lists." + ALLOCATE(n_list(nat*(nat-1)/2)) + ALLOCATE(index_list(nat)) + ALLOCATE(last_atoms(nat,3)) + CALL nearest_neighbours(rn, nat, atoms, cell_h, cell_ih, index_list, n_list) + last_atoms = atoms + init_volume = volume + init_rc = rc + ENDIF + + ! Checking to see if we need to re-calculate the neighbour list + rc = init_rc*(volume/init_volume)**(1.0/3.0) + DO i = 1, nat + CALL separation(cell_h, cell_ih, atoms(i,:), last_atoms(i,:), displacement) + ! Note that displacement is the square of the distance moved by atom i since the last time the neighbour list was created. + IF (4*displacement > (rn-rc)*(rn-rc)) THEN + IF (verbose) WRITE(*,*) " Recalculating neighbour lists" + CALL nearest_neighbours(rn, nat, atoms, cell_h, cell_ih, index_list, n_list) + last_atoms = atoms + rn = 1.2*rc + EXIT + ENDIF + ENDDO + + IF (vstyle == 1) THEN + CALL LJ_getall(rc, sigma, eps, nat, atoms, cell_h, cell_ih, index_list, n_list, pot, forces, virial) + ELSEIF (vstyle == 2) THEN + CALL SG_getall(rc, nat, atoms, cell_h, cell_ih, index_list, n_list, pot, forces, virial) + ENDIF + IF (verbose) WRITE(*,*) " Calculated energy is ", pot + ENDIF + hasdata = .true. ! Signal that we have data ready to be passed back to the wrapper + ELSEIF (trim(header) == "GETFORCE") THEN ! The driver calculation is finished, it's time to send the results back to the wrapper + + ! Data must be re-formatted (and units converted) in the units and shapes used in the wrapper + DO i = 1, nat + msgbuffer(3*(i-1)+1:3*i) = forces(i,:) + ENDDO + virial = transpose(virial) + + CALL writebuffer(socket,"FORCEREADY ",MSGLEN) + CALL writebuffer(socket,pot,8) ! Writing the potential + CALL writebuffer(socket,nat,4) ! Writing the number of atoms + CALL writebuffer(socket,msgbuffer,3*nat*8) ! Writing the forces + CALL writebuffer(socket,virial,9*8) ! Writing the virial tensor, NOT divided by the volume + cbuf = 7 ! Size of the "extras" string + CALL writebuffer(socket,cbuf,4) ! This would write out the "extras" string, but in this case we only use a dummy string. + CALL writebuffer(socket,"nothing",7) + + hasdata = .false. + ELSE + WRITE(*,*) " Unexpected header ", header + CALL EXIT(-1) + ENDIF + ENDDO + IF (nat > 0) DEALLOCATE(atoms, forces, msgbuffer) + END PROGRAM diff --git a/tools/i-pi/drivers/sockets.c b/tools/i-pi/drivers/sockets.c new file mode 100644 index 000000000..6fda1b64e --- /dev/null +++ b/tools/i-pi/drivers/sockets.c @@ -0,0 +1,147 @@ +/* A minimal wrapper for socket communication. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Contains both the functions that transmit data to the socket and read the data +back out again once finished, and the function which opens the socket initially. +Can be linked to a FORTRAN code that does not support sockets natively. + +Functions: + error: Prints an error message and then exits. + open_socket_: Opens a socket with the required host server, socket type and + port number. + write_buffer_: Writes a string to the socket. + read_buffer_: Reads data from the socket. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void error(const char *msg) +// Prints an error message and then exits. +{ perror(msg); exit(-1); } + +void open_socket_(int *psockfd, int* inet, int* port, char* host) +/* Opens a socket. + +Note that fortran passes an extra argument for the string length, but this is +ignored here for C compatibility. + +Args: + psockfd: The id of the socket that will be created. + inet: An integer that determines whether the socket will be an inet or unix + domain socket. Gives unix if 0, inet otherwise. + port: The port number for the socket to be created. Low numbers are often + reserved for important channels, so use of numbers of 4 or more digits is + recommended. + host: The name of the host server. +*/ + +{ + int sockfd, portno, n; + struct hostent *server; + + struct sockaddr * psock; int ssock; + + if (*inet>0) + { // creates an internet socket + struct sockaddr_in serv_addr; psock=(struct sockaddr *)&serv_addr; ssock=sizeof(serv_addr); + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) error("Error opening socket"); + + server = gethostbyname(host); + if (server == NULL) + { + fprintf(stderr, "Error opening socket: no such host %s \n", host); + exit(-1); + } + + bzero((char *) &serv_addr, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); + serv_addr.sin_port = htons(*port); + if (connect(sockfd, psock, ssock) < 0) error("Error opening socket: wrong host address, or broken connection"); + } + else + { // creates a unix socket + struct sockaddr_un serv_addr; psock=(struct sockaddr *)&serv_addr; ssock=sizeof(serv_addr); + sockfd = socket(AF_UNIX, SOCK_STREAM, 0); + bzero((char *) &serv_addr, sizeof(serv_addr)); + serv_addr.sun_family = AF_UNIX; + strcpy(serv_addr.sun_path, "/tmp/ipi_"); + strcpy(serv_addr.sun_path+9, host); + if (connect(sockfd, psock, ssock) < 0) error("Error opening socket: wrong host address, or broken connection"); + } + + *psockfd=sockfd; +} + +void writebuffer_(int *psockfd, char *data, int* plen) +/* Writes to a socket. + +Args: + psockfd: The id of the socket that will be written to. + data: The data to be written to the socket. + plen: The length of the data in bytes. +*/ + +{ + int n; + int sockfd=*psockfd; + int len=*plen; + + n = write(sockfd,data,len); + if (n < 0) error("Error writing to socket: server has quit or connection broke"); +} + + +void readbuffer_(int *psockfd, char *data, int* plen) +/* Reads from a socket. + +Args: + psockfd: The id of the socket that will be read from. + data: The storage array for data read from the socket. + plen: The length of the data in bytes. +*/ + +{ + int n, nr; + int sockfd=*psockfd; + int len=*plen; + + n = nr = read(sockfd,data,len); + + while (nr>0 && n. + +.PHONY: all clean graphene h2o-piglet_2 h2o-piglet_4 h2o-piglet_8 h2o-rpc h2o-pimd +all: graphene h2o-piglet_2 h2o-piglet_4 h2o-piglet_8 h2o-rpc h2o-pimd + +LAMMPS:=../../../../../src/lmp_ubuntu +IPI:=../../../i-pi + +define run_lammps + for i in `seq 1 $1`; do \ + $(LAMMPS) < $2 & \ + done; +endef +-include make.in + +graphene: + cd graphene; $(IPI) input.xml & \ + sleep 20; \ + $(call run_lammps,4,in.kappa.Graphene) \ + wait + +h2o-piglet_2: + cd h2o-piglet.2; $(IPI) input.xml & sleep 5; \ + $(call run_lammps,2,in.water) \ + wait + +h2o-piglet_4: + cd h2o-piglet.4; $(IPI) input.xml & sleep 5; \ + $(call run_lammps,4,in.water) \ + wait + +h2o-piglet_8: + cd h2o-piglet.8; $(IPI) input.xml & sleep 5; \ + $(call run_lammps,4,in.water) \ + wait + +h2o-pimd: + cd h2o-pimd; $(IPI) input.xml & sleep 5; \ + $(call run_lammps,4,in.water) \ + wait + +h2o-rpc: + cd h2o-pimd-rpc; $(IPI) input.xml & sleep 5; \ + $(call run_lammps,4,in.water_shortrange) \ + $(call run_lammps,1,in.water_longrange) \ + wait + +clean: + rm -f */gle_lammps.* */RESTART */EXIT */log.lammps; \ + cd h2o-pimd; \ + rm -f RESTART EXIT log.lammps no_rpc.*; cd ..; \ + cd h2o-pimd-rpc; \ + rm -f RESTART EXIT log.lammps rpc.*; cd ..; \ + cd graphene; \ + rm -f graph.* RESTART EXIT log.lammps graphene.lammpstraj nohup.out; cd .. diff --git a/tools/i-pi/examples/lammps/README b/tools/i-pi/examples/lammps/README new file mode 100644 index 000000000..0bb5a74fa --- /dev/null +++ b/tools/i-pi/examples/lammps/README @@ -0,0 +1,70 @@ + -- Examples of i-PI working with LAMMPS -- + + -- Example with Tersoff graphene potential -- + + Uses the Tersoff parameters of Lindsay and Broido PRB 81, 205441 (2010) + to run a short simulation of graphene with the LAMMPS MD code. + + -- Example with the q-TIP4P-F water potential -- + + * This gives an example of water with the q-TIP4P-F potential + of Scott Habershon, Thomas E. Markland and David E. Manolopoulos, + J. Chem. Phys., 131, 024501, (2009). + + * State point: (N, V, T) = (216 water molecules, 43737 a_0**3, 298 K) + + * This demonstrates the convergence of the kinetic and potential energy + using the ring polymer contraction (RPC) method of Thomas E. Markland and + David E. Manolopoulos, J. Chem. Phys. 129, 024105, (2008), and + the PIGLET method of Michele Ceriotti and + David Manolopoulos, Phys. Rev. Lett., 109, 100604, (2012). + + +** Run the examples automatically: + + * First, it is necessary to patch and compile LAMMPS, and create a make.in + file containing the path to the executable and i-pi, e.g. + +LAMMPS:=~/bin/lmp_serial +IPI:=~/bin/i-pi + + * The runs can be done automatically using the Makefile provided. The make + targets are self-explanatory. To run the RPC example, for instance, just type: + +$ make h2o-rpc + + * To clean up output files: + +$ make clean + + +** Run the examples manually: + + * Go back to the example directory and run + +$ python path/i-pi input.xml + + the wrapper will start and sit waiting on the UDS /tmp/ipi. + + * Open a separate terminal and run the LAMMPS driver code using: + +$ path/lammps/src/lmp_serial < in.water + + For the RPC run, instead use: + +$ path/lammps/src/lmp_serial < in.water_longrange +$ path/lammps/src/lmp_serial < in.water_shortrange + + You can run multiple instances of the code; it is so fast that parallel + scaling won't be appreciable. + + * If your system does not support Unix domain sockets, just set in input.xml + port_no + + To make the client socket connect, the in.water file should + be changed so that it has the line: + + fix 1 all driver hostname port_no + + where hostname is the address the socket is binding to; either graphene, piglet_2, + piglet_4, piglet_8, rpc_long, rpc_short or no_rpc depending on the run. diff --git a/tools/i-pi/examples/lammps/h2o-piglet.2/data.water b/tools/i-pi/examples/lammps/h2o-piglet.2/data.water new file mode 100644 index 000000000..13c75e993 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.2/data.water @@ -0,0 +1,1331 @@ +LAMMPS Description + + 648 atoms + 432 bonds + 216 angles + + 2 atom types + 1 bond types + 1 angle types + + 0 35.233 xlo xhi + 0 35.233 ylo yhi + 0 35.233 zlo zhi + +Masses + + 1 15.9994 + 2 1.0080 + +Bond Coeffs + + 1 1.78 0.2708585 -0.327738785 0.231328959 + +Angle Coeffs + + 1 0.0700 107.400000 + +Atoms + + 1 1 1 -1.1128 3.84600000 5.67200001 1.32300000 + 2 1 2 0.5564 2.97900000 7.05400000 0.85700000 + 3 1 2 0.5564 5.52500001 5.69700001 0.45100000 + 4 2 1 -1.1128 34.55700001 34.34100000 3.07800000 + 5 2 2 0.5564 33.72200001 34.68900000 4.84000001 + 6 2 2 0.5564 36.02900000 33.22000001 3.71100001 + 7 3 1 -1.1128 5.59100000 1.96299999 13.47700000 + 8 3 2 0.5564 7.26500000 1.86400000 13.85100001 + 9 3 2 0.5564 5.00899999 3.55500000 13.91599999 + 10 4 1 -1.1128 1.06000000 2.06100000 21.71800001 + 11 4 2 0.5564 0.75700000 0.26100000 21.82000000 + 12 4 2 0.5564 0.21300001 3.01299999 23.04700000 + 13 5 1 -1.1128 1.20000000 1.33700000 29.00599999 + 14 5 2 0.5564 0.81800000 1.88399999 30.73200000 + 15 5 2 0.5564 2.88300001 1.82500000 29.01100000 + 16 6 1 -1.1128 1.33100001 1.38599999 34.30600001 + 17 6 2 0.5564 2.39200001 2.89799999 34.84600000 + 18 6 2 0.5564 0.81400000 0.53200001 35.83600000 + 19 7 1 -1.1128 31.45100000 10.20100000 0.72599999 + 20 7 2 0.5564 32.28199999 10.87699999 -0.75000000 + 21 7 2 0.5564 30.91999999 11.59399999 1.67700000 + 22 8 1 -1.1128 0.83600000 10.80800001 4.29800000 + 23 8 2 0.5564 0.30500000 10.64300001 2.79300000 + 24 8 2 0.5564 -0.35600001 10.33400000 5.52400000 + 25 9 1 -1.1128 34.38100001 5.97900000 9.19400000 + 26 9 2 0.5564 33.61600000 7.67300000 8.85700000 + 27 9 2 0.5564 35.11500000 5.25999999 7.61800001 + 28 10 1 -1.1128 33.21200000 6.48000000 24.27799999 + 29 10 2 0.5564 31.62400000 6.90800001 23.52100001 + 30 10 2 0.5564 32.54400000 4.99000000 24.98200000 + 31 11 1 -1.1128 1.99200000 9.00199999 26.86300000 + 32 11 2 0.5564 1.85600000 10.17500000 25.57899999 + 33 11 2 0.5564 0.51900000 8.09899999 26.38599999 + 34 12 1 -1.1128 2.05400000 8.66000000 32.51499999 + 35 12 2 0.5564 2.16699999 8.72700000 30.49400000 + 36 12 2 0.5564 2.37400001 10.51300000 33.03799999 + 37 13 1 -1.1128 3.40200000 16.63900001 3.00800000 + 38 13 2 0.5564 4.12700001 15.87200001 4.44600001 + 39 13 2 0.5564 2.90500001 18.33899999 3.15999999 + 40 14 1 -1.1128 4.22200000 15.44400000 8.07200000 + 41 14 2 0.5564 5.21100000 16.75600000 8.29900001 + 42 14 2 0.5564 2.56000000 15.49200001 8.86000000 + 43 15 1 -1.1128 2.83100000 9.24599999 16.48800000 + 44 15 2 0.5564 2.86900001 8.02300001 18.05000000 + 45 15 2 0.5564 3.96000000 8.46700001 15.15400000 + 46 16 1 -1.1128 5.56300000 6.00300000 20.90700000 + 47 16 2 0.5564 4.65300000 4.63800000 21.48000000 + 48 16 2 0.5564 6.40500000 6.20800000 22.52899999 + 49 17 1 -1.1128 2.08700001 13.37000000 22.91299999 + 50 17 2 0.5564 2.83200000 14.80400001 23.42200000 + 51 17 2 0.5564 1.43400000 13.50900000 21.19599999 + 52 18 1 -1.1128 3.36900000 17.88600000 25.10900001 + 53 18 2 0.5564 3.65500000 17.20000000 26.76599999 + 54 18 2 0.5564 4.77200001 18.97699999 24.49999999 + 55 19 1 -1.1128 34.76400000 20.80300000 0.94800001 + 56 19 2 0.5564 35.20999999 21.26700001 2.81599999 + 57 19 2 0.5564 35.96200001 21.72599999 0.13099999 + 58 20 1 -1.1128 2.83600000 24.17799999 15.22900000 + 59 20 2 0.5564 2.79500000 22.34599999 14.87600001 + 60 20 2 0.5564 2.41399999 24.11500000 17.13000001 + 61 21 1 -1.1128 33.00000000 24.48100000 15.23000000 + 62 21 2 0.5564 34.63999999 24.80400001 15.01299999 + 63 21 2 0.5564 32.40100000 25.76400000 14.29500001 + 64 22 1 -1.1128 0.40399999 26.77900001 23.39999999 + 65 22 2 0.5564 1.35300001 27.24800000 24.98700001 + 66 22 2 0.5564 1.54600001 28.05000000 22.31700001 + 67 23 1 -1.1128 34.22200000 21.38000000 25.41799999 + 68 23 2 0.5564 35.66899999 20.15100000 25.31700001 + 69 23 2 0.5564 32.96000000 21.18000000 23.99200000 + 70 24 1 -1.1128 33.25900000 17.43800000 32.48000000 + 71 24 2 0.5564 33.31399999 18.78200000 33.88300001 + 72 24 2 0.5564 32.74300001 18.18100001 30.87100000 + 73 25 1 -1.1128 4.46300000 21.97900000 3.93600000 + 74 25 2 0.5564 5.85600000 23.08400001 3.39999999 + 75 25 2 0.5564 3.98600000 22.18000000 5.60200000 + 76 26 1 -1.1128 6.25800000 25.85100001 8.52000000 + 77 26 2 0.5564 5.76700000 27.69300001 8.47600000 + 78 26 2 0.5564 7.20200001 25.50600000 10.18600000 + 79 27 1 -1.1128 0.60099999 29.73699999 12.74700001 + 80 27 2 0.5564 -0.68500000 30.84200000 12.34999999 + 81 27 2 0.5564 1.33600000 30.71600000 14.03099999 + 82 28 1 -1.1128 7.56300000 28.19100001 24.33300000 + 83 28 2 0.5564 9.20100000 28.82800000 24.68400000 + 84 28 2 0.5564 7.38100001 27.62100000 22.79900000 + 85 29 1 -1.1128 3.65300000 27.10900001 27.77200001 + 86 29 2 0.5564 5.12600000 27.01500000 26.77200001 + 87 29 2 0.5564 3.03099999 28.75600000 27.69800000 + 88 30 1 -1.1128 2.59600001 23.99100001 32.47600000 + 89 30 2 0.5564 2.87900000 24.79099999 30.85899999 + 90 30 2 0.5564 4.00300000 22.91299999 32.70099999 + 91 31 1 -1.1128 3.08300000 31.31700001 3.64399999 + 92 31 2 0.5564 4.13300000 30.58900001 2.53900001 + 93 31 2 0.5564 4.21800000 32.17300001 5.03700001 + 94 32 1 -1.1128 4.66100001 30.55500000 9.36799999 + 95 32 2 0.5564 3.18400001 29.84300000 10.13200000 + 96 32 2 0.5564 4.35800000 32.44800000 9.12600000 + 97 33 1 -1.1128 3.46499999 32.53700000 15.77800000 + 98 33 2 0.5564 5.07200000 31.81899999 15.90300000 + 99 33 2 0.5564 4.05500001 34.25699999 15.28400000 + 100 34 1 -1.1128 4.21500000 29.15299999 20.31700001 + 101 34 2 0.5564 3.65799999 30.17600000 18.84200000 + 102 34 2 0.5564 4.95899999 30.29100000 21.44900001 + 103 35 1 -1.1128 1.12600000 31.33300000 28.76800001 + 104 35 2 0.5564 2.39500000 31.12399999 29.92500000 + 105 35 2 0.5564 0.76800001 33.09199999 28.89799999 + 106 36 1 -1.1128 4.88100000 32.61600000 32.30200000 + 107 36 2 0.5564 6.58800000 32.91100000 31.72500001 + 108 36 2 0.5564 4.48599999 34.03700001 33.24900001 + 109 37 1 -1.1128 8.96200001 5.55600000 0.15100000 + 110 37 2 0.5564 9.65200000 6.99100001 0.85899999 + 111 37 2 0.5564 9.17300001 4.47700000 1.64500000 + 112 38 1 -1.1128 1.83300001 3.51799999 5.67900001 + 113 38 2 0.5564 2.88900000 2.73100000 6.78800000 + 114 38 2 0.5564 2.78900000 4.18700000 4.14700000 + 115 39 1 -1.1128 10.51000001 34.72599999 13.07300001 + 116 39 2 0.5564 11.91999999 34.11800000 11.91900001 + 117 39 2 0.5564 11.29500001 34.96800000 14.74100000 + 118 40 1 -1.1128 7.21200000 0.04199999 22.45399999 + 119 40 2 0.5564 6.92400000 0.47000000 24.17200000 + 120 40 2 0.5564 8.31900000 1.22799999 21.65300000 + 121 41 1 -1.1128 6.36500000 2.01000000 27.54400000 + 122 41 2 0.5564 5.95400000 3.58500000 26.85199999 + 123 41 2 0.5564 7.75800001 2.54900000 28.69600000 + 124 42 1 -1.1128 10.83300001 3.14000000 30.78699999 + 125 42 2 0.5564 12.69700001 2.97500000 30.86700000 + 126 42 2 0.5564 10.38899999 3.70000001 32.40399999 + 127 43 1 -1.1128 8.68400000 9.34200001 3.91200001 + 128 43 2 0.5564 6.98500000 9.25600001 4.77299999 + 129 43 2 0.5564 8.68400000 10.80899999 3.01100000 + 130 44 1 -1.1128 4.87299999 9.91900001 7.70700000 + 131 44 2 0.5564 3.69800000 9.77100000 6.19400000 + 132 44 2 0.5564 5.04700000 11.96100000 7.62400000 + 133 45 1 -1.1128 10.03099999 5.01800000 9.69900000 + 134 45 2 0.5564 9.67500001 3.38199999 10.34000000 + 135 45 2 0.5564 9.13200000 5.98700001 10.82500000 + 136 46 1 -1.1128 11.24599999 3.91800000 21.92900000 + 137 46 2 0.5564 12.61400001 2.77000000 22.34100000 + 138 46 2 0.5564 12.07300001 5.68600001 21.49699999 + 139 47 1 -1.1128 6.82500000 7.16400000 25.70799999 + 140 47 2 0.5564 8.03600000 8.37400001 25.98000001 + 141 47 2 0.5564 5.20600001 7.90000000 25.89099999 + 142 48 1 -1.1128 10.17099999 12.81100001 0.29500001 + 143 48 2 0.5564 10.03300000 12.81800000 -1.60900000 + 144 48 2 0.5564 9.87999999 14.49200001 0.48000000 + 145 49 1 -1.1128 8.19000000 17.40200000 1.25299999 + 146 49 2 0.5564 9.47199999 18.53100000 1.25299999 + 147 49 2 0.5564 6.35100000 17.81700000 1.56800001 + 148 50 1 -1.1128 11.23300000 16.18800001 8.29900001 + 149 50 2 0.5564 10.29100000 17.68900000 8.16600001 + 150 50 2 0.5564 12.76800001 17.12300001 8.73299999 + 151 51 1 -1.1128 6.38599999 8.00199999 12.84600000 + 152 51 2 0.5564 7.70099999 8.89600000 13.65500000 + 153 51 2 0.5564 5.59100000 8.87699999 11.51900000 + 154 52 1 -1.1128 8.18400001 10.41900000 18.84799999 + 155 52 2 0.5564 9.49800000 9.43400000 19.90500001 + 156 52 2 0.5564 6.88200000 9.02699999 18.94800001 + 157 53 1 -1.1128 10.80600000 14.43100000 21.32799999 + 158 53 2 0.5564 9.17700001 13.53100000 20.67000000 + 159 53 2 0.5564 11.34400000 15.69600000 20.44800000 + 160 54 1 -1.1128 9.23700000 13.92800000 30.34100000 + 161 54 2 0.5564 10.77900001 14.83900000 30.52199999 + 162 54 2 0.5564 9.96500000 13.19199999 28.89900000 + 163 55 1 -1.1128 10.91800000 21.70700000 1.86400000 + 164 55 2 0.5564 10.28000000 23.44900001 2.27900000 + 165 55 2 0.5564 12.70799999 21.45600000 1.74900000 + 166 56 1 -1.1128 9.35300001 16.12500000 13.92699999 + 167 56 2 0.5564 9.93799999 17.59399999 14.61800001 + 168 56 2 0.5564 9.51799999 16.36000001 12.24400000 + 169 57 1 -1.1128 10.37099999 11.10700000 14.26800000 + 170 57 2 0.5564 9.64399999 10.40600001 15.85899999 + 171 57 2 0.5564 9.43400000 12.52300000 14.11699999 + 172 58 1 -1.1128 3.35100000 22.76899999 20.19599999 + 173 58 2 0.5564 2.05500001 23.68600001 21.50300001 + 174 58 2 0.5564 2.45200000 21.40100000 19.41300000 + 175 59 1 -1.1128 6.83600000 21.32900000 23.19899999 + 176 59 2 0.5564 8.24900001 20.84799999 22.32000001 + 177 59 2 0.5564 5.66800001 21.84099999 21.88600000 + 178 60 1 -1.1128 4.60399999 15.64900000 30.04300000 + 179 60 2 0.5564 6.45300001 15.21699999 30.20700000 + 180 60 2 0.5564 3.82200001 14.76199999 31.56200000 + 181 61 1 -1.1128 7.12500000 19.97600001 9.42100001 + 182 61 2 0.5564 5.91800000 20.45300001 10.72999999 + 183 61 2 0.5564 8.09899999 21.49600001 9.49100000 + 184 62 1 -1.1128 9.06299999 25.91200001 13.18600000 + 185 62 2 0.5564 10.34999999 26.57199999 12.36700001 + 186 62 2 0.5564 9.67999999 24.36700001 13.69700001 + 187 63 1 -1.1128 8.02200000 22.34299999 17.04199999 + 188 63 2 0.5564 9.14400000 23.36700001 18.07399999 + 189 63 2 0.5564 6.56200000 23.46200000 16.85199999 + 190 64 1 -1.1128 10.76199999 26.28499999 19.96299999 + 191 64 2 0.5564 11.03600000 27.96599999 20.53800000 + 192 64 2 0.5564 11.07800000 25.40100000 21.45600000 + 193 65 1 -1.1128 9.15800000 22.90199999 28.39100000 + 194 65 2 0.5564 8.21900000 23.52800001 27.08499999 + 195 65 2 0.5564 8.08900000 21.76000000 29.50900000 + 196 66 1 -1.1128 6.21900000 20.15800000 31.92100000 + 197 66 2 0.5564 5.63500000 18.51099999 31.16100000 + 198 66 2 0.5564 7.53000000 19.62400000 33.07100000 + 199 67 1 -1.1128 11.19100001 31.50900000 2.61700000 + 200 67 2 0.5564 10.46000001 32.21399999 4.10800000 + 201 67 2 0.5564 13.17600000 31.75099999 2.57700000 + 202 68 1 -1.1128 4.74799999 0.05500001 8.60500000 + 203 68 2 0.5564 5.38000000 0.51700000 10.18300000 + 204 68 2 0.5564 6.05000000 -0.30600001 7.48000000 + 205 69 1 -1.1128 8.69500000 30.80899999 15.73100000 + 206 69 2 0.5564 9.18899999 32.10300000 14.49500000 + 207 69 2 0.5564 8.44699999 29.06900000 14.86800000 + 208 70 1 -1.1128 10.12799999 31.40200000 20.76599999 + 209 70 2 0.5564 9.45600000 30.90500001 19.15500000 + 210 70 2 0.5564 9.01999999 32.73100000 21.41500000 + 211 71 1 -1.1128 12.23800001 30.16200000 25.83699999 + 212 71 2 0.5564 11.41799999 30.90800001 27.10999999 + 213 71 2 0.5564 12.39600001 31.33100001 24.67800000 + 214 72 1 -1.1128 10.39500000 32.53700000 30.62400000 + 215 72 2 0.5564 11.04199999 34.33899999 30.75099999 + 216 72 2 0.5564 11.37800001 31.48599999 31.53800000 + 217 73 1 -1.1128 10.43800000 3.62599999 5.08700001 + 218 73 2 0.5564 12.43500001 4.08200000 5.13600000 + 219 73 2 0.5564 9.82200001 4.28400000 6.68100000 + 220 74 1 -1.1128 14.76199999 3.40100000 13.77599999 + 221 74 2 0.5564 16.51799999 3.82400000 13.37600000 + 222 74 2 0.5564 13.75200000 4.75700000 12.96400000 + 223 75 1 -1.1128 12.38199999 1.01200001 17.64300001 + 224 75 2 0.5564 13.34599999 1.99700000 16.44400000 + 225 75 2 0.5564 11.93100000 2.13300000 18.99800001 + 226 76 1 -1.1128 15.27799999 1.29300000 24.55900000 + 227 76 2 0.5564 16.07100000 0.94600000 26.36500000 + 228 76 2 0.5564 15.79399999 0.19899999 23.49900000 + 229 77 1 -1.1128 22.22600000 31.62700000 24.71199999 + 230 77 2 0.5564 23.33800001 32.59500000 23.87600001 + 231 77 2 0.5564 22.16100000 30.05300000 24.13200000 + 232 78 1 -1.1128 15.63999999 1.84700001 32.71700000 + 233 78 2 0.5564 17.48800000 2.47300000 31.87400000 + 234 78 2 0.5564 16.40300001 0.86900001 34.26700001 + 235 79 1 -1.1128 14.85800001 10.19899999 2.75400001 + 236 79 2 0.5564 13.36000001 10.71199999 2.28199999 + 237 79 2 0.5564 14.56000000 9.31600000 4.55900000 + 238 80 1 -1.1128 15.71700000 8.46900000 10.73900000 + 239 80 2 0.5564 17.32300000 9.58100000 10.87500000 + 240 80 2 0.5564 14.57400000 9.63100000 10.22099999 + 241 81 1 -1.1128 15.24800000 10.39800000 16.52500001 + 242 81 2 0.5564 16.32400001 9.18100001 16.14899999 + 243 81 2 0.5564 14.17200000 10.48800000 15.09800001 + 244 82 1 -1.1128 13.22600000 8.43800000 20.80100001 + 245 82 2 0.5564 14.04300000 8.99600000 19.29500001 + 246 82 2 0.5564 14.66100001 7.80200000 22.09300000 + 247 83 1 -1.1128 10.17300001 10.96100000 25.87500000 + 248 83 2 0.5564 11.47700000 10.22300000 26.94000000 + 249 83 2 0.5564 11.26900000 10.73800000 24.34299999 + 250 84 1 -1.1128 12.79200000 7.73699999 29.17300001 + 251 84 2 0.5564 12.19899999 6.03799999 29.47499999 + 252 84 2 0.5564 14.42700000 7.44999999 29.61700000 + 253 85 1 -1.1128 15.18000000 19.49800000 3.57800000 + 254 85 2 0.5564 14.88300001 17.59600001 4.08000001 + 255 85 2 0.5564 16.75400001 19.57899999 2.62599999 + 256 86 1 -1.1128 12.51700000 11.09300000 7.70099999 + 257 86 2 0.5564 12.22400001 12.77800000 7.55500000 + 258 86 2 0.5564 11.15000000 10.39299999 7.05700000 + 259 87 1 -1.1128 16.26600000 16.27099999 10.75800001 + 260 87 2 0.5564 16.50700001 15.79500000 12.76800001 + 261 87 2 0.5564 17.72500001 16.97699999 10.29200001 + 262 88 1 -1.1128 14.06900000 18.39900001 18.89700000 + 263 88 2 0.5564 15.51300000 17.52300000 18.15500000 + 264 88 2 0.5564 14.95800001 18.70900000 20.67300000 + 265 89 1 -1.1128 14.09899999 15.48000000 25.51000001 + 266 89 2 0.5564 13.69800000 16.87200001 26.93799999 + 267 89 2 0.5564 12.56700000 15.37900000 24.44400000 + 268 90 1 -1.1128 13.30900000 17.57400000 30.29200001 + 269 90 2 0.5564 14.93700001 16.93399999 30.81000000 + 270 90 2 0.5564 13.96900001 19.49400000 30.01200001 + 271 91 1 -1.1128 18.37099999 23.25699999 0.92500000 + 272 91 2 0.5564 19.47899999 23.48000000 2.32099999 + 273 91 2 0.5564 19.08700001 24.32499999 -0.36900000 + 274 92 1 -1.1128 12.10000000 21.72999999 11.35500000 + 275 92 2 0.5564 13.14100001 22.28700000 12.74300001 + 276 92 2 0.5564 13.46700001 22.23600000 10.24400000 + 277 93 1 -1.1128 12.16300001 23.29000000 23.59699999 + 278 93 2 0.5564 11.32400001 22.73600001 24.94900000 + 279 93 2 0.5564 13.88200000 22.87200001 23.84000001 + 280 94 1 -1.1128 20.17300001 26.76100001 22.62800000 + 281 94 2 0.5564 20.20600001 26.53200001 20.79200000 + 282 94 2 0.5564 21.55600000 25.74200000 23.38899999 + 283 95 1 -1.1128 16.70099999 21.16500000 22.60500000 + 284 95 2 0.5564 18.02800000 20.68600001 23.84799999 + 285 95 2 0.5564 17.10400000 22.86599999 21.94900000 + 286 96 1 -1.1128 11.39100000 26.46099999 33.70499999 + 287 96 2 0.5564 9.84099999 27.19199999 34.04800001 + 288 96 2 0.5564 11.77599999 25.53999999 35.24300000 + 289 97 1 -1.1128 9.89799999 25.98900000 4.55300001 + 290 97 2 0.5564 8.90199999 26.13099999 6.03900000 + 291 97 2 0.5564 10.28700000 27.80600000 4.37600000 + 292 98 1 -1.1128 14.30800000 26.96000000 10.87699999 + 293 98 2 0.5564 15.30200000 27.40500000 12.17300001 + 294 98 2 0.5564 15.46300000 26.15100000 9.63299999 + 295 99 1 -1.1128 13.43300000 22.96000000 16.90400000 + 296 99 2 0.5564 13.40900000 24.13099999 18.13200000 + 297 99 2 0.5564 13.62400000 21.19100001 17.52000000 + 298 100 1 -1.1128 16.40900000 26.76800001 26.87500000 + 299 100 2 0.5564 17.58999999 26.98700001 25.43100000 + 300 100 2 0.5564 14.75099999 27.70300000 26.23000000 + 301 101 1 -1.1128 14.40500000 22.73299999 29.89200000 + 302 101 2 0.5564 15.42300000 23.07900000 28.49400000 + 303 101 2 0.5564 12.82600001 23.25900000 29.41600000 + 304 102 1 -1.1128 6.90500001 29.40800000 0.74900000 + 305 102 2 0.5564 8.42800001 30.48300000 1.56700000 + 306 102 2 0.5564 6.35300001 30.81400000 -0.44400000 + 307 103 1 -1.1128 9.18899999 34.15900001 6.50900000 + 308 103 2 0.5564 10.19800000 34.19300000 8.00199999 + 309 103 2 0.5564 9.89000001 35.69200000 5.78500000 + 310 104 1 -1.1128 14.25600001 32.31600000 9.36900000 + 311 104 2 0.5564 15.73299999 32.86700000 9.48599999 + 312 104 2 0.5564 14.75400001 30.67000000 10.09000000 + 313 105 1 -1.1128 14.71400000 30.84099999 16.51600000 + 314 105 2 0.5564 13.74799999 29.55099999 17.27900000 + 315 105 2 0.5564 13.21800000 31.93300001 16.61400001 + 316 106 1 -1.1128 18.40900000 33.64100000 20.61100001 + 317 106 2 0.5564 19.60099999 32.27400001 21.11500000 + 318 106 2 0.5564 17.36000001 32.65500000 19.51799999 + 319 107 1 -1.1128 16.06200001 28.63800000 32.20700000 + 320 107 2 0.5564 14.64800000 27.95800001 33.25299999 + 321 107 2 0.5564 15.75200000 28.01400000 30.52199999 + 322 108 1 -1.1128 16.20000000 30.89499999 1.47300000 + 323 108 2 0.5564 16.62599999 29.96800000 -0.13000001 + 324 108 2 0.5564 17.16699999 29.83300001 2.92699999 + 325 109 1 -1.1128 20.27799999 3.52899999 6.04800001 + 326 109 2 0.5564 20.97699999 3.61100001 4.57500001 + 327 109 2 0.5564 21.31200000 4.51300000 7.25100000 + 328 110 1 -1.1128 23.07900000 5.77800000 10.40800000 + 329 110 2 0.5564 24.65000001 6.25900000 10.83800000 + 330 110 2 0.5564 22.34200001 7.60900000 10.17799999 + 331 111 1 -1.1128 19.58100000 2.03099999 12.10999999 + 332 111 2 0.5564 19.03900000 1.08200000 10.44000000 + 333 111 2 0.5564 21.14100001 2.99100001 11.85100001 + 334 112 1 -1.1128 22.00500001 3.22300000 23.17799999 + 335 112 2 0.5564 21.42899999 4.09000000 24.55399999 + 336 112 2 0.5564 20.65400001 1.79099999 22.71100001 + 337 113 1 -1.1128 16.63000000 6.42200000 23.79200000 + 338 113 2 0.5564 16.21900000 4.80400001 24.40600001 + 339 113 2 0.5564 17.06600001 7.12799999 25.28199999 + 340 114 1 -1.1128 21.67599999 5.56400001 28.15800000 + 341 114 2 0.5564 20.65799999 6.71700000 29.18499999 + 342 114 2 0.5564 23.41300000 5.82800000 28.99600000 + 343 115 1 -1.1128 15.25699999 5.26500000 5.62599999 + 344 115 2 0.5564 16.91400000 4.51900000 5.48999999 + 345 115 2 0.5564 15.14400000 6.15000000 6.97200000 + 346 116 1 -1.1128 20.13700000 11.08200000 10.43700000 + 347 116 2 0.5564 20.02100000 10.94700000 8.73299999 + 348 116 2 0.5564 21.02500000 12.55500000 10.85300000 + 349 117 1 -1.1128 23.08900000 14.62700000 12.43700000 + 350 117 2 0.5564 24.71600000 15.25400000 12.73600001 + 351 117 2 0.5564 23.28400000 13.22799999 13.65300000 + 352 118 1 -1.1128 24.08300000 12.64900000 22.56600000 + 353 118 2 0.5564 22.39700000 12.66300000 23.04199999 + 354 118 2 0.5564 24.90100001 13.85100001 23.56499999 + 355 119 1 -1.1128 17.86500001 7.90899999 30.03600000 + 356 119 2 0.5564 17.50900000 8.04499999 31.98200000 + 357 119 2 0.5564 18.07800000 9.58200001 29.31799999 + 358 120 1 -1.1128 18.82400000 8.48599999 0.10400000 + 359 120 2 0.5564 19.99700000 10.19100001 -0.05700000 + 360 120 2 0.5564 17.07700001 8.99800001 0.77900001 + 361 121 1 -1.1128 20.12200000 9.14300000 5.34299999 + 362 121 2 0.5564 19.37300000 8.81899999 3.82100000 + 363 121 2 0.5564 21.99800001 8.77599999 5.12799999 + 364 122 1 -1.1128 16.41300000 14.45900000 5.85499999 + 365 122 2 0.5564 15.53599999 13.00700000 5.23899999 + 366 122 2 0.5564 16.00599999 14.72500001 7.73699999 + 367 123 1 -1.1128 17.56099999 15.06600001 15.65400001 + 368 123 2 0.5564 17.57500001 13.39800000 16.05500001 + 369 123 2 0.5564 18.97800000 15.82800000 16.39999999 + 370 124 1 -1.1128 26.37400001 17.04700000 24.81700000 + 371 124 2 0.5564 27.98300000 17.09800001 25.63200001 + 372 124 2 0.5564 25.62900001 18.75099999 24.91900001 + 373 125 1 -1.1128 19.78400000 12.96000000 28.70600000 + 374 125 2 0.5564 21.66199999 13.05500001 28.87100000 + 375 125 2 0.5564 19.54500000 14.06999999 27.14300000 + 376 126 1 -1.1128 17.89099999 16.73299999 32.49900000 + 377 126 2 0.5564 18.32700000 15.24000000 31.27700001 + 378 126 2 0.5564 18.63299999 18.33500001 31.69300001 + 379 127 1 -1.1128 23.73299999 23.02399999 1.66300000 + 380 127 2 0.5564 24.80000000 24.05199999 2.77599999 + 381 127 2 0.5564 24.69300001 22.61800001 0.19800000 + 382 128 1 -1.1128 20.78900000 18.44000000 9.44299999 + 383 128 2 0.5564 20.76599999 17.25699999 7.88100000 + 384 128 2 0.5564 21.89600000 17.34500000 10.38500001 + 385 129 1 -1.1128 21.57400000 17.49299999 17.83800000 + 386 129 2 0.5564 20.59699999 18.95500001 17.21800000 + 387 129 2 0.5564 22.53800000 16.87400000 16.25100000 + 388 130 1 -1.1128 19.16800000 14.74799999 24.13099999 + 389 130 2 0.5564 19.71100001 16.39000000 23.71199999 + 390 130 2 0.5564 17.42899999 14.69500000 24.40300001 + 391 131 1 -1.1128 22.14899999 20.19800000 24.97699999 + 392 131 2 0.5564 21.63900001 20.92400000 26.48599999 + 393 131 2 0.5564 22.65600000 21.65700001 24.41099999 + 394 132 1 -1.1128 20.56499999 20.79200000 29.60000001 + 395 132 2 0.5564 22.26399999 20.40900000 30.21399999 + 396 132 2 0.5564 20.54800000 22.40800000 30.59699999 + 397 133 1 -1.1128 20.80200000 26.54699999 9.61499999 + 398 133 2 0.5564 20.09899999 27.98399999 8.33800001 + 399 133 2 0.5564 21.27700001 27.53900001 11.32499999 + 400 134 1 -1.1128 16.28300000 23.58900001 7.77900001 + 401 134 2 0.5564 16.09300000 21.97300001 6.71199999 + 402 134 2 0.5564 17.90100001 22.97100000 8.15400000 + 403 135 1 -1.1128 18.46900000 29.79799999 13.56800001 + 404 135 2 0.5564 19.71199999 31.21600000 13.50600000 + 405 135 2 0.5564 16.87200001 30.34299999 14.39600001 + 406 136 1 -1.1128 18.79000001 21.71199999 16.06000000 + 407 136 2 0.5564 19.87800000 23.09000000 16.48500001 + 408 136 2 0.5564 17.20100000 22.32600000 15.81899999 + 409 137 1 -1.1128 21.74700001 26.08400001 16.34900001 + 410 137 2 0.5564 20.78300001 27.02100000 15.29999999 + 411 137 2 0.5564 22.70499999 27.32799999 17.20600001 + 412 138 1 -1.1128 20.76899999 26.21100000 32.05000000 + 413 138 2 0.5564 21.48800000 27.40399999 33.32799999 + 414 138 2 0.5564 18.98900000 26.71000000 32.14500001 + 415 139 1 -1.1128 19.82000000 29.18100001 5.55900000 + 416 139 2 0.5564 20.99100001 29.50900000 4.10900001 + 417 139 2 0.5564 19.43100000 31.01800000 6.22099999 + 418 140 1 -1.1128 19.24000000 33.86700000 7.99300000 + 419 140 2 0.5564 19.10700000 35.03900000 6.60399999 + 420 140 2 0.5564 20.69700001 33.67100000 9.06299999 + 421 141 1 -1.1128 22.51099999 34.97600001 15.79300000 + 422 141 2 0.5564 23.71600000 36.16300001 16.60300000 + 423 141 2 0.5564 21.69900000 36.15000000 14.46700001 + 424 142 1 -1.1128 22.62199999 30.28400000 19.06900000 + 425 142 2 0.5564 22.04899999 31.35100000 17.72500001 + 426 142 2 0.5564 24.41099999 30.77299999 19.57599999 + 427 143 1 -1.1128 18.63900001 33.61100001 28.36900000 + 428 143 2 0.5564 18.22600000 32.15900001 29.10300000 + 429 143 2 0.5564 19.90600000 33.00800000 27.15800000 + 430 144 1 -1.1128 22.52000000 1.32499999 31.92600001 + 431 144 2 0.5564 22.80300000 2.66800001 30.79600000 + 432 144 2 0.5564 21.04499999 0.42499999 31.12200000 + 433 145 1 -1.1128 21.75400001 3.78900000 1.15900001 + 434 145 2 0.5564 22.08499999 2.78500000 -0.18000000 + 435 145 2 0.5564 20.85000000 5.17500000 0.61000000 + 436 146 1 -1.1128 28.45699999 5.53900001 12.13300000 + 437 146 2 0.5564 29.48900001 4.39000000 11.18200000 + 438 146 2 0.5564 29.16100000 7.13099999 12.58700000 + 439 147 1 -1.1128 22.49500000 5.96599999 17.32400001 + 440 147 2 0.5564 24.37700000 5.37900000 17.39299999 + 441 147 2 0.5564 21.90600000 5.49100000 18.85700000 + 442 148 1 -1.1128 28.12799999 3.30400000 22.28700000 + 443 148 2 0.5564 28.12300001 2.99899999 20.49100000 + 444 148 2 0.5564 26.53299999 3.35500000 22.87600001 + 445 149 1 -1.1128 28.37800001 10.45500000 27.26600000 + 446 149 2 0.5564 30.01900001 10.29200001 28.05100000 + 447 149 2 0.5564 28.63500000 10.03900000 25.46300000 + 448 150 1 -1.1128 27.03099999 8.35300001 34.80600000 + 449 150 2 0.5564 26.11600001 9.98399999 34.57100001 + 450 150 2 0.5564 28.68500000 8.95100001 34.73900000 + 451 151 1 -1.1128 24.95100001 8.15999999 4.45399999 + 452 151 2 0.5564 25.93000001 9.61600000 5.15999999 + 453 151 2 0.5564 25.94700000 7.99400001 2.72400000 + 454 152 1 -1.1128 26.93700001 12.43599999 6.86900001 + 455 152 2 0.5564 25.49200001 13.28400000 6.70799999 + 456 152 2 0.5564 27.68900000 13.33199999 8.26600000 + 457 153 1 -1.1128 23.36500000 11.21399999 16.93300001 + 458 153 2 0.5564 22.24700000 9.74399999 16.78900000 + 459 153 2 0.5564 23.26399999 12.03500000 18.53900001 + 460 154 1 -1.1128 28.32099999 8.75900000 22.15800000 + 461 154 2 0.5564 27.66199999 6.89499999 22.48200001 + 462 154 2 0.5564 26.97100000 9.71000000 21.90199999 + 463 155 1 -1.1128 27.07100000 6.10900001 29.55500000 + 464 155 2 0.5564 27.59100000 7.66300000 28.85700000 + 465 155 2 0.5564 27.30400000 6.32000001 31.26100000 + 466 156 1 -1.1128 22.47400000 11.70400001 34.63999999 + 467 156 2 0.5564 22.75200000 13.30400000 35.58400000 + 468 156 2 0.5564 22.84000001 12.09000000 33.03000001 + 469 157 1 -1.1128 21.65600000 14.97100000 5.61499999 + 470 157 2 0.5564 21.68999999 15.86000000 3.97699999 + 471 157 2 0.5564 19.96400000 14.22500000 5.77400000 + 472 158 1 -1.1128 28.53900001 21.49200001 9.82000000 + 473 158 2 0.5564 27.28800001 22.18100001 8.68800000 + 474 158 2 0.5564 28.06500000 22.42000000 11.60200000 + 475 159 1 -1.1128 28.36399999 16.01999999 11.10900001 + 476 159 2 0.5564 30.03300000 16.64900000 12.08900000 + 477 159 2 0.5564 28.45600000 17.44000000 10.08200000 + 478 160 1 -1.1128 0.05400000 13.68600001 18.10300000 + 479 160 2 0.5564 -1.71400000 12.92800000 18.84099999 + 480 160 2 0.5564 1.00800000 12.42899999 17.38300000 + 481 161 1 -1.1128 24.63600001 12.89400001 29.95700000 + 482 161 2 0.5564 25.90600000 13.91400000 31.18300000 + 483 161 2 0.5564 25.64100000 11.60900000 29.16200000 + 484 162 1 -1.1128 21.54800000 17.25000000 0.74900000 + 485 162 2 0.5564 21.84300000 19.02600000 0.90500001 + 486 162 2 0.5564 20.38500001 16.71600000 -0.69700001 + 487 163 1 -1.1128 26.09499999 27.27400001 4.52000000 + 488 163 2 0.5564 27.88900000 26.45800000 4.50500000 + 489 163 2 0.5564 25.64800000 26.96999999 6.16500000 + 490 164 1 -1.1128 23.61000000 22.51499999 8.00800000 + 491 164 2 0.5564 22.65300000 21.18700000 8.73900000 + 492 164 2 0.5564 22.28600000 24.09499999 8.44400000 + 493 165 1 -1.1128 27.35500000 18.92900000 18.18000000 + 494 165 2 0.5564 27.20000000 20.34900001 17.15500000 + 495 165 2 0.5564 25.57899999 18.32200000 18.77000000 + 496 166 1 -1.1128 26.76500001 23.63299999 14.44400000 + 497 166 2 0.5564 27.44100000 25.29800000 13.65099999 + 498 166 2 0.5564 25.08600000 24.25600001 14.74900000 + 499 167 1 -1.1128 31.47800001 20.76899999 20.98600000 + 500 167 2 0.5564 30.44000000 22.50900000 21.13499999 + 501 167 2 0.5564 30.56700000 19.65600000 20.04300000 + 502 168 1 -1.1128 24.81199999 20.41200000 32.66800001 + 503 168 2 0.5564 26.24199999 21.47800001 31.87400000 + 504 168 2 0.5564 25.78699999 19.02300001 33.15800000 + 505 169 1 -1.1128 22.10500001 29.07600000 0.92800000 + 506 169 2 0.5564 23.29599999 27.92299999 1.73900000 + 507 169 2 0.5564 22.62300000 30.99400001 0.88200000 + 508 170 1 -1.1128 29.57199999 31.25600001 8.62599999 + 509 170 2 0.5564 30.79500000 30.20299999 7.73600001 + 510 170 2 0.5564 28.27700001 31.51900000 7.25999999 + 511 171 1 -1.1128 31.81700000 34.84300000 18.28300000 + 512 171 2 0.5564 32.43800000 34.38899999 16.47400000 + 513 171 2 0.5564 32.74300001 36.42200000 18.34100000 + 514 172 1 -1.1128 27.91500001 25.60099999 19.03300000 + 515 172 2 0.5564 29.35800000 26.56099999 19.19000000 + 516 172 2 0.5564 28.14800001 24.42899999 17.53000000 + 517 173 1 -1.1128 24.54800000 24.65400001 24.02500000 + 518 173 2 0.5564 25.52800001 25.63500000 22.82400000 + 519 173 2 0.5564 25.29999999 25.20000000 25.64500000 + 520 174 1 -1.1128 28.53999999 22.92200000 30.37000000 + 521 174 2 0.5564 27.41399999 24.09600000 29.78100000 + 522 174 2 0.5564 29.67400000 23.91400000 31.87299999 + 523 175 1 -1.1128 24.96900001 33.62300000 1.01400000 + 524 175 2 0.5564 26.52100001 33.05800000 1.51799999 + 525 175 2 0.5564 24.99000000 34.32200000 -0.68299999 + 526 176 1 -1.1128 23.07500000 32.17099999 11.32400001 + 527 176 2 0.5564 23.31600000 32.77500000 13.09700000 + 528 176 2 0.5564 24.46000001 33.20299999 10.66199999 + 529 177 1 -1.1128 27.49699999 2.73600001 17.22400001 + 530 177 2 0.5564 28.39700000 3.41500000 15.71500001 + 531 177 2 0.5564 28.23400001 1.23300000 17.41200000 + 532 178 1 -1.1128 26.36900000 33.06000000 22.07700001 + 533 178 2 0.5564 26.17000001 34.74600000 22.26399999 + 534 178 2 0.5564 27.59200000 32.40399999 23.32099999 + 535 179 1 -1.1128 30.22099999 30.95000000 25.84300000 + 536 179 2 0.5564 30.30500000 29.03799999 26.20800000 + 537 179 2 0.5564 30.36300001 31.97900000 27.41399999 + 538 180 1 -1.1128 24.97300001 26.73200000 28.60700001 + 539 180 2 0.5564 25.38500001 28.36900000 29.24800000 + 540 180 2 0.5564 23.33000000 26.59699999 29.23400001 + 541 181 1 -1.1128 32.16500000 4.85700000 2.25800000 + 542 181 2 0.5564 32.41700001 6.19500001 1.15700000 + 543 181 2 0.5564 32.61499999 3.72700000 1.11200000 + 544 182 1 -1.1128 28.06699999 3.53299999 5.21699999 + 545 182 2 0.5564 26.96000000 4.44699999 4.15800000 + 546 182 2 0.5564 29.87500000 3.86300000 4.44800000 + 547 183 1 -1.1128 33.27900000 2.78200000 13.02800000 + 548 183 2 0.5564 33.70799999 3.95500001 11.81700000 + 549 183 2 0.5564 33.65600000 3.54500000 14.63100000 + 550 184 1 -1.1128 34.27799999 4.94400001 17.49200001 + 551 184 2 0.5564 33.43800000 6.56300000 17.87600001 + 552 184 2 0.5564 34.90600000 4.45200000 18.99499999 + 553 185 1 -1.1128 32.36300001 1.90800001 26.09199999 + 554 185 2 0.5564 31.94099999 1.68299999 24.26800000 + 555 185 2 0.5564 33.85000000 1.39000000 26.90400000 + 556 186 1 -1.1128 27.98200000 0.41799999 28.24100000 + 557 186 2 0.5564 27.51600000 2.08000001 28.30900000 + 558 186 2 0.5564 29.59300001 0.17600000 27.29900001 + 559 187 1 -1.1128 28.84500000 14.67200001 2.72400000 + 560 187 2 0.5564 27.96299999 13.93000001 4.13900000 + 561 187 2 0.5564 30.38599999 15.71400000 3.37900000 + 562 188 1 -1.1128 28.08300000 10.61800001 14.29800000 + 563 188 2 0.5564 28.62300000 12.15999999 13.29300000 + 564 188 2 0.5564 26.48599999 11.01500000 15.37900000 + 565 189 1 -1.1128 33.86700000 10.54500000 13.30600001 + 566 189 2 0.5564 35.16500000 9.61200000 13.81000000 + 567 189 2 0.5564 33.61499999 10.27000001 11.51300000 + 568 190 1 -1.1128 31.79000001 9.69600000 18.22300000 + 569 190 2 0.5564 30.48400000 9.33400000 19.42100001 + 570 190 2 0.5564 30.83399999 10.09600000 16.92900000 + 571 191 1 -1.1128 30.14100001 15.00599999 21.53200001 + 572 191 2 0.5564 28.56499999 15.59399999 22.09899999 + 573 191 2 0.5564 30.94200000 14.25299999 23.07700001 + 574 192 1 -1.1128 32.79799999 10.73200000 30.67999999 + 575 192 2 0.5564 34.07300001 9.52800001 30.79900000 + 576 192 2 0.5564 32.99100001 11.51200000 28.98300000 + 577 193 1 -1.1128 33.65200000 16.26500000 5.08600000 + 578 193 2 0.5564 35.39900001 16.23899999 4.72999999 + 579 193 2 0.5564 33.50300001 17.93900000 5.63100000 + 580 194 1 -1.1128 31.94700000 10.79900000 7.94300000 + 581 194 2 0.5564 29.89400001 10.54900000 7.61899999 + 582 194 2 0.5564 32.27099999 12.41399999 7.07500000 + 583 195 1 -1.1128 0.32900000 15.51600000 11.74600000 + 584 195 2 0.5564 -0.44600001 14.24900001 12.93900000 + 585 195 2 0.5564 -0.68500000 17.01800000 11.93500000 + 586 196 1 -1.1128 4.26200000 19.16500000 14.30800000 + 587 196 2 0.5564 3.57899999 17.69100000 14.91999999 + 588 196 2 0.5564 5.72299999 19.18300000 15.20400000 + 589 197 1 -1.1128 32.99499999 13.54600001 25.94800001 + 590 197 2 0.5564 32.16699999 15.06000000 26.78699999 + 591 197 2 0.5564 34.42499999 13.80000000 25.00700000 + 592 198 1 -1.1128 1.77299999 13.52400000 34.03700001 + 593 198 2 0.5564 0.22700001 14.40900000 33.44600001 + 594 198 2 0.5564 2.16699999 14.67000000 35.51099999 + 595 199 1 -1.1128 33.02900000 20.52899999 7.24700000 + 596 199 2 0.5564 34.38800000 21.41399999 8.00300000 + 597 199 2 0.5564 31.45100000 20.83100000 8.18200000 + 598 200 1 -1.1128 2.03700001 24.25000000 10.25100000 + 599 200 2 0.5564 3.74300001 25.00800000 9.87600001 + 600 200 2 0.5564 1.89400001 25.04300000 11.90300000 + 601 201 1 -1.1128 32.75300000 19.25900000 13.97600001 + 602 201 2 0.5564 32.79200000 20.88600000 13.79200000 + 603 201 2 0.5564 34.33400000 18.79900000 14.97600001 + 604 202 1 -1.1128 0.39600001 18.67300000 18.69900000 + 605 202 2 0.5564 -1.21100000 18.95000000 19.12700001 + 606 202 2 0.5564 0.46900000 16.97699999 18.43599999 + 607 203 1 -1.1128 30.85499999 18.37000000 27.95899999 + 608 203 2 0.5564 29.75900000 19.68100000 28.68999999 + 609 203 2 0.5564 32.10300000 19.47700000 26.76300000 + 610 204 1 -1.1128 27.72299999 15.99200000 33.09100001 + 611 204 2 0.5564 29.39000000 16.42300000 32.19199999 + 612 204 2 0.5564 27.80100001 15.85899999 34.80400001 + 613 205 1 -1.1128 31.06800000 27.89499999 3.34800000 + 614 205 2 0.5564 32.51700000 27.82500000 4.61000000 + 615 205 2 0.5564 31.52899999 29.45900000 2.32400001 + 616 206 1 -1.1128 35.03900000 28.00800000 6.66300000 + 617 206 2 0.5564 35.96599999 26.93399999 7.68299999 + 618 206 2 0.5564 36.05500001 28.33600000 5.33600000 + 619 207 1 -1.1128 29.35600001 28.19599999 13.02500000 + 620 207 2 0.5564 29.20999999 29.33500001 14.58900001 + 621 207 2 0.5564 28.87400000 29.62900001 11.86700000 + 622 208 1 -1.1128 32.38599999 28.43400000 18.96100000 + 623 208 2 0.5564 33.36799999 28.57400000 20.41099999 + 624 208 2 0.5564 33.41000001 27.40600001 17.94900000 + 625 209 1 -1.1128 30.89799999 25.39000000 25.79900000 + 626 209 2 0.5564 32.36900000 25.91299999 24.58000000 + 627 209 2 0.5564 31.31700001 24.07500000 27.02900000 + 628 210 1 -1.1128 32.25900000 25.61100001 33.10400000 + 629 210 2 0.5564 32.23800001 25.73600001 34.80600000 + 630 210 2 0.5564 33.91999999 25.04199999 32.77500000 + 631 211 1 -1.1128 30.29000000 32.64500000 1.34100000 + 632 211 2 0.5564 29.94900000 32.79300000 -0.43000000 + 633 211 2 0.5564 31.76199999 33.34000000 1.84700001 + 634 212 1 -1.1128 25.53599999 34.23499999 6.46900000 + 635 212 2 0.5564 25.71600000 36.05900001 6.65099999 + 636 212 2 0.5564 25.28300000 33.86599999 4.89499999 + 637 213 1 -1.1128 31.67400000 33.16100000 13.10599999 + 638 213 2 0.5564 31.79300000 34.86300000 13.28100001 + 639 213 2 0.5564 30.42499999 32.92800000 11.78300001 + 640 214 1 -1.1128 33.84400001 32.66800001 22.29599999 + 641 214 2 0.5564 32.75000000 32.23400001 23.52400000 + 642 214 2 0.5564 32.91700000 32.87500000 20.73600001 + 643 215 1 -1.1128 31.60300000 30.54200000 30.80499999 + 644 215 2 0.5564 33.45100000 30.80400001 30.46799999 + 645 215 2 0.5564 31.57500001 28.81599999 31.75600000 + 646 216 1 -1.1128 26.29500001 31.23499999 30.59900000 + 647 216 2 0.5564 27.83399999 30.51499999 30.60700001 + 648 216 2 0.5564 26.36200000 32.91999999 29.85600000 + +Bonds + + 1 1 1 2 + 2 1 1 3 + 3 1 4 5 + 4 1 4 6 + 5 1 7 8 + 6 1 7 9 + 7 1 10 11 + 8 1 10 12 + 9 1 13 14 + 10 1 13 15 + 11 1 16 17 + 12 1 16 18 + 13 1 19 20 + 14 1 19 21 + 15 1 22 23 + 16 1 22 24 + 17 1 25 26 + 18 1 25 27 + 19 1 28 29 + 20 1 28 30 + 21 1 31 32 + 22 1 31 33 + 23 1 34 35 + 24 1 34 36 + 25 1 37 38 + 26 1 37 39 + 27 1 40 41 + 28 1 40 42 + 29 1 43 44 + 30 1 43 45 + 31 1 46 47 + 32 1 46 48 + 33 1 49 50 + 34 1 49 51 + 35 1 52 53 + 36 1 52 54 + 37 1 55 56 + 38 1 55 57 + 39 1 58 59 + 40 1 58 60 + 41 1 61 62 + 42 1 61 63 + 43 1 64 65 + 44 1 64 66 + 45 1 67 68 + 46 1 67 69 + 47 1 70 71 + 48 1 70 72 + 49 1 73 74 + 50 1 73 75 + 51 1 76 77 + 52 1 76 78 + 53 1 79 80 + 54 1 79 81 + 55 1 82 83 + 56 1 82 84 + 57 1 85 86 + 58 1 85 87 + 59 1 88 89 + 60 1 88 90 + 61 1 91 92 + 62 1 91 93 + 63 1 94 95 + 64 1 94 96 + 65 1 97 98 + 66 1 97 99 + 67 1 100 101 + 68 1 100 102 + 69 1 103 104 + 70 1 103 105 + 71 1 106 107 + 72 1 106 108 + 73 1 109 110 + 74 1 109 111 + 75 1 112 113 + 76 1 112 114 + 77 1 115 116 + 78 1 115 117 + 79 1 118 119 + 80 1 118 120 + 81 1 121 122 + 82 1 121 123 + 83 1 124 125 + 84 1 124 126 + 85 1 127 128 + 86 1 127 129 + 87 1 130 131 + 88 1 130 132 + 89 1 133 134 + 90 1 133 135 + 91 1 136 137 + 92 1 136 138 + 93 1 139 140 + 94 1 139 141 + 95 1 142 143 + 96 1 142 144 + 97 1 145 146 + 98 1 145 147 + 99 1 148 149 + 100 1 148 150 + 101 1 151 152 + 102 1 151 153 + 103 1 154 155 + 104 1 154 156 + 105 1 157 158 + 106 1 157 159 + 107 1 160 161 + 108 1 160 162 + 109 1 163 164 + 110 1 163 165 + 111 1 166 167 + 112 1 166 168 + 113 1 169 170 + 114 1 169 171 + 115 1 172 173 + 116 1 172 174 + 117 1 175 176 + 118 1 175 177 + 119 1 178 179 + 120 1 178 180 + 121 1 181 182 + 122 1 181 183 + 123 1 184 185 + 124 1 184 186 + 125 1 187 188 + 126 1 187 189 + 127 1 190 191 + 128 1 190 192 + 129 1 193 194 + 130 1 193 195 + 131 1 196 197 + 132 1 196 198 + 133 1 199 200 + 134 1 199 201 + 135 1 202 203 + 136 1 202 204 + 137 1 205 206 + 138 1 205 207 + 139 1 208 209 + 140 1 208 210 + 141 1 211 212 + 142 1 211 213 + 143 1 214 215 + 144 1 214 216 + 145 1 217 218 + 146 1 217 219 + 147 1 220 221 + 148 1 220 222 + 149 1 223 224 + 150 1 223 225 + 151 1 226 227 + 152 1 226 228 + 153 1 229 230 + 154 1 229 231 + 155 1 232 233 + 156 1 232 234 + 157 1 235 236 + 158 1 235 237 + 159 1 238 239 + 160 1 238 240 + 161 1 241 242 + 162 1 241 243 + 163 1 244 245 + 164 1 244 246 + 165 1 247 248 + 166 1 247 249 + 167 1 250 251 + 168 1 250 252 + 169 1 253 254 + 170 1 253 255 + 171 1 256 257 + 172 1 256 258 + 173 1 259 260 + 174 1 259 261 + 175 1 262 263 + 176 1 262 264 + 177 1 265 266 + 178 1 265 267 + 179 1 268 269 + 180 1 268 270 + 181 1 271 272 + 182 1 271 273 + 183 1 274 275 + 184 1 274 276 + 185 1 277 278 + 186 1 277 279 + 187 1 280 281 + 188 1 280 282 + 189 1 283 284 + 190 1 283 285 + 191 1 286 287 + 192 1 286 288 + 193 1 289 290 + 194 1 289 291 + 195 1 292 293 + 196 1 292 294 + 197 1 295 296 + 198 1 295 297 + 199 1 298 299 + 200 1 298 300 + 201 1 301 302 + 202 1 301 303 + 203 1 304 305 + 204 1 304 306 + 205 1 307 308 + 206 1 307 309 + 207 1 310 311 + 208 1 310 312 + 209 1 313 314 + 210 1 313 315 + 211 1 316 317 + 212 1 316 318 + 213 1 319 320 + 214 1 319 321 + 215 1 322 323 + 216 1 322 324 + 217 1 325 326 + 218 1 325 327 + 219 1 328 329 + 220 1 328 330 + 221 1 331 332 + 222 1 331 333 + 223 1 334 335 + 224 1 334 336 + 225 1 337 338 + 226 1 337 339 + 227 1 340 341 + 228 1 340 342 + 229 1 343 344 + 230 1 343 345 + 231 1 346 347 + 232 1 346 348 + 233 1 349 350 + 234 1 349 351 + 235 1 352 353 + 236 1 352 354 + 237 1 355 356 + 238 1 355 357 + 239 1 358 359 + 240 1 358 360 + 241 1 361 362 + 242 1 361 363 + 243 1 364 365 + 244 1 364 366 + 245 1 367 368 + 246 1 367 369 + 247 1 370 371 + 248 1 370 372 + 249 1 373 374 + 250 1 373 375 + 251 1 376 377 + 252 1 376 378 + 253 1 379 380 + 254 1 379 381 + 255 1 382 383 + 256 1 382 384 + 257 1 385 386 + 258 1 385 387 + 259 1 388 389 + 260 1 388 390 + 261 1 391 392 + 262 1 391 393 + 263 1 394 395 + 264 1 394 396 + 265 1 397 398 + 266 1 397 399 + 267 1 400 401 + 268 1 400 402 + 269 1 403 404 + 270 1 403 405 + 271 1 406 407 + 272 1 406 408 + 273 1 409 410 + 274 1 409 411 + 275 1 412 413 + 276 1 412 414 + 277 1 415 416 + 278 1 415 417 + 279 1 418 419 + 280 1 418 420 + 281 1 421 422 + 282 1 421 423 + 283 1 424 425 + 284 1 424 426 + 285 1 427 428 + 286 1 427 429 + 287 1 430 431 + 288 1 430 432 + 289 1 433 434 + 290 1 433 435 + 291 1 436 437 + 292 1 436 438 + 293 1 439 440 + 294 1 439 441 + 295 1 442 443 + 296 1 442 444 + 297 1 445 446 + 298 1 445 447 + 299 1 448 449 + 300 1 448 450 + 301 1 451 452 + 302 1 451 453 + 303 1 454 455 + 304 1 454 456 + 305 1 457 458 + 306 1 457 459 + 307 1 460 461 + 308 1 460 462 + 309 1 463 464 + 310 1 463 465 + 311 1 466 467 + 312 1 466 468 + 313 1 469 470 + 314 1 469 471 + 315 1 472 473 + 316 1 472 474 + 317 1 475 476 + 318 1 475 477 + 319 1 478 479 + 320 1 478 480 + 321 1 481 482 + 322 1 481 483 + 323 1 484 485 + 324 1 484 486 + 325 1 487 488 + 326 1 487 489 + 327 1 490 491 + 328 1 490 492 + 329 1 493 494 + 330 1 493 495 + 331 1 496 497 + 332 1 496 498 + 333 1 499 500 + 334 1 499 501 + 335 1 502 503 + 336 1 502 504 + 337 1 505 506 + 338 1 505 507 + 339 1 508 509 + 340 1 508 510 + 341 1 511 512 + 342 1 511 513 + 343 1 514 515 + 344 1 514 516 + 345 1 517 518 + 346 1 517 519 + 347 1 520 521 + 348 1 520 522 + 349 1 523 524 + 350 1 523 525 + 351 1 526 527 + 352 1 526 528 + 353 1 529 530 + 354 1 529 531 + 355 1 532 533 + 356 1 532 534 + 357 1 535 536 + 358 1 535 537 + 359 1 538 539 + 360 1 538 540 + 361 1 541 542 + 362 1 541 543 + 363 1 544 545 + 364 1 544 546 + 365 1 547 548 + 366 1 547 549 + 367 1 550 551 + 368 1 550 552 + 369 1 553 554 + 370 1 553 555 + 371 1 556 557 + 372 1 556 558 + 373 1 559 560 + 374 1 559 561 + 375 1 562 563 + 376 1 562 564 + 377 1 565 566 + 378 1 565 567 + 379 1 568 569 + 380 1 568 570 + 381 1 571 572 + 382 1 571 573 + 383 1 574 575 + 384 1 574 576 + 385 1 577 578 + 386 1 577 579 + 387 1 580 581 + 388 1 580 582 + 389 1 583 584 + 390 1 583 585 + 391 1 586 587 + 392 1 586 588 + 393 1 589 590 + 394 1 589 591 + 395 1 592 593 + 396 1 592 594 + 397 1 595 596 + 398 1 595 597 + 399 1 598 599 + 400 1 598 600 + 401 1 601 602 + 402 1 601 603 + 403 1 604 605 + 404 1 604 606 + 405 1 607 608 + 406 1 607 609 + 407 1 610 611 + 408 1 610 612 + 409 1 613 614 + 410 1 613 615 + 411 1 616 617 + 412 1 616 618 + 413 1 619 620 + 414 1 619 621 + 415 1 622 623 + 416 1 622 624 + 417 1 625 626 + 418 1 625 627 + 419 1 628 629 + 420 1 628 630 + 421 1 631 632 + 422 1 631 633 + 423 1 634 635 + 424 1 634 636 + 425 1 637 638 + 426 1 637 639 + 427 1 640 641 + 428 1 640 642 + 429 1 643 644 + 430 1 643 645 + 431 1 646 647 + 432 1 646 648 + +Angles + + 1 1 2 1 3 + 2 1 5 4 6 + 3 1 8 7 9 + 4 1 11 10 12 + 5 1 14 13 15 + 6 1 17 16 18 + 7 1 20 19 21 + 8 1 23 22 24 + 9 1 26 25 27 + 10 1 29 28 30 + 11 1 32 31 33 + 12 1 35 34 36 + 13 1 38 37 39 + 14 1 41 40 42 + 15 1 44 43 45 + 16 1 47 46 48 + 17 1 50 49 51 + 18 1 53 52 54 + 19 1 56 55 57 + 20 1 59 58 60 + 21 1 62 61 63 + 22 1 65 64 66 + 23 1 68 67 69 + 24 1 71 70 72 + 25 1 74 73 75 + 26 1 77 76 78 + 27 1 80 79 81 + 28 1 83 82 84 + 29 1 86 85 87 + 30 1 89 88 90 + 31 1 92 91 93 + 32 1 95 94 96 + 33 1 98 97 99 + 34 1 101 100 102 + 35 1 104 103 105 + 36 1 107 106 108 + 37 1 110 109 111 + 38 1 113 112 114 + 39 1 116 115 117 + 40 1 119 118 120 + 41 1 122 121 123 + 42 1 125 124 126 + 43 1 128 127 129 + 44 1 131 130 132 + 45 1 134 133 135 + 46 1 137 136 138 + 47 1 140 139 141 + 48 1 143 142 144 + 49 1 146 145 147 + 50 1 149 148 150 + 51 1 152 151 153 + 52 1 155 154 156 + 53 1 158 157 159 + 54 1 161 160 162 + 55 1 164 163 165 + 56 1 167 166 168 + 57 1 170 169 171 + 58 1 173 172 174 + 59 1 176 175 177 + 60 1 179 178 180 + 61 1 182 181 183 + 62 1 185 184 186 + 63 1 188 187 189 + 64 1 191 190 192 + 65 1 194 193 195 + 66 1 197 196 198 + 67 1 200 199 201 + 68 1 203 202 204 + 69 1 206 205 207 + 70 1 209 208 210 + 71 1 212 211 213 + 72 1 215 214 216 + 73 1 218 217 219 + 74 1 221 220 222 + 75 1 224 223 225 + 76 1 227 226 228 + 77 1 230 229 231 + 78 1 233 232 234 + 79 1 236 235 237 + 80 1 239 238 240 + 81 1 242 241 243 + 82 1 245 244 246 + 83 1 248 247 249 + 84 1 251 250 252 + 85 1 254 253 255 + 86 1 257 256 258 + 87 1 260 259 261 + 88 1 263 262 264 + 89 1 266 265 267 + 90 1 269 268 270 + 91 1 272 271 273 + 92 1 275 274 276 + 93 1 278 277 279 + 94 1 281 280 282 + 95 1 284 283 285 + 96 1 287 286 288 + 97 1 290 289 291 + 98 1 293 292 294 + 99 1 296 295 297 + 100 1 299 298 300 + 101 1 302 301 303 + 102 1 305 304 306 + 103 1 308 307 309 + 104 1 311 310 312 + 105 1 314 313 315 + 106 1 317 316 318 + 107 1 320 319 321 + 108 1 323 322 324 + 109 1 326 325 327 + 110 1 329 328 330 + 111 1 332 331 333 + 112 1 335 334 336 + 113 1 338 337 339 + 114 1 341 340 342 + 115 1 344 343 345 + 116 1 347 346 348 + 117 1 350 349 351 + 118 1 353 352 354 + 119 1 356 355 357 + 120 1 359 358 360 + 121 1 362 361 363 + 122 1 365 364 366 + 123 1 368 367 369 + 124 1 371 370 372 + 125 1 374 373 375 + 126 1 377 376 378 + 127 1 380 379 381 + 128 1 383 382 384 + 129 1 386 385 387 + 130 1 389 388 390 + 131 1 392 391 393 + 132 1 395 394 396 + 133 1 398 397 399 + 134 1 401 400 402 + 135 1 404 403 405 + 136 1 407 406 408 + 137 1 410 409 411 + 138 1 413 412 414 + 139 1 416 415 417 + 140 1 419 418 420 + 141 1 422 421 423 + 142 1 425 424 426 + 143 1 428 427 429 + 144 1 431 430 432 + 145 1 434 433 435 + 146 1 437 436 438 + 147 1 440 439 441 + 148 1 443 442 444 + 149 1 446 445 447 + 150 1 449 448 450 + 151 1 452 451 453 + 152 1 455 454 456 + 153 1 458 457 459 + 154 1 461 460 462 + 155 1 464 463 465 + 156 1 467 466 468 + 157 1 470 469 471 + 158 1 473 472 474 + 159 1 476 475 477 + 160 1 479 478 480 + 161 1 482 481 483 + 162 1 485 484 486 + 163 1 488 487 489 + 164 1 491 490 492 + 165 1 494 493 495 + 166 1 497 496 498 + 167 1 500 499 501 + 168 1 503 502 504 + 169 1 506 505 507 + 170 1 509 508 510 + 171 1 512 511 513 + 172 1 515 514 516 + 173 1 518 517 519 + 174 1 521 520 522 + 175 1 524 523 525 + 176 1 527 526 528 + 177 1 530 529 531 + 178 1 533 532 534 + 179 1 536 535 537 + 180 1 539 538 540 + 181 1 542 541 543 + 182 1 545 544 546 + 183 1 548 547 549 + 184 1 551 550 552 + 185 1 554 553 555 + 186 1 557 556 558 + 187 1 560 559 561 + 188 1 563 562 564 + 189 1 566 565 567 + 190 1 569 568 570 + 191 1 572 571 573 + 192 1 575 574 576 + 193 1 578 577 579 + 194 1 581 580 582 + 195 1 584 583 585 + 196 1 587 586 588 + 197 1 590 589 591 + 198 1 593 592 594 + 199 1 596 595 597 + 200 1 599 598 600 + 201 1 602 601 603 + 202 1 605 604 606 + 203 1 608 607 609 + 204 1 611 610 612 + 205 1 614 613 615 + 206 1 617 616 618 + 207 1 620 619 621 + 208 1 623 622 624 + 209 1 626 625 627 + 210 1 629 628 630 + 211 1 632 631 633 + 212 1 635 634 636 + 213 1 638 637 639 + 214 1 641 640 642 + 215 1 644 643 645 + 216 1 647 646 648 diff --git a/tools/i-pi/examples/lammps/h2o-piglet.2/in.water b/tools/i-pi/examples/lammps/h2o-piglet.2/in.water new file mode 100644 index 000000000..e810a02a7 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.2/in.water @@ -0,0 +1,32 @@ +units electron +atom_style full + +#pair_style lj/cut/coul/long 17.01 +pair_style lj/cut/tip4p/long 1 2 1 1 0.278072379 17.007 +#bond_style harmonic +bond_style class2 +angle_style harmonic +#kspace_style pppm 0.0001 +kspace_style pppm/tip4p 0.0001 + +read_data data.water +pair_coeff * * 0 0 +pair_coeff 1 1 0.000295147 5.96946 + +neighbor 2.0 bin + +timestep 0.00025 + +#velocity all create 298.0 2345187 + +#thermo_style multi +#thermo 1 + +#fix 1 all nvt temp 298.0 298.0 30.0 tchain 1 +#fix 1 all nve +fix 1 all ipi piglet_2 32344 unix + +#dump 1 all xyz 25 dump.xyz + +run 100000000 + diff --git a/tools/i-pi/examples/lammps/h2o-piglet.2/input.xml b/tools/i-pi/examples/lammps/h2o-piglet.2/input.xml new file mode 100644 index 000000000..1dff8eb51 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.2/input.xml @@ -0,0 +1,37 @@ + + + water_298K.pdb + 298 + + + [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, kinetic_cv{kelvin}, potential{kelvin}, pressure_cv{megapascal}] + positions + + 500000 + 32344 + + +
piglet_2
+
+
+ + + +[ + 1.300513766690e-2, 9.078220950722e-6, 8.180522706851e-6, 1.196620464216e-5, 1.108609196233e-4, -8.941338246404e-4, 7.817382329484e-3, -1.206049888192e-2, -5.215913547478e-2, -9.756343549369e-6, 2.131200614277e-7, 2.972243541454e-6, -4.459298032276e-6, 2.177011229810e-7, 4.960251269751e-7, -2.083064995647e-6, -7.004617074013e-6, 2.299410255689e-5, -1.851243089560e-6, -2.972243541454e-6, 1.956991859501e-6, 1.742357040415e-6, -2.082265548357e-6, -1.760771137012e-6, -3.733162998255e-6, -3.711884630223e-5, -3.625483838477e-5, 1.492481502899e-5, 4.459298032276e-6, -1.742357040415e-6, 5.092476869103e-6, 2.033910859306e-6, 5.856365217540e-7, -3.020170664006e-6, 1.868034354962e-5, -5.049113665348e-6, 1.059383195368e-4, -2.177011229810e-7, 2.082265548357e-6, -2.033910859306e-6, 5.467813757620e-5, -6.684243951800e-6, -9.770331146786e-7, -2.159991642805e-4, 4.667176340213e-4, -7.611448585233e-4, -4.960251269751e-7, 1.760771137012e-6, -5.856365217540e-7, 6.684243951800e-6, 6.616597356640e-4, -1.637891086976e-6, -2.056652206438e-4, 2.960975881160e-4, 7.659946833472e-3, 2.083064995647e-6, 3.733162998255e-6, 3.020170664006e-6, 9.770331146786e-7, 1.637891086976e-6, 6.390977118535e-3, -6.246090363901e-5, 5.054994461623e-4, -1.078245092236e-2, 7.004617074013e-6, 3.711884630223e-5, -1.868034354962e-5, 2.159991642805e-4, 2.056652206438e-4, 6.246090363901e-5, 1.730397061203e-1, 1.004651317366e-4, -5.467410217589e-2, -2.299410255689e-5, 3.625483838477e-5, 5.049113665348e-6, -4.667176340213e-4, -2.960975881160e-4, -5.054994461623e-4, -1.004651317366e-4, 1.795223909984e+0, + 3.661508781828e-6, 6.586380415542e-3, 0.000000000000e+0, 1.048798625055e-2, 0.000000000000e+0, 5.235465741104e-3, 0.000000000000e+0, 7.227324741917e-5, 0.000000000000e+0, -6.586380415542e-3, 1.472841224644e-1, 3.389091001693e-2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -3.389091001693e-2, 1.735946745861e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.048798625055e-2, 0.000000000000e+0, 0.000000000000e+0, 1.692225827878e-2, 4.099176875073e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.099176875073e-3, 1.735946745861e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -5.235465741104e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 6.199421250931e-2, 1.895288863876e-2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.895288863876e-2, 1.735946745861e-14, 0.000000000000e+0, 0.000000000000e+0, -7.227324741917e-5, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 6.363529537929e-3, 1.124668303030e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.124668303030e-3, 1.735946745861e-14 +] + + +[ + 5.960000000000e+2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 5.960000000000e+2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 5.960000000000e+2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 5.960000000000e+2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 5.960000000000e+2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 5.960000000000e+2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 5.960000000000e+2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 5.960000000000e+2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 5.960000000000e+2, + 2.328214199148e+3, -1.773638197238e+2, -1.602512467866e+3, 8.425273498280e+2, 8.422758941500e+1, -1.455757871344e+3, -5.675121506200e+3, -7.340797223540e+2, -1.291218519198e+3, -1.773638197238e+2, 1.435198117668e+4, 7.017882376280e-9, 1.492286663068e+2, 7.538985690600e+1, -6.166178913900e+1, -5.732862975560e+1, -1.734437584300e+1, 2.139711935710e+0, -1.602512467866e+3, 7.018704063600e-9, 1.404054791182e+4, -6.233033935480e+2, -2.932131143096e+2, 1.025131033748e+2, -8.882494221820e+2, -6.447837508760e+1, -2.608106016078e+2, 8.425273498280e+2, 1.492286663068e+2, -6.233033935480e+2, 6.169297761040e+2, 2.152166828426e-9, 4.558287232240e+2, -2.592081224912e+3, -3.768899601800e+2, -8.237240093440e+1, 8.422758941500e+1, 7.538985690600e+1, -2.932131143096e+2, 2.151810134644e-9, 8.324310406920e+2, 5.606216348920e+2, -1.711918649888e+3, 3.002298898960e+2, -3.067013601100e+3, -1.455757871344e+3, -6.166178913900e+1, 1.025131033748e+2, 4.558287232240e+2, 5.606216348920e+2, 3.927651344860e+4, 3.424336970680e-8, -3.200807605760e+1, 5.531363469240e+0, -5.675121506200e+3, -5.732862975560e+1, -8.882494221820e+2, -2.592081224912e+3, -1.711918649888e+3, 3.423615724260e-8, 3.770884192400e+4, -9.321443096220e+1, -3.766729941280e+2, -7.340797223540e+2, -1.734437584300e+1, -6.447837508760e+1, -3.768899601800e+2, 3.002298898960e+2, -3.200807605760e+1, -9.321443096220e+1, 1.456848407112e+5, 2.242472021306e-6, -1.291218519198e+3, 2.139711935710e+0, -2.608106016078e+2, -8.237240093440e+1, -3.067013601100e+3, 5.531363469240e+0, -3.766729941280e+2, 2.242476256184e-6, 1.456018646376e+5 +] + + + + + 0.1 + 298 + +
diff --git a/tools/i-pi/examples/lammps/h2o-piglet.2/water_298K.pdb b/tools/i-pi/examples/lammps/h2o-piglet.2/water_298K.pdb new file mode 100644 index 000000000..e8509c868 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.2/water_298K.pdb @@ -0,0 +1,650 @@ +CRYST 35.233 35.233 35.233 90.00 90.00 90.00 P 1 1 +ATOM 1 O 1 1 3.846 5.672 1.323 0.00 0.00 0 +ATOM 2 H 1 1 2.979 7.054 0.857 0.00 0.00 0 +ATOM 3 H 1 1 5.525 5.697 0.451 0.00 0.00 0 +ATOM 4 O 1 1 34.557 34.341 3.078 0.00 0.00 0 +ATOM 5 H 1 1 33.722 34.689 4.840 0.00 0.00 0 +ATOM 6 H 1 1 36.029 33.220 3.711 0.00 0.00 0 +ATOM 7 O 1 1 5.591 1.963 13.477 0.00 0.00 0 +ATOM 8 H 1 1 7.265 1.864 13.851 0.00 0.00 0 +ATOM 9 H 1 1 5.009 3.555 13.916 0.00 0.00 0 +ATOM 10 O 1 1 1.060 2.061 21.718 0.00 0.00 0 +ATOM 11 H 1 1 0.757 0.261 21.820 0.00 0.00 0 +ATOM 12 H 1 1 0.213 3.013 23.047 0.00 0.00 0 +ATOM 13 O 1 1 1.200 1.337 29.006 0.00 0.00 0 +ATOM 14 H 1 1 0.818 1.884 30.732 0.00 0.00 0 +ATOM 15 H 1 1 2.883 1.825 29.011 0.00 0.00 0 +ATOM 16 O 1 1 1.331 1.386 34.306 0.00 0.00 0 +ATOM 17 H 1 1 2.392 2.898 34.846 0.00 0.00 0 +ATOM 18 H 1 1 0.814 0.532 35.836 0.00 0.00 0 +ATOM 19 O 1 1 31.451 10.201 0.726 0.00 0.00 0 +ATOM 20 H 1 1 32.282 10.877 -0.750 0.00 0.00 0 +ATOM 21 H 1 1 30.920 11.594 1.677 0.00 0.00 0 +ATOM 22 O 1 1 0.836 10.808 4.298 0.00 0.00 0 +ATOM 23 H 1 1 0.305 10.643 2.793 0.00 0.00 0 +ATOM 24 H 1 1 -0.356 10.334 5.524 0.00 0.00 0 +ATOM 25 O 1 1 34.381 5.979 9.194 0.00 0.00 0 +ATOM 26 H 1 1 33.616 7.673 8.857 0.00 0.00 0 +ATOM 27 H 1 1 35.115 5.260 7.618 0.00 0.00 0 +ATOM 28 O 1 1 33.212 6.480 24.278 0.00 0.00 0 +ATOM 29 H 1 1 31.624 6.908 23.521 0.00 0.00 0 +ATOM 30 H 1 1 32.544 4.990 24.982 0.00 0.00 0 +ATOM 31 O 1 1 1.992 9.002 26.863 0.00 0.00 0 +ATOM 32 H 1 1 1.856 10.175 25.579 0.00 0.00 0 +ATOM 33 H 1 1 0.519 8.099 26.386 0.00 0.00 0 +ATOM 34 O 1 1 2.054 8.660 32.515 0.00 0.00 0 +ATOM 35 H 1 1 2.167 8.727 30.494 0.00 0.00 0 +ATOM 36 H 1 1 2.374 10.513 33.038 0.00 0.00 0 +ATOM 37 O 1 1 3.402 16.639 3.008 0.00 0.00 0 +ATOM 38 H 1 1 4.127 15.872 4.446 0.00 0.00 0 +ATOM 39 H 1 1 2.905 18.339 3.160 0.00 0.00 0 +ATOM 40 O 1 1 4.222 15.444 8.072 0.00 0.00 0 +ATOM 41 H 1 1 5.211 16.756 8.299 0.00 0.00 0 +ATOM 42 H 1 1 2.560 15.492 8.860 0.00 0.00 0 +ATOM 43 O 1 1 2.831 9.246 16.488 0.00 0.00 0 +ATOM 44 H 1 1 2.869 8.023 18.050 0.00 0.00 0 +ATOM 45 H 1 1 3.960 8.467 15.154 0.00 0.00 0 +ATOM 46 O 1 1 5.563 6.003 20.907 0.00 0.00 0 +ATOM 47 H 1 1 4.653 4.638 21.480 0.00 0.00 0 +ATOM 48 H 1 1 6.405 6.208 22.529 0.00 0.00 0 +ATOM 49 O 1 1 2.087 13.370 22.913 0.00 0.00 0 +ATOM 50 H 1 1 2.832 14.804 23.422 0.00 0.00 0 +ATOM 51 H 1 1 1.434 13.509 21.196 0.00 0.00 0 +ATOM 52 O 1 1 3.369 17.886 25.109 0.00 0.00 0 +ATOM 53 H 1 1 3.655 17.200 26.766 0.00 0.00 0 +ATOM 54 H 1 1 4.772 18.977 24.500 0.00 0.00 0 +ATOM 55 O 1 1 34.764 20.803 0.948 0.00 0.00 0 +ATOM 56 H 1 1 35.210 21.267 2.816 0.00 0.00 0 +ATOM 57 H 1 1 35.962 21.726 0.131 0.00 0.00 0 +ATOM 58 O 1 1 2.836 24.178 15.229 0.00 0.00 0 +ATOM 59 H 1 1 2.795 22.346 14.876 0.00 0.00 0 +ATOM 60 H 1 1 2.414 24.115 17.130 0.00 0.00 0 +ATOM 61 O 1 1 33.000 24.481 15.230 0.00 0.00 0 +ATOM 62 H 1 1 34.640 24.804 15.013 0.00 0.00 0 +ATOM 63 H 1 1 32.401 25.764 14.295 0.00 0.00 0 +ATOM 64 O 1 1 0.404 26.779 23.400 0.00 0.00 0 +ATOM 65 H 1 1 1.353 27.248 24.987 0.00 0.00 0 +ATOM 66 H 1 1 1.546 28.050 22.317 0.00 0.00 0 +ATOM 67 O 1 1 34.222 21.380 25.418 0.00 0.00 0 +ATOM 68 H 1 1 35.669 20.151 25.317 0.00 0.00 0 +ATOM 69 H 1 1 32.960 21.180 23.992 0.00 0.00 0 +ATOM 70 O 1 1 33.259 17.438 32.480 0.00 0.00 0 +ATOM 71 H 1 1 33.314 18.782 33.883 0.00 0.00 0 +ATOM 72 H 1 1 32.743 18.181 30.871 0.00 0.00 0 +ATOM 73 O 1 1 4.463 21.979 3.936 0.00 0.00 0 +ATOM 74 H 1 1 5.856 23.084 3.400 0.00 0.00 0 +ATOM 75 H 1 1 3.986 22.180 5.602 0.00 0.00 0 +ATOM 76 O 1 1 6.258 25.851 8.520 0.00 0.00 0 +ATOM 77 H 1 1 5.767 27.693 8.476 0.00 0.00 0 +ATOM 78 H 1 1 7.202 25.506 10.186 0.00 0.00 0 +ATOM 79 O 1 1 0.601 29.737 12.747 0.00 0.00 0 +ATOM 80 H 1 1 -0.685 30.842 12.350 0.00 0.00 0 +ATOM 81 H 1 1 1.336 30.716 14.031 0.00 0.00 0 +ATOM 82 O 1 1 7.563 28.191 24.333 0.00 0.00 0 +ATOM 83 H 1 1 9.201 28.828 24.684 0.00 0.00 0 +ATOM 84 H 1 1 7.381 27.621 22.799 0.00 0.00 0 +ATOM 85 O 1 1 3.653 27.109 27.772 0.00 0.00 0 +ATOM 86 H 1 1 5.126 27.015 26.772 0.00 0.00 0 +ATOM 87 H 1 1 3.031 28.756 27.698 0.00 0.00 0 +ATOM 88 O 1 1 2.596 23.991 32.476 0.00 0.00 0 +ATOM 89 H 1 1 2.879 24.791 30.859 0.00 0.00 0 +ATOM 90 H 1 1 4.003 22.913 32.701 0.00 0.00 0 +ATOM 91 O 1 1 3.083 31.317 3.644 0.00 0.00 0 +ATOM 92 H 1 1 4.133 30.589 2.539 0.00 0.00 0 +ATOM 93 H 1 1 4.218 32.173 5.037 0.00 0.00 0 +ATOM 94 O 1 1 4.661 30.555 9.368 0.00 0.00 0 +ATOM 95 H 1 1 3.184 29.843 10.132 0.00 0.00 0 +ATOM 96 H 1 1 4.358 32.448 9.126 0.00 0.00 0 +ATOM 97 O 1 1 3.465 32.537 15.778 0.00 0.00 0 +ATOM 98 H 1 1 5.072 31.819 15.903 0.00 0.00 0 +ATOM 99 H 1 1 4.055 34.257 15.284 0.00 0.00 0 +ATOM 100 O 1 1 4.215 29.153 20.317 0.00 0.00 0 +ATOM 101 H 1 1 3.658 30.176 18.842 0.00 0.00 0 +ATOM 102 H 1 1 4.959 30.291 21.449 0.00 0.00 0 +ATOM 103 O 1 1 1.126 31.333 28.768 0.00 0.00 0 +ATOM 104 H 1 1 2.395 31.124 29.925 0.00 0.00 0 +ATOM 105 H 1 1 0.768 33.092 28.898 0.00 0.00 0 +ATOM 106 O 1 1 4.881 32.616 32.302 0.00 0.00 0 +ATOM 107 H 1 1 6.588 32.911 31.725 0.00 0.00 0 +ATOM 108 H 1 1 4.486 34.037 33.249 0.00 0.00 0 +ATOM 109 O 1 1 8.962 5.556 0.151 0.00 0.00 0 +ATOM 110 H 1 1 9.652 6.991 0.859 0.00 0.00 0 +ATOM 111 H 1 1 9.173 4.477 1.645 0.00 0.00 0 +ATOM 112 O 1 1 1.833 3.518 5.679 0.00 0.00 0 +ATOM 113 H 1 1 2.889 2.731 6.788 0.00 0.00 0 +ATOM 114 H 1 1 2.789 4.187 4.147 0.00 0.00 0 +ATOM 115 O 1 1 10.510 34.726 13.073 0.00 0.00 0 +ATOM 116 H 1 1 11.920 34.118 11.919 0.00 0.00 0 +ATOM 117 H 1 1 11.295 34.968 14.741 0.00 0.00 0 +ATOM 118 O 1 1 7.212 0.042 22.454 0.00 0.00 0 +ATOM 119 H 1 1 6.924 0.470 24.172 0.00 0.00 0 +ATOM 120 H 1 1 8.319 1.228 21.653 0.00 0.00 0 +ATOM 121 O 1 1 6.365 2.010 27.544 0.00 0.00 0 +ATOM 122 H 1 1 5.954 3.585 26.852 0.00 0.00 0 +ATOM 123 H 1 1 7.758 2.549 28.696 0.00 0.00 0 +ATOM 124 O 1 1 10.833 3.140 30.787 0.00 0.00 0 +ATOM 125 H 1 1 12.697 2.975 30.867 0.00 0.00 0 +ATOM 126 H 1 1 10.389 3.700 32.404 0.00 0.00 0 +ATOM 127 O 1 1 8.684 9.342 3.912 0.00 0.00 0 +ATOM 128 H 1 1 6.985 9.256 4.773 0.00 0.00 0 +ATOM 129 H 1 1 8.684 10.809 3.011 0.00 0.00 0 +ATOM 130 O 1 1 4.873 9.919 7.707 0.00 0.00 0 +ATOM 131 H 1 1 3.698 9.771 6.194 0.00 0.00 0 +ATOM 132 H 1 1 5.047 11.961 7.624 0.00 0.00 0 +ATOM 133 O 1 1 10.031 5.018 9.699 0.00 0.00 0 +ATOM 134 H 1 1 9.675 3.382 10.340 0.00 0.00 0 +ATOM 135 H 1 1 9.132 5.987 10.825 0.00 0.00 0 +ATOM 136 O 1 1 11.246 3.918 21.929 0.00 0.00 0 +ATOM 137 H 1 1 12.614 2.770 22.341 0.00 0.00 0 +ATOM 138 H 1 1 12.073 5.686 21.497 0.00 0.00 0 +ATOM 139 O 1 1 6.825 7.164 25.708 0.00 0.00 0 +ATOM 140 H 1 1 8.036 8.374 25.980 0.00 0.00 0 +ATOM 141 H 1 1 5.206 7.900 25.891 0.00 0.00 0 +ATOM 142 O 1 1 10.171 12.811 0.295 0.00 0.00 0 +ATOM 143 H 1 1 10.033 12.818 -1.609 0.00 0.00 0 +ATOM 144 H 1 1 9.880 14.492 0.480 0.00 0.00 0 +ATOM 145 O 1 1 8.190 17.402 1.253 0.00 0.00 0 +ATOM 146 H 1 1 9.472 18.531 1.253 0.00 0.00 0 +ATOM 147 H 1 1 6.351 17.817 1.568 0.00 0.00 0 +ATOM 148 O 1 1 11.233 16.188 8.299 0.00 0.00 0 +ATOM 149 H 1 1 10.291 17.689 8.166 0.00 0.00 0 +ATOM 150 H 1 1 12.768 17.123 8.733 0.00 0.00 0 +ATOM 151 O 1 1 6.386 8.002 12.846 0.00 0.00 0 +ATOM 152 H 1 1 7.701 8.896 13.655 0.00 0.00 0 +ATOM 153 H 1 1 5.591 8.877 11.519 0.00 0.00 0 +ATOM 154 O 1 1 8.184 10.419 18.848 0.00 0.00 0 +ATOM 155 H 1 1 9.498 9.434 19.905 0.00 0.00 0 +ATOM 156 H 1 1 6.882 9.027 18.948 0.00 0.00 0 +ATOM 157 O 1 1 10.806 14.431 21.328 0.00 0.00 0 +ATOM 158 H 1 1 9.177 13.531 20.670 0.00 0.00 0 +ATOM 159 H 1 1 11.344 15.696 20.448 0.00 0.00 0 +ATOM 160 O 1 1 9.237 13.928 30.341 0.00 0.00 0 +ATOM 161 H 1 1 10.779 14.839 30.522 0.00 0.00 0 +ATOM 162 H 1 1 9.965 13.192 28.899 0.00 0.00 0 +ATOM 163 O 1 1 10.918 21.707 1.864 0.00 0.00 0 +ATOM 164 H 1 1 10.280 23.449 2.279 0.00 0.00 0 +ATOM 165 H 1 1 12.708 21.456 1.749 0.00 0.00 0 +ATOM 166 O 1 1 9.353 16.125 13.927 0.00 0.00 0 +ATOM 167 H 1 1 9.938 17.594 14.618 0.00 0.00 0 +ATOM 168 H 1 1 9.518 16.360 12.244 0.00 0.00 0 +ATOM 169 O 1 1 10.371 11.107 14.268 0.00 0.00 0 +ATOM 170 H 1 1 9.644 10.406 15.859 0.00 0.00 0 +ATOM 171 H 1 1 9.434 12.523 14.117 0.00 0.00 0 +ATOM 172 O 1 1 3.351 22.769 20.196 0.00 0.00 0 +ATOM 173 H 1 1 2.055 23.686 21.503 0.00 0.00 0 +ATOM 174 H 1 1 2.452 21.401 19.413 0.00 0.00 0 +ATOM 175 O 1 1 6.836 21.329 23.199 0.00 0.00 0 +ATOM 176 H 1 1 8.249 20.848 22.320 0.00 0.00 0 +ATOM 177 H 1 1 5.668 21.841 21.886 0.00 0.00 0 +ATOM 178 O 1 1 4.604 15.649 30.043 0.00 0.00 0 +ATOM 179 H 1 1 6.453 15.217 30.207 0.00 0.00 0 +ATOM 180 H 1 1 3.822 14.762 31.562 0.00 0.00 0 +ATOM 181 O 1 1 7.125 19.976 9.421 0.00 0.00 0 +ATOM 182 H 1 1 5.918 20.453 10.730 0.00 0.00 0 +ATOM 183 H 1 1 8.099 21.496 9.491 0.00 0.00 0 +ATOM 184 O 1 1 9.063 25.912 13.186 0.00 0.00 0 +ATOM 185 H 1 1 10.350 26.572 12.367 0.00 0.00 0 +ATOM 186 H 1 1 9.680 24.367 13.697 0.00 0.00 0 +ATOM 187 O 1 1 8.022 22.343 17.042 0.00 0.00 0 +ATOM 188 H 1 1 9.144 23.367 18.074 0.00 0.00 0 +ATOM 189 H 1 1 6.562 23.462 16.852 0.00 0.00 0 +ATOM 190 O 1 1 10.762 26.285 19.963 0.00 0.00 0 +ATOM 191 H 1 1 11.036 27.966 20.538 0.00 0.00 0 +ATOM 192 H 1 1 11.078 25.401 21.456 0.00 0.00 0 +ATOM 193 O 1 1 9.158 22.902 28.391 0.00 0.00 0 +ATOM 194 H 1 1 8.219 23.528 27.085 0.00 0.00 0 +ATOM 195 H 1 1 8.089 21.760 29.509 0.00 0.00 0 +ATOM 196 O 1 1 6.219 20.158 31.921 0.00 0.00 0 +ATOM 197 H 1 1 5.635 18.511 31.161 0.00 0.00 0 +ATOM 198 H 1 1 7.530 19.624 33.071 0.00 0.00 0 +ATOM 199 O 1 1 11.191 31.509 2.617 0.00 0.00 0 +ATOM 200 H 1 1 10.460 32.214 4.108 0.00 0.00 0 +ATOM 201 H 1 1 13.176 31.751 2.577 0.00 0.00 0 +ATOM 202 O 1 1 4.748 0.055 8.605 0.00 0.00 0 +ATOM 203 H 1 1 5.380 0.517 10.183 0.00 0.00 0 +ATOM 204 H 1 1 6.050 -0.306 7.480 0.00 0.00 0 +ATOM 205 O 1 1 8.695 30.809 15.731 0.00 0.00 0 +ATOM 206 H 1 1 9.189 32.103 14.495 0.00 0.00 0 +ATOM 207 H 1 1 8.447 29.069 14.868 0.00 0.00 0 +ATOM 208 O 1 1 10.128 31.402 20.766 0.00 0.00 0 +ATOM 209 H 1 1 9.456 30.905 19.155 0.00 0.00 0 +ATOM 210 H 1 1 9.020 32.731 21.415 0.00 0.00 0 +ATOM 211 O 1 1 12.238 30.162 25.837 0.00 0.00 0 +ATOM 212 H 1 1 11.418 30.908 27.110 0.00 0.00 0 +ATOM 213 H 1 1 12.396 31.331 24.678 0.00 0.00 0 +ATOM 214 O 1 1 10.395 32.537 30.624 0.00 0.00 0 +ATOM 215 H 1 1 11.042 34.339 30.751 0.00 0.00 0 +ATOM 216 H 1 1 11.378 31.486 31.538 0.00 0.00 0 +ATOM 217 O 1 1 10.438 3.626 5.087 0.00 0.00 0 +ATOM 218 H 1 1 12.435 4.082 5.136 0.00 0.00 0 +ATOM 219 H 1 1 9.822 4.284 6.681 0.00 0.00 0 +ATOM 220 O 1 1 14.762 3.401 13.776 0.00 0.00 0 +ATOM 221 H 1 1 16.518 3.824 13.376 0.00 0.00 0 +ATOM 222 H 1 1 13.752 4.757 12.964 0.00 0.00 0 +ATOM 223 O 1 1 12.382 1.012 17.643 0.00 0.00 0 +ATOM 224 H 1 1 13.346 1.997 16.444 0.00 0.00 0 +ATOM 225 H 1 1 11.931 2.133 18.998 0.00 0.00 0 +ATOM 226 O 1 1 15.278 1.293 24.559 0.00 0.00 0 +ATOM 227 H 1 1 16.071 0.946 26.365 0.00 0.00 0 +ATOM 228 H 1 1 15.794 0.199 23.499 0.00 0.00 0 +ATOM 229 O 1 1 22.226 31.627 24.712 0.00 0.00 0 +ATOM 230 H 1 1 23.338 32.595 23.876 0.00 0.00 0 +ATOM 231 H 1 1 22.161 30.053 24.132 0.00 0.00 0 +ATOM 232 O 1 1 15.640 1.847 32.717 0.00 0.00 0 +ATOM 233 H 1 1 17.488 2.473 31.874 0.00 0.00 0 +ATOM 234 H 1 1 16.403 0.869 34.267 0.00 0.00 0 +ATOM 235 O 1 1 14.858 10.199 2.754 0.00 0.00 0 +ATOM 236 H 1 1 13.360 10.712 2.282 0.00 0.00 0 +ATOM 237 H 1 1 14.560 9.316 4.559 0.00 0.00 0 +ATOM 238 O 1 1 15.717 8.469 10.739 0.00 0.00 0 +ATOM 239 H 1 1 17.323 9.581 10.875 0.00 0.00 0 +ATOM 240 H 1 1 14.574 9.631 10.221 0.00 0.00 0 +ATOM 241 O 1 1 15.248 10.398 16.525 0.00 0.00 0 +ATOM 242 H 1 1 16.324 9.181 16.149 0.00 0.00 0 +ATOM 243 H 1 1 14.172 10.488 15.098 0.00 0.00 0 +ATOM 244 O 1 1 13.226 8.438 20.801 0.00 0.00 0 +ATOM 245 H 1 1 14.043 8.996 19.295 0.00 0.00 0 +ATOM 246 H 1 1 14.661 7.802 22.093 0.00 0.00 0 +ATOM 247 O 1 1 10.173 10.961 25.875 0.00 0.00 0 +ATOM 248 H 1 1 11.477 10.223 26.940 0.00 0.00 0 +ATOM 249 H 1 1 11.269 10.738 24.343 0.00 0.00 0 +ATOM 250 O 1 1 12.792 7.737 29.173 0.00 0.00 0 +ATOM 251 H 1 1 12.199 6.038 29.475 0.00 0.00 0 +ATOM 252 H 1 1 14.427 7.450 29.617 0.00 0.00 0 +ATOM 253 O 1 1 15.180 19.498 3.578 0.00 0.00 0 +ATOM 254 H 1 1 14.883 17.596 4.080 0.00 0.00 0 +ATOM 255 H 1 1 16.754 19.579 2.626 0.00 0.00 0 +ATOM 256 O 1 1 12.517 11.093 7.701 0.00 0.00 0 +ATOM 257 H 1 1 12.224 12.778 7.555 0.00 0.00 0 +ATOM 258 H 1 1 11.150 10.393 7.057 0.00 0.00 0 +ATOM 259 O 1 1 16.266 16.271 10.758 0.00 0.00 0 +ATOM 260 H 1 1 16.507 15.795 12.768 0.00 0.00 0 +ATOM 261 H 1 1 17.725 16.977 10.292 0.00 0.00 0 +ATOM 262 O 1 1 14.069 18.399 18.897 0.00 0.00 0 +ATOM 263 H 1 1 15.513 17.523 18.155 0.00 0.00 0 +ATOM 264 H 1 1 14.958 18.709 20.673 0.00 0.00 0 +ATOM 265 O 1 1 14.099 15.480 25.510 0.00 0.00 0 +ATOM 266 H 1 1 13.698 16.872 26.938 0.00 0.00 0 +ATOM 267 H 1 1 12.567 15.379 24.444 0.00 0.00 0 +ATOM 268 O 1 1 13.309 17.574 30.292 0.00 0.00 0 +ATOM 269 H 1 1 14.937 16.934 30.810 0.00 0.00 0 +ATOM 270 H 1 1 13.969 19.494 30.012 0.00 0.00 0 +ATOM 271 O 1 1 18.371 23.257 0.925 0.00 0.00 0 +ATOM 272 H 1 1 19.479 23.480 2.321 0.00 0.00 0 +ATOM 273 H 1 1 19.087 24.325 -0.369 0.00 0.00 0 +ATOM 274 O 1 1 12.100 21.730 11.355 0.00 0.00 0 +ATOM 275 H 1 1 13.141 22.287 12.743 0.00 0.00 0 +ATOM 276 H 1 1 13.467 22.236 10.244 0.00 0.00 0 +ATOM 277 O 1 1 12.163 23.290 23.597 0.00 0.00 0 +ATOM 278 H 1 1 11.324 22.736 24.949 0.00 0.00 0 +ATOM 279 H 1 1 13.882 22.872 23.840 0.00 0.00 0 +ATOM 280 O 1 1 20.173 26.761 22.628 0.00 0.00 0 +ATOM 281 H 1 1 20.206 26.532 20.792 0.00 0.00 0 +ATOM 282 H 1 1 21.556 25.742 23.389 0.00 0.00 0 +ATOM 283 O 1 1 16.701 21.165 22.605 0.00 0.00 0 +ATOM 284 H 1 1 18.028 20.686 23.848 0.00 0.00 0 +ATOM 285 H 1 1 17.104 22.866 21.949 0.00 0.00 0 +ATOM 286 O 1 1 11.391 26.461 33.705 0.00 0.00 0 +ATOM 287 H 1 1 9.841 27.192 34.048 0.00 0.00 0 +ATOM 288 H 1 1 11.776 25.540 35.243 0.00 0.00 0 +ATOM 289 O 1 1 9.898 25.989 4.553 0.00 0.00 0 +ATOM 290 H 1 1 8.902 26.131 6.039 0.00 0.00 0 +ATOM 291 H 1 1 10.287 27.806 4.376 0.00 0.00 0 +ATOM 292 O 1 1 14.308 26.960 10.877 0.00 0.00 0 +ATOM 293 H 1 1 15.302 27.405 12.173 0.00 0.00 0 +ATOM 294 H 1 1 15.463 26.151 9.633 0.00 0.00 0 +ATOM 295 O 1 1 13.433 22.960 16.904 0.00 0.00 0 +ATOM 296 H 1 1 13.409 24.131 18.132 0.00 0.00 0 +ATOM 297 H 1 1 13.624 21.191 17.520 0.00 0.00 0 +ATOM 298 O 1 1 16.409 26.768 26.875 0.00 0.00 0 +ATOM 299 H 1 1 17.590 26.987 25.431 0.00 0.00 0 +ATOM 300 H 1 1 14.751 27.703 26.230 0.00 0.00 0 +ATOM 301 O 1 1 14.405 22.733 29.892 0.00 0.00 0 +ATOM 302 H 1 1 15.423 23.079 28.494 0.00 0.00 0 +ATOM 303 H 1 1 12.826 23.259 29.416 0.00 0.00 0 +ATOM 304 O 1 1 6.905 29.408 0.749 0.00 0.00 0 +ATOM 305 H 1 1 8.428 30.483 1.567 0.00 0.00 0 +ATOM 306 H 1 1 6.353 30.814 -0.444 0.00 0.00 0 +ATOM 307 O 1 1 9.189 34.159 6.509 0.00 0.00 0 +ATOM 308 H 1 1 10.198 34.193 8.002 0.00 0.00 0 +ATOM 309 H 1 1 9.890 35.692 5.785 0.00 0.00 0 +ATOM 310 O 1 1 14.256 32.316 9.369 0.00 0.00 0 +ATOM 311 H 1 1 15.733 32.867 9.486 0.00 0.00 0 +ATOM 312 H 1 1 14.754 30.670 10.090 0.00 0.00 0 +ATOM 313 O 1 1 14.714 30.841 16.516 0.00 0.00 0 +ATOM 314 H 1 1 13.748 29.551 17.279 0.00 0.00 0 +ATOM 315 H 1 1 13.218 31.933 16.614 0.00 0.00 0 +ATOM 316 O 1 1 18.409 33.641 20.611 0.00 0.00 0 +ATOM 317 H 1 1 19.601 32.274 21.115 0.00 0.00 0 +ATOM 318 H 1 1 17.360 32.655 19.518 0.00 0.00 0 +ATOM 319 O 1 1 16.062 28.638 32.207 0.00 0.00 0 +ATOM 320 H 1 1 14.648 27.958 33.253 0.00 0.00 0 +ATOM 321 H 1 1 15.752 28.014 30.522 0.00 0.00 0 +ATOM 322 O 1 1 16.200 30.895 1.473 0.00 0.00 0 +ATOM 323 H 1 1 16.626 29.968 -0.130 0.00 0.00 0 +ATOM 324 H 1 1 17.167 29.833 2.927 0.00 0.00 0 +ATOM 325 O 1 1 20.278 3.529 6.048 0.00 0.00 0 +ATOM 326 H 1 1 20.977 3.611 4.575 0.00 0.00 0 +ATOM 327 H 1 1 21.312 4.513 7.251 0.00 0.00 0 +ATOM 328 O 1 1 23.079 5.778 10.408 0.00 0.00 0 +ATOM 329 H 1 1 24.650 6.259 10.838 0.00 0.00 0 +ATOM 330 H 1 1 22.342 7.609 10.178 0.00 0.00 0 +ATOM 331 O 1 1 19.581 2.031 12.110 0.00 0.00 0 +ATOM 332 H 1 1 19.039 1.082 10.440 0.00 0.00 0 +ATOM 333 H 1 1 21.141 2.991 11.851 0.00 0.00 0 +ATOM 334 O 1 1 22.005 3.223 23.178 0.00 0.00 0 +ATOM 335 H 1 1 21.429 4.090 24.554 0.00 0.00 0 +ATOM 336 H 1 1 20.654 1.791 22.711 0.00 0.00 0 +ATOM 337 O 1 1 16.630 6.422 23.792 0.00 0.00 0 +ATOM 338 H 1 1 16.219 4.804 24.406 0.00 0.00 0 +ATOM 339 H 1 1 17.066 7.128 25.282 0.00 0.00 0 +ATOM 340 O 1 1 21.676 5.564 28.158 0.00 0.00 0 +ATOM 341 H 1 1 20.658 6.717 29.185 0.00 0.00 0 +ATOM 342 H 1 1 23.413 5.828 28.996 0.00 0.00 0 +ATOM 343 O 1 1 15.257 5.265 5.626 0.00 0.00 0 +ATOM 344 H 1 1 16.914 4.519 5.490 0.00 0.00 0 +ATOM 345 H 1 1 15.144 6.150 6.972 0.00 0.00 0 +ATOM 346 O 1 1 20.137 11.082 10.437 0.00 0.00 0 +ATOM 347 H 1 1 20.021 10.947 8.733 0.00 0.00 0 +ATOM 348 H 1 1 21.025 12.555 10.853 0.00 0.00 0 +ATOM 349 O 1 1 23.089 14.627 12.437 0.00 0.00 0 +ATOM 350 H 1 1 24.716 15.254 12.736 0.00 0.00 0 +ATOM 351 H 1 1 23.284 13.228 13.653 0.00 0.00 0 +ATOM 352 O 1 1 24.083 12.649 22.566 0.00 0.00 0 +ATOM 353 H 1 1 22.397 12.663 23.042 0.00 0.00 0 +ATOM 354 H 1 1 24.901 13.851 23.565 0.00 0.00 0 +ATOM 355 O 1 1 17.865 7.909 30.036 0.00 0.00 0 +ATOM 356 H 1 1 17.509 8.045 31.982 0.00 0.00 0 +ATOM 357 H 1 1 18.078 9.582 29.318 0.00 0.00 0 +ATOM 358 O 1 1 18.824 8.486 0.104 0.00 0.00 0 +ATOM 359 H 1 1 19.997 10.191 -0.057 0.00 0.00 0 +ATOM 360 H 1 1 17.077 8.998 0.779 0.00 0.00 0 +ATOM 361 O 1 1 20.122 9.143 5.343 0.00 0.00 0 +ATOM 362 H 1 1 19.373 8.819 3.821 0.00 0.00 0 +ATOM 363 H 1 1 21.998 8.776 5.128 0.00 0.00 0 +ATOM 364 O 1 1 16.413 14.459 5.855 0.00 0.00 0 +ATOM 365 H 1 1 15.536 13.007 5.239 0.00 0.00 0 +ATOM 366 H 1 1 16.006 14.725 7.737 0.00 0.00 0 +ATOM 367 O 1 1 17.561 15.066 15.654 0.00 0.00 0 +ATOM 368 H 1 1 17.575 13.398 16.055 0.00 0.00 0 +ATOM 369 H 1 1 18.978 15.828 16.400 0.00 0.00 0 +ATOM 370 O 1 1 26.374 17.047 24.817 0.00 0.00 0 +ATOM 371 H 1 1 27.983 17.098 25.632 0.00 0.00 0 +ATOM 372 H 1 1 25.629 18.751 24.919 0.00 0.00 0 +ATOM 373 O 1 1 19.784 12.960 28.706 0.00 0.00 0 +ATOM 374 H 1 1 21.662 13.055 28.871 0.00 0.00 0 +ATOM 375 H 1 1 19.545 14.070 27.143 0.00 0.00 0 +ATOM 376 O 1 1 17.891 16.733 32.499 0.00 0.00 0 +ATOM 377 H 1 1 18.327 15.240 31.277 0.00 0.00 0 +ATOM 378 H 1 1 18.633 18.335 31.693 0.00 0.00 0 +ATOM 379 O 1 1 23.733 23.024 1.663 0.00 0.00 0 +ATOM 380 H 1 1 24.800 24.052 2.776 0.00 0.00 0 +ATOM 381 H 1 1 24.693 22.618 0.198 0.00 0.00 0 +ATOM 382 O 1 1 20.789 18.440 9.443 0.00 0.00 0 +ATOM 383 H 1 1 20.766 17.257 7.881 0.00 0.00 0 +ATOM 384 H 1 1 21.896 17.345 10.385 0.00 0.00 0 +ATOM 385 O 1 1 21.574 17.493 17.838 0.00 0.00 0 +ATOM 386 H 1 1 20.597 18.955 17.218 0.00 0.00 0 +ATOM 387 H 1 1 22.538 16.874 16.251 0.00 0.00 0 +ATOM 388 O 1 1 19.168 14.748 24.131 0.00 0.00 0 +ATOM 389 H 1 1 19.711 16.390 23.712 0.00 0.00 0 +ATOM 390 H 1 1 17.429 14.695 24.403 0.00 0.00 0 +ATOM 391 O 1 1 22.149 20.198 24.977 0.00 0.00 0 +ATOM 392 H 1 1 21.639 20.924 26.486 0.00 0.00 0 +ATOM 393 H 1 1 22.656 21.657 24.411 0.00 0.00 0 +ATOM 394 O 1 1 20.565 20.792 29.600 0.00 0.00 0 +ATOM 395 H 1 1 22.264 20.409 30.214 0.00 0.00 0 +ATOM 396 H 1 1 20.548 22.408 30.597 0.00 0.00 0 +ATOM 397 O 1 1 20.802 26.547 9.615 0.00 0.00 0 +ATOM 398 H 1 1 20.099 27.984 8.338 0.00 0.00 0 +ATOM 399 H 1 1 21.277 27.539 11.325 0.00 0.00 0 +ATOM 400 O 1 1 16.283 23.589 7.779 0.00 0.00 0 +ATOM 401 H 1 1 16.093 21.973 6.712 0.00 0.00 0 +ATOM 402 H 1 1 17.901 22.971 8.154 0.00 0.00 0 +ATOM 403 O 1 1 18.469 29.798 13.568 0.00 0.00 0 +ATOM 404 H 1 1 19.712 31.216 13.506 0.00 0.00 0 +ATOM 405 H 1 1 16.872 30.343 14.396 0.00 0.00 0 +ATOM 406 O 1 1 18.790 21.712 16.060 0.00 0.00 0 +ATOM 407 H 1 1 19.878 23.090 16.485 0.00 0.00 0 +ATOM 408 H 1 1 17.201 22.326 15.819 0.00 0.00 0 +ATOM 409 O 1 1 21.747 26.084 16.349 0.00 0.00 0 +ATOM 410 H 1 1 20.783 27.021 15.300 0.00 0.00 0 +ATOM 411 H 1 1 22.705 27.328 17.206 0.00 0.00 0 +ATOM 412 O 1 1 20.769 26.211 32.050 0.00 0.00 0 +ATOM 413 H 1 1 21.488 27.404 33.328 0.00 0.00 0 +ATOM 414 H 1 1 18.989 26.710 32.145 0.00 0.00 0 +ATOM 415 O 1 1 19.820 29.181 5.559 0.00 0.00 0 +ATOM 416 H 1 1 20.991 29.509 4.109 0.00 0.00 0 +ATOM 417 H 1 1 19.431 31.018 6.221 0.00 0.00 0 +ATOM 418 O 1 1 19.240 33.867 7.993 0.00 0.00 0 +ATOM 419 H 1 1 19.107 35.039 6.604 0.00 0.00 0 +ATOM 420 H 1 1 20.697 33.671 9.063 0.00 0.00 0 +ATOM 421 O 1 1 22.511 34.976 15.793 0.00 0.00 0 +ATOM 422 H 1 1 23.716 36.163 16.603 0.00 0.00 0 +ATOM 423 H 1 1 21.699 36.150 14.467 0.00 0.00 0 +ATOM 424 O 1 1 22.622 30.284 19.069 0.00 0.00 0 +ATOM 425 H 1 1 22.049 31.351 17.725 0.00 0.00 0 +ATOM 426 H 1 1 24.411 30.773 19.576 0.00 0.00 0 +ATOM 427 O 1 1 18.639 33.611 28.369 0.00 0.00 0 +ATOM 428 H 1 1 18.226 32.159 29.103 0.00 0.00 0 +ATOM 429 H 1 1 19.906 33.008 27.158 0.00 0.00 0 +ATOM 430 O 1 1 22.520 1.325 31.926 0.00 0.00 0 +ATOM 431 H 1 1 22.803 2.668 30.796 0.00 0.00 0 +ATOM 432 H 1 1 21.045 0.425 31.122 0.00 0.00 0 +ATOM 433 O 1 1 21.754 3.789 1.159 0.00 0.00 0 +ATOM 434 H 1 1 22.085 2.785 -0.180 0.00 0.00 0 +ATOM 435 H 1 1 20.850 5.175 0.610 0.00 0.00 0 +ATOM 436 O 1 1 28.457 5.539 12.133 0.00 0.00 0 +ATOM 437 H 1 1 29.489 4.390 11.182 0.00 0.00 0 +ATOM 438 H 1 1 29.161 7.131 12.587 0.00 0.00 0 +ATOM 439 O 1 1 22.495 5.966 17.324 0.00 0.00 0 +ATOM 440 H 1 1 24.377 5.379 17.393 0.00 0.00 0 +ATOM 441 H 1 1 21.906 5.491 18.857 0.00 0.00 0 +ATOM 442 O 1 1 28.128 3.304 22.287 0.00 0.00 0 +ATOM 443 H 1 1 28.123 2.999 20.491 0.00 0.00 0 +ATOM 444 H 1 1 26.533 3.355 22.876 0.00 0.00 0 +ATOM 445 O 1 1 28.378 10.455 27.266 0.00 0.00 0 +ATOM 446 H 1 1 30.019 10.292 28.051 0.00 0.00 0 +ATOM 447 H 1 1 28.635 10.039 25.463 0.00 0.00 0 +ATOM 448 O 1 1 27.031 8.353 34.806 0.00 0.00 0 +ATOM 449 H 1 1 26.116 9.984 34.571 0.00 0.00 0 +ATOM 450 H 1 1 28.685 8.951 34.739 0.00 0.00 0 +ATOM 451 O 1 1 24.951 8.160 4.454 0.00 0.00 0 +ATOM 452 H 1 1 25.930 9.616 5.160 0.00 0.00 0 +ATOM 453 H 1 1 25.947 7.994 2.724 0.00 0.00 0 +ATOM 454 O 1 1 26.937 12.436 6.869 0.00 0.00 0 +ATOM 455 H 1 1 25.492 13.284 6.708 0.00 0.00 0 +ATOM 456 H 1 1 27.689 13.332 8.266 0.00 0.00 0 +ATOM 457 O 1 1 23.365 11.214 16.933 0.00 0.00 0 +ATOM 458 H 1 1 22.247 9.744 16.789 0.00 0.00 0 +ATOM 459 H 1 1 23.264 12.035 18.539 0.00 0.00 0 +ATOM 460 O 1 1 28.321 8.759 22.158 0.00 0.00 0 +ATOM 461 H 1 1 27.662 6.895 22.482 0.00 0.00 0 +ATOM 462 H 1 1 26.971 9.710 21.902 0.00 0.00 0 +ATOM 463 O 1 1 27.071 6.109 29.555 0.00 0.00 0 +ATOM 464 H 1 1 27.591 7.663 28.857 0.00 0.00 0 +ATOM 465 H 1 1 27.304 6.320 31.261 0.00 0.00 0 +ATOM 466 O 1 1 22.474 11.704 34.640 0.00 0.00 0 +ATOM 467 H 1 1 22.752 13.304 35.584 0.00 0.00 0 +ATOM 468 H 1 1 22.840 12.090 33.030 0.00 0.00 0 +ATOM 469 O 1 1 21.656 14.971 5.615 0.00 0.00 0 +ATOM 470 H 1 1 21.690 15.860 3.977 0.00 0.00 0 +ATOM 471 H 1 1 19.964 14.225 5.774 0.00 0.00 0 +ATOM 472 O 1 1 28.539 21.492 9.820 0.00 0.00 0 +ATOM 473 H 1 1 27.288 22.181 8.688 0.00 0.00 0 +ATOM 474 H 1 1 28.065 22.420 11.602 0.00 0.00 0 +ATOM 475 O 1 1 28.364 16.020 11.109 0.00 0.00 0 +ATOM 476 H 1 1 30.033 16.649 12.089 0.00 0.00 0 +ATOM 477 H 1 1 28.456 17.440 10.082 0.00 0.00 0 +ATOM 478 O 1 1 0.054 13.686 18.103 0.00 0.00 0 +ATOM 479 H 1 1 -1.714 12.928 18.841 0.00 0.00 0 +ATOM 480 H 1 1 1.008 12.429 17.383 0.00 0.00 0 +ATOM 481 O 1 1 24.636 12.894 29.957 0.00 0.00 0 +ATOM 482 H 1 1 25.906 13.914 31.183 0.00 0.00 0 +ATOM 483 H 1 1 25.641 11.609 29.162 0.00 0.00 0 +ATOM 484 O 1 1 21.548 17.250 0.749 0.00 0.00 0 +ATOM 485 H 1 1 21.843 19.026 0.905 0.00 0.00 0 +ATOM 486 H 1 1 20.385 16.716 -0.697 0.00 0.00 0 +ATOM 487 O 1 1 26.095 27.274 4.520 0.00 0.00 0 +ATOM 488 H 1 1 27.889 26.458 4.505 0.00 0.00 0 +ATOM 489 H 1 1 25.648 26.970 6.165 0.00 0.00 0 +ATOM 490 O 1 1 23.610 22.515 8.008 0.00 0.00 0 +ATOM 491 H 1 1 22.653 21.187 8.739 0.00 0.00 0 +ATOM 492 H 1 1 22.286 24.095 8.444 0.00 0.00 0 +ATOM 493 O 1 1 27.355 18.929 18.180 0.00 0.00 0 +ATOM 494 H 1 1 27.200 20.349 17.155 0.00 0.00 0 +ATOM 495 H 1 1 25.579 18.322 18.770 0.00 0.00 0 +ATOM 496 O 1 1 26.765 23.633 14.444 0.00 0.00 0 +ATOM 497 H 1 1 27.441 25.298 13.651 0.00 0.00 0 +ATOM 498 H 1 1 25.086 24.256 14.749 0.00 0.00 0 +ATOM 499 O 1 1 31.478 20.769 20.986 0.00 0.00 0 +ATOM 500 H 1 1 30.440 22.509 21.135 0.00 0.00 0 +ATOM 501 H 1 1 30.567 19.656 20.043 0.00 0.00 0 +ATOM 502 O 1 1 24.812 20.412 32.668 0.00 0.00 0 +ATOM 503 H 1 1 26.242 21.478 31.874 0.00 0.00 0 +ATOM 504 H 1 1 25.787 19.023 33.158 0.00 0.00 0 +ATOM 505 O 1 1 22.105 29.076 0.928 0.00 0.00 0 +ATOM 506 H 1 1 23.296 27.923 1.739 0.00 0.00 0 +ATOM 507 H 1 1 22.623 30.994 0.882 0.00 0.00 0 +ATOM 508 O 1 1 29.572 31.256 8.626 0.00 0.00 0 +ATOM 509 H 1 1 30.795 30.203 7.736 0.00 0.00 0 +ATOM 510 H 1 1 28.277 31.519 7.260 0.00 0.00 0 +ATOM 511 O 1 1 31.817 34.843 18.283 0.00 0.00 0 +ATOM 512 H 1 1 32.438 34.389 16.474 0.00 0.00 0 +ATOM 513 H 1 1 32.743 36.422 18.341 0.00 0.00 0 +ATOM 514 O 1 1 27.915 25.601 19.033 0.00 0.00 0 +ATOM 515 H 1 1 29.358 26.561 19.190 0.00 0.00 0 +ATOM 516 H 1 1 28.148 24.429 17.530 0.00 0.00 0 +ATOM 517 O 1 1 24.548 24.654 24.025 0.00 0.00 0 +ATOM 518 H 1 1 25.528 25.635 22.824 0.00 0.00 0 +ATOM 519 H 1 1 25.300 25.200 25.645 0.00 0.00 0 +ATOM 520 O 1 1 28.540 22.922 30.370 0.00 0.00 0 +ATOM 521 H 1 1 27.414 24.096 29.781 0.00 0.00 0 +ATOM 522 H 1 1 29.674 23.914 31.873 0.00 0.00 0 +ATOM 523 O 1 1 24.969 33.623 1.014 0.00 0.00 0 +ATOM 524 H 1 1 26.521 33.058 1.518 0.00 0.00 0 +ATOM 525 H 1 1 24.990 34.322 -0.683 0.00 0.00 0 +ATOM 526 O 1 1 23.075 32.171 11.324 0.00 0.00 0 +ATOM 527 H 1 1 23.316 32.775 13.097 0.00 0.00 0 +ATOM 528 H 1 1 24.460 33.203 10.662 0.00 0.00 0 +ATOM 529 O 1 1 27.497 2.736 17.224 0.00 0.00 0 +ATOM 530 H 1 1 28.397 3.415 15.715 0.00 0.00 0 +ATOM 531 H 1 1 28.234 1.233 17.412 0.00 0.00 0 +ATOM 532 O 1 1 26.369 33.060 22.077 0.00 0.00 0 +ATOM 533 H 1 1 26.170 34.746 22.264 0.00 0.00 0 +ATOM 534 H 1 1 27.592 32.404 23.321 0.00 0.00 0 +ATOM 535 O 1 1 30.221 30.950 25.843 0.00 0.00 0 +ATOM 536 H 1 1 30.305 29.038 26.208 0.00 0.00 0 +ATOM 537 H 1 1 30.363 31.979 27.414 0.00 0.00 0 +ATOM 538 O 1 1 24.973 26.732 28.607 0.00 0.00 0 +ATOM 539 H 1 1 25.385 28.369 29.248 0.00 0.00 0 +ATOM 540 H 1 1 23.330 26.597 29.234 0.00 0.00 0 +ATOM 541 O 1 1 32.165 4.857 2.258 0.00 0.00 0 +ATOM 542 H 1 1 32.417 6.195 1.157 0.00 0.00 0 +ATOM 543 H 1 1 32.615 3.727 1.112 0.00 0.00 0 +ATOM 544 O 1 1 28.067 3.533 5.217 0.00 0.00 0 +ATOM 545 H 1 1 26.960 4.447 4.158 0.00 0.00 0 +ATOM 546 H 1 1 29.875 3.863 4.448 0.00 0.00 0 +ATOM 547 O 1 1 33.279 2.782 13.028 0.00 0.00 0 +ATOM 548 H 1 1 33.708 3.955 11.817 0.00 0.00 0 +ATOM 549 H 1 1 33.656 3.545 14.631 0.00 0.00 0 +ATOM 550 O 1 1 34.278 4.944 17.492 0.00 0.00 0 +ATOM 551 H 1 1 33.438 6.563 17.876 0.00 0.00 0 +ATOM 552 H 1 1 34.906 4.452 18.995 0.00 0.00 0 +ATOM 553 O 1 1 32.363 1.908 26.092 0.00 0.00 0 +ATOM 554 H 1 1 31.941 1.683 24.268 0.00 0.00 0 +ATOM 555 H 1 1 33.850 1.390 26.904 0.00 0.00 0 +ATOM 556 O 1 1 27.982 0.418 28.241 0.00 0.00 0 +ATOM 557 H 1 1 27.516 2.080 28.309 0.00 0.00 0 +ATOM 558 H 1 1 29.593 0.176 27.299 0.00 0.00 0 +ATOM 559 O 1 1 28.845 14.672 2.724 0.00 0.00 0 +ATOM 560 H 1 1 27.963 13.930 4.139 0.00 0.00 0 +ATOM 561 H 1 1 30.386 15.714 3.379 0.00 0.00 0 +ATOM 562 O 1 1 28.083 10.618 14.298 0.00 0.00 0 +ATOM 563 H 1 1 28.623 12.160 13.293 0.00 0.00 0 +ATOM 564 H 1 1 26.486 11.015 15.379 0.00 0.00 0 +ATOM 565 O 1 1 33.867 10.545 13.306 0.00 0.00 0 +ATOM 566 H 1 1 35.165 9.612 13.810 0.00 0.00 0 +ATOM 567 H 1 1 33.615 10.270 11.513 0.00 0.00 0 +ATOM 568 O 1 1 31.790 9.696 18.223 0.00 0.00 0 +ATOM 569 H 1 1 30.484 9.334 19.421 0.00 0.00 0 +ATOM 570 H 1 1 30.834 10.096 16.929 0.00 0.00 0 +ATOM 571 O 1 1 30.141 15.006 21.532 0.00 0.00 0 +ATOM 572 H 1 1 28.565 15.594 22.099 0.00 0.00 0 +ATOM 573 H 1 1 30.942 14.253 23.077 0.00 0.00 0 +ATOM 574 O 1 1 32.798 10.732 30.680 0.00 0.00 0 +ATOM 575 H 1 1 34.073 9.528 30.799 0.00 0.00 0 +ATOM 576 H 1 1 32.991 11.512 28.983 0.00 0.00 0 +ATOM 577 O 1 1 33.652 16.265 5.086 0.00 0.00 0 +ATOM 578 H 1 1 35.399 16.239 4.730 0.00 0.00 0 +ATOM 579 H 1 1 33.503 17.939 5.631 0.00 0.00 0 +ATOM 580 O 1 1 31.947 10.799 7.943 0.00 0.00 0 +ATOM 581 H 1 1 29.894 10.549 7.619 0.00 0.00 0 +ATOM 582 H 1 1 32.271 12.414 7.075 0.00 0.00 0 +ATOM 583 O 1 1 0.329 15.516 11.746 0.00 0.00 0 +ATOM 584 H 1 1 -0.446 14.249 12.939 0.00 0.00 0 +ATOM 585 H 1 1 -0.685 17.018 11.935 0.00 0.00 0 +ATOM 586 O 1 1 4.262 19.165 14.308 0.00 0.00 0 +ATOM 587 H 1 1 3.579 17.691 14.920 0.00 0.00 0 +ATOM 588 H 1 1 5.723 19.183 15.204 0.00 0.00 0 +ATOM 589 O 1 1 32.995 13.546 25.948 0.00 0.00 0 +ATOM 590 H 1 1 32.167 15.060 26.787 0.00 0.00 0 +ATOM 591 H 1 1 34.425 13.800 25.007 0.00 0.00 0 +ATOM 592 O 1 1 1.773 13.524 34.037 0.00 0.00 0 +ATOM 593 H 1 1 0.227 14.409 33.446 0.00 0.00 0 +ATOM 594 H 1 1 2.167 14.670 35.511 0.00 0.00 0 +ATOM 595 O 1 1 33.029 20.529 7.247 0.00 0.00 0 +ATOM 596 H 1 1 34.388 21.414 8.003 0.00 0.00 0 +ATOM 597 H 1 1 31.451 20.831 8.182 0.00 0.00 0 +ATOM 598 O 1 1 2.037 24.250 10.251 0.00 0.00 0 +ATOM 599 H 1 1 3.743 25.008 9.876 0.00 0.00 0 +ATOM 600 H 1 1 1.894 25.043 11.903 0.00 0.00 0 +ATOM 601 O 1 1 32.753 19.259 13.976 0.00 0.00 0 +ATOM 602 H 1 1 32.792 20.886 13.792 0.00 0.00 0 +ATOM 603 H 1 1 34.334 18.799 14.976 0.00 0.00 0 +ATOM 604 O 1 1 0.396 18.673 18.699 0.00 0.00 0 +ATOM 605 H 1 1 -1.211 18.950 19.127 0.00 0.00 0 +ATOM 606 H 1 1 0.469 16.977 18.436 0.00 0.00 0 +ATOM 607 O 1 1 30.855 18.370 27.959 0.00 0.00 0 +ATOM 608 H 1 1 29.759 19.681 28.690 0.00 0.00 0 +ATOM 609 H 1 1 32.103 19.477 26.763 0.00 0.00 0 +ATOM 610 O 1 1 27.723 15.992 33.091 0.00 0.00 0 +ATOM 611 H 1 1 29.390 16.423 32.192 0.00 0.00 0 +ATOM 612 H 1 1 27.801 15.859 34.804 0.00 0.00 0 +ATOM 613 O 1 1 31.068 27.895 3.348 0.00 0.00 0 +ATOM 614 H 1 1 32.517 27.825 4.610 0.00 0.00 0 +ATOM 615 H 1 1 31.529 29.459 2.324 0.00 0.00 0 +ATOM 616 O 1 1 35.039 28.008 6.663 0.00 0.00 0 +ATOM 617 H 1 1 35.966 26.934 7.683 0.00 0.00 0 +ATOM 618 H 1 1 36.055 28.336 5.336 0.00 0.00 0 +ATOM 619 O 1 1 29.356 28.196 13.025 0.00 0.00 0 +ATOM 620 H 1 1 29.210 29.335 14.589 0.00 0.00 0 +ATOM 621 H 1 1 28.874 29.629 11.867 0.00 0.00 0 +ATOM 622 O 1 1 32.386 28.434 18.961 0.00 0.00 0 +ATOM 623 H 1 1 33.368 28.574 20.411 0.00 0.00 0 +ATOM 624 H 1 1 33.410 27.406 17.949 0.00 0.00 0 +ATOM 625 O 1 1 30.898 25.390 25.799 0.00 0.00 0 +ATOM 626 H 1 1 32.369 25.913 24.580 0.00 0.00 0 +ATOM 627 H 1 1 31.317 24.075 27.029 0.00 0.00 0 +ATOM 628 O 1 1 32.259 25.611 33.104 0.00 0.00 0 +ATOM 629 H 1 1 32.238 25.736 34.806 0.00 0.00 0 +ATOM 630 H 1 1 33.920 25.042 32.775 0.00 0.00 0 +ATOM 631 O 1 1 30.290 32.645 1.341 0.00 0.00 0 +ATOM 632 H 1 1 29.949 32.793 -0.430 0.00 0.00 0 +ATOM 633 H 1 1 31.762 33.340 1.847 0.00 0.00 0 +ATOM 634 O 1 1 25.536 34.235 6.469 0.00 0.00 0 +ATOM 635 H 1 1 25.716 36.059 6.651 0.00 0.00 0 +ATOM 636 H 1 1 25.283 33.866 4.895 0.00 0.00 0 +ATOM 637 O 1 1 31.674 33.161 13.106 0.00 0.00 0 +ATOM 638 H 1 1 31.793 34.863 13.281 0.00 0.00 0 +ATOM 639 H 1 1 30.425 32.928 11.783 0.00 0.00 0 +ATOM 640 O 1 1 33.844 32.668 22.296 0.00 0.00 0 +ATOM 641 H 1 1 32.750 32.234 23.524 0.00 0.00 0 +ATOM 642 H 1 1 32.917 32.875 20.736 0.00 0.00 0 +ATOM 643 O 1 1 31.603 30.542 30.805 0.00 0.00 0 +ATOM 644 H 1 1 33.451 30.804 30.468 0.00 0.00 0 +ATOM 645 H 1 1 31.575 28.816 31.756 0.00 0.00 0 +ATOM 646 O 1 1 26.295 31.235 30.599 0.00 0.00 0 +ATOM 647 H 1 1 27.834 30.515 30.607 0.00 0.00 0 +ATOM 648 H 1 1 26.362 32.920 29.856 0.00 0.00 0 +END diff --git a/tools/i-pi/examples/lammps/h2o-piglet.4/data.water b/tools/i-pi/examples/lammps/h2o-piglet.4/data.water new file mode 100644 index 000000000..13c75e993 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.4/data.water @@ -0,0 +1,1331 @@ +LAMMPS Description + + 648 atoms + 432 bonds + 216 angles + + 2 atom types + 1 bond types + 1 angle types + + 0 35.233 xlo xhi + 0 35.233 ylo yhi + 0 35.233 zlo zhi + +Masses + + 1 15.9994 + 2 1.0080 + +Bond Coeffs + + 1 1.78 0.2708585 -0.327738785 0.231328959 + +Angle Coeffs + + 1 0.0700 107.400000 + +Atoms + + 1 1 1 -1.1128 3.84600000 5.67200001 1.32300000 + 2 1 2 0.5564 2.97900000 7.05400000 0.85700000 + 3 1 2 0.5564 5.52500001 5.69700001 0.45100000 + 4 2 1 -1.1128 34.55700001 34.34100000 3.07800000 + 5 2 2 0.5564 33.72200001 34.68900000 4.84000001 + 6 2 2 0.5564 36.02900000 33.22000001 3.71100001 + 7 3 1 -1.1128 5.59100000 1.96299999 13.47700000 + 8 3 2 0.5564 7.26500000 1.86400000 13.85100001 + 9 3 2 0.5564 5.00899999 3.55500000 13.91599999 + 10 4 1 -1.1128 1.06000000 2.06100000 21.71800001 + 11 4 2 0.5564 0.75700000 0.26100000 21.82000000 + 12 4 2 0.5564 0.21300001 3.01299999 23.04700000 + 13 5 1 -1.1128 1.20000000 1.33700000 29.00599999 + 14 5 2 0.5564 0.81800000 1.88399999 30.73200000 + 15 5 2 0.5564 2.88300001 1.82500000 29.01100000 + 16 6 1 -1.1128 1.33100001 1.38599999 34.30600001 + 17 6 2 0.5564 2.39200001 2.89799999 34.84600000 + 18 6 2 0.5564 0.81400000 0.53200001 35.83600000 + 19 7 1 -1.1128 31.45100000 10.20100000 0.72599999 + 20 7 2 0.5564 32.28199999 10.87699999 -0.75000000 + 21 7 2 0.5564 30.91999999 11.59399999 1.67700000 + 22 8 1 -1.1128 0.83600000 10.80800001 4.29800000 + 23 8 2 0.5564 0.30500000 10.64300001 2.79300000 + 24 8 2 0.5564 -0.35600001 10.33400000 5.52400000 + 25 9 1 -1.1128 34.38100001 5.97900000 9.19400000 + 26 9 2 0.5564 33.61600000 7.67300000 8.85700000 + 27 9 2 0.5564 35.11500000 5.25999999 7.61800001 + 28 10 1 -1.1128 33.21200000 6.48000000 24.27799999 + 29 10 2 0.5564 31.62400000 6.90800001 23.52100001 + 30 10 2 0.5564 32.54400000 4.99000000 24.98200000 + 31 11 1 -1.1128 1.99200000 9.00199999 26.86300000 + 32 11 2 0.5564 1.85600000 10.17500000 25.57899999 + 33 11 2 0.5564 0.51900000 8.09899999 26.38599999 + 34 12 1 -1.1128 2.05400000 8.66000000 32.51499999 + 35 12 2 0.5564 2.16699999 8.72700000 30.49400000 + 36 12 2 0.5564 2.37400001 10.51300000 33.03799999 + 37 13 1 -1.1128 3.40200000 16.63900001 3.00800000 + 38 13 2 0.5564 4.12700001 15.87200001 4.44600001 + 39 13 2 0.5564 2.90500001 18.33899999 3.15999999 + 40 14 1 -1.1128 4.22200000 15.44400000 8.07200000 + 41 14 2 0.5564 5.21100000 16.75600000 8.29900001 + 42 14 2 0.5564 2.56000000 15.49200001 8.86000000 + 43 15 1 -1.1128 2.83100000 9.24599999 16.48800000 + 44 15 2 0.5564 2.86900001 8.02300001 18.05000000 + 45 15 2 0.5564 3.96000000 8.46700001 15.15400000 + 46 16 1 -1.1128 5.56300000 6.00300000 20.90700000 + 47 16 2 0.5564 4.65300000 4.63800000 21.48000000 + 48 16 2 0.5564 6.40500000 6.20800000 22.52899999 + 49 17 1 -1.1128 2.08700001 13.37000000 22.91299999 + 50 17 2 0.5564 2.83200000 14.80400001 23.42200000 + 51 17 2 0.5564 1.43400000 13.50900000 21.19599999 + 52 18 1 -1.1128 3.36900000 17.88600000 25.10900001 + 53 18 2 0.5564 3.65500000 17.20000000 26.76599999 + 54 18 2 0.5564 4.77200001 18.97699999 24.49999999 + 55 19 1 -1.1128 34.76400000 20.80300000 0.94800001 + 56 19 2 0.5564 35.20999999 21.26700001 2.81599999 + 57 19 2 0.5564 35.96200001 21.72599999 0.13099999 + 58 20 1 -1.1128 2.83600000 24.17799999 15.22900000 + 59 20 2 0.5564 2.79500000 22.34599999 14.87600001 + 60 20 2 0.5564 2.41399999 24.11500000 17.13000001 + 61 21 1 -1.1128 33.00000000 24.48100000 15.23000000 + 62 21 2 0.5564 34.63999999 24.80400001 15.01299999 + 63 21 2 0.5564 32.40100000 25.76400000 14.29500001 + 64 22 1 -1.1128 0.40399999 26.77900001 23.39999999 + 65 22 2 0.5564 1.35300001 27.24800000 24.98700001 + 66 22 2 0.5564 1.54600001 28.05000000 22.31700001 + 67 23 1 -1.1128 34.22200000 21.38000000 25.41799999 + 68 23 2 0.5564 35.66899999 20.15100000 25.31700001 + 69 23 2 0.5564 32.96000000 21.18000000 23.99200000 + 70 24 1 -1.1128 33.25900000 17.43800000 32.48000000 + 71 24 2 0.5564 33.31399999 18.78200000 33.88300001 + 72 24 2 0.5564 32.74300001 18.18100001 30.87100000 + 73 25 1 -1.1128 4.46300000 21.97900000 3.93600000 + 74 25 2 0.5564 5.85600000 23.08400001 3.39999999 + 75 25 2 0.5564 3.98600000 22.18000000 5.60200000 + 76 26 1 -1.1128 6.25800000 25.85100001 8.52000000 + 77 26 2 0.5564 5.76700000 27.69300001 8.47600000 + 78 26 2 0.5564 7.20200001 25.50600000 10.18600000 + 79 27 1 -1.1128 0.60099999 29.73699999 12.74700001 + 80 27 2 0.5564 -0.68500000 30.84200000 12.34999999 + 81 27 2 0.5564 1.33600000 30.71600000 14.03099999 + 82 28 1 -1.1128 7.56300000 28.19100001 24.33300000 + 83 28 2 0.5564 9.20100000 28.82800000 24.68400000 + 84 28 2 0.5564 7.38100001 27.62100000 22.79900000 + 85 29 1 -1.1128 3.65300000 27.10900001 27.77200001 + 86 29 2 0.5564 5.12600000 27.01500000 26.77200001 + 87 29 2 0.5564 3.03099999 28.75600000 27.69800000 + 88 30 1 -1.1128 2.59600001 23.99100001 32.47600000 + 89 30 2 0.5564 2.87900000 24.79099999 30.85899999 + 90 30 2 0.5564 4.00300000 22.91299999 32.70099999 + 91 31 1 -1.1128 3.08300000 31.31700001 3.64399999 + 92 31 2 0.5564 4.13300000 30.58900001 2.53900001 + 93 31 2 0.5564 4.21800000 32.17300001 5.03700001 + 94 32 1 -1.1128 4.66100001 30.55500000 9.36799999 + 95 32 2 0.5564 3.18400001 29.84300000 10.13200000 + 96 32 2 0.5564 4.35800000 32.44800000 9.12600000 + 97 33 1 -1.1128 3.46499999 32.53700000 15.77800000 + 98 33 2 0.5564 5.07200000 31.81899999 15.90300000 + 99 33 2 0.5564 4.05500001 34.25699999 15.28400000 + 100 34 1 -1.1128 4.21500000 29.15299999 20.31700001 + 101 34 2 0.5564 3.65799999 30.17600000 18.84200000 + 102 34 2 0.5564 4.95899999 30.29100000 21.44900001 + 103 35 1 -1.1128 1.12600000 31.33300000 28.76800001 + 104 35 2 0.5564 2.39500000 31.12399999 29.92500000 + 105 35 2 0.5564 0.76800001 33.09199999 28.89799999 + 106 36 1 -1.1128 4.88100000 32.61600000 32.30200000 + 107 36 2 0.5564 6.58800000 32.91100000 31.72500001 + 108 36 2 0.5564 4.48599999 34.03700001 33.24900001 + 109 37 1 -1.1128 8.96200001 5.55600000 0.15100000 + 110 37 2 0.5564 9.65200000 6.99100001 0.85899999 + 111 37 2 0.5564 9.17300001 4.47700000 1.64500000 + 112 38 1 -1.1128 1.83300001 3.51799999 5.67900001 + 113 38 2 0.5564 2.88900000 2.73100000 6.78800000 + 114 38 2 0.5564 2.78900000 4.18700000 4.14700000 + 115 39 1 -1.1128 10.51000001 34.72599999 13.07300001 + 116 39 2 0.5564 11.91999999 34.11800000 11.91900001 + 117 39 2 0.5564 11.29500001 34.96800000 14.74100000 + 118 40 1 -1.1128 7.21200000 0.04199999 22.45399999 + 119 40 2 0.5564 6.92400000 0.47000000 24.17200000 + 120 40 2 0.5564 8.31900000 1.22799999 21.65300000 + 121 41 1 -1.1128 6.36500000 2.01000000 27.54400000 + 122 41 2 0.5564 5.95400000 3.58500000 26.85199999 + 123 41 2 0.5564 7.75800001 2.54900000 28.69600000 + 124 42 1 -1.1128 10.83300001 3.14000000 30.78699999 + 125 42 2 0.5564 12.69700001 2.97500000 30.86700000 + 126 42 2 0.5564 10.38899999 3.70000001 32.40399999 + 127 43 1 -1.1128 8.68400000 9.34200001 3.91200001 + 128 43 2 0.5564 6.98500000 9.25600001 4.77299999 + 129 43 2 0.5564 8.68400000 10.80899999 3.01100000 + 130 44 1 -1.1128 4.87299999 9.91900001 7.70700000 + 131 44 2 0.5564 3.69800000 9.77100000 6.19400000 + 132 44 2 0.5564 5.04700000 11.96100000 7.62400000 + 133 45 1 -1.1128 10.03099999 5.01800000 9.69900000 + 134 45 2 0.5564 9.67500001 3.38199999 10.34000000 + 135 45 2 0.5564 9.13200000 5.98700001 10.82500000 + 136 46 1 -1.1128 11.24599999 3.91800000 21.92900000 + 137 46 2 0.5564 12.61400001 2.77000000 22.34100000 + 138 46 2 0.5564 12.07300001 5.68600001 21.49699999 + 139 47 1 -1.1128 6.82500000 7.16400000 25.70799999 + 140 47 2 0.5564 8.03600000 8.37400001 25.98000001 + 141 47 2 0.5564 5.20600001 7.90000000 25.89099999 + 142 48 1 -1.1128 10.17099999 12.81100001 0.29500001 + 143 48 2 0.5564 10.03300000 12.81800000 -1.60900000 + 144 48 2 0.5564 9.87999999 14.49200001 0.48000000 + 145 49 1 -1.1128 8.19000000 17.40200000 1.25299999 + 146 49 2 0.5564 9.47199999 18.53100000 1.25299999 + 147 49 2 0.5564 6.35100000 17.81700000 1.56800001 + 148 50 1 -1.1128 11.23300000 16.18800001 8.29900001 + 149 50 2 0.5564 10.29100000 17.68900000 8.16600001 + 150 50 2 0.5564 12.76800001 17.12300001 8.73299999 + 151 51 1 -1.1128 6.38599999 8.00199999 12.84600000 + 152 51 2 0.5564 7.70099999 8.89600000 13.65500000 + 153 51 2 0.5564 5.59100000 8.87699999 11.51900000 + 154 52 1 -1.1128 8.18400001 10.41900000 18.84799999 + 155 52 2 0.5564 9.49800000 9.43400000 19.90500001 + 156 52 2 0.5564 6.88200000 9.02699999 18.94800001 + 157 53 1 -1.1128 10.80600000 14.43100000 21.32799999 + 158 53 2 0.5564 9.17700001 13.53100000 20.67000000 + 159 53 2 0.5564 11.34400000 15.69600000 20.44800000 + 160 54 1 -1.1128 9.23700000 13.92800000 30.34100000 + 161 54 2 0.5564 10.77900001 14.83900000 30.52199999 + 162 54 2 0.5564 9.96500000 13.19199999 28.89900000 + 163 55 1 -1.1128 10.91800000 21.70700000 1.86400000 + 164 55 2 0.5564 10.28000000 23.44900001 2.27900000 + 165 55 2 0.5564 12.70799999 21.45600000 1.74900000 + 166 56 1 -1.1128 9.35300001 16.12500000 13.92699999 + 167 56 2 0.5564 9.93799999 17.59399999 14.61800001 + 168 56 2 0.5564 9.51799999 16.36000001 12.24400000 + 169 57 1 -1.1128 10.37099999 11.10700000 14.26800000 + 170 57 2 0.5564 9.64399999 10.40600001 15.85899999 + 171 57 2 0.5564 9.43400000 12.52300000 14.11699999 + 172 58 1 -1.1128 3.35100000 22.76899999 20.19599999 + 173 58 2 0.5564 2.05500001 23.68600001 21.50300001 + 174 58 2 0.5564 2.45200000 21.40100000 19.41300000 + 175 59 1 -1.1128 6.83600000 21.32900000 23.19899999 + 176 59 2 0.5564 8.24900001 20.84799999 22.32000001 + 177 59 2 0.5564 5.66800001 21.84099999 21.88600000 + 178 60 1 -1.1128 4.60399999 15.64900000 30.04300000 + 179 60 2 0.5564 6.45300001 15.21699999 30.20700000 + 180 60 2 0.5564 3.82200001 14.76199999 31.56200000 + 181 61 1 -1.1128 7.12500000 19.97600001 9.42100001 + 182 61 2 0.5564 5.91800000 20.45300001 10.72999999 + 183 61 2 0.5564 8.09899999 21.49600001 9.49100000 + 184 62 1 -1.1128 9.06299999 25.91200001 13.18600000 + 185 62 2 0.5564 10.34999999 26.57199999 12.36700001 + 186 62 2 0.5564 9.67999999 24.36700001 13.69700001 + 187 63 1 -1.1128 8.02200000 22.34299999 17.04199999 + 188 63 2 0.5564 9.14400000 23.36700001 18.07399999 + 189 63 2 0.5564 6.56200000 23.46200000 16.85199999 + 190 64 1 -1.1128 10.76199999 26.28499999 19.96299999 + 191 64 2 0.5564 11.03600000 27.96599999 20.53800000 + 192 64 2 0.5564 11.07800000 25.40100000 21.45600000 + 193 65 1 -1.1128 9.15800000 22.90199999 28.39100000 + 194 65 2 0.5564 8.21900000 23.52800001 27.08499999 + 195 65 2 0.5564 8.08900000 21.76000000 29.50900000 + 196 66 1 -1.1128 6.21900000 20.15800000 31.92100000 + 197 66 2 0.5564 5.63500000 18.51099999 31.16100000 + 198 66 2 0.5564 7.53000000 19.62400000 33.07100000 + 199 67 1 -1.1128 11.19100001 31.50900000 2.61700000 + 200 67 2 0.5564 10.46000001 32.21399999 4.10800000 + 201 67 2 0.5564 13.17600000 31.75099999 2.57700000 + 202 68 1 -1.1128 4.74799999 0.05500001 8.60500000 + 203 68 2 0.5564 5.38000000 0.51700000 10.18300000 + 204 68 2 0.5564 6.05000000 -0.30600001 7.48000000 + 205 69 1 -1.1128 8.69500000 30.80899999 15.73100000 + 206 69 2 0.5564 9.18899999 32.10300000 14.49500000 + 207 69 2 0.5564 8.44699999 29.06900000 14.86800000 + 208 70 1 -1.1128 10.12799999 31.40200000 20.76599999 + 209 70 2 0.5564 9.45600000 30.90500001 19.15500000 + 210 70 2 0.5564 9.01999999 32.73100000 21.41500000 + 211 71 1 -1.1128 12.23800001 30.16200000 25.83699999 + 212 71 2 0.5564 11.41799999 30.90800001 27.10999999 + 213 71 2 0.5564 12.39600001 31.33100001 24.67800000 + 214 72 1 -1.1128 10.39500000 32.53700000 30.62400000 + 215 72 2 0.5564 11.04199999 34.33899999 30.75099999 + 216 72 2 0.5564 11.37800001 31.48599999 31.53800000 + 217 73 1 -1.1128 10.43800000 3.62599999 5.08700001 + 218 73 2 0.5564 12.43500001 4.08200000 5.13600000 + 219 73 2 0.5564 9.82200001 4.28400000 6.68100000 + 220 74 1 -1.1128 14.76199999 3.40100000 13.77599999 + 221 74 2 0.5564 16.51799999 3.82400000 13.37600000 + 222 74 2 0.5564 13.75200000 4.75700000 12.96400000 + 223 75 1 -1.1128 12.38199999 1.01200001 17.64300001 + 224 75 2 0.5564 13.34599999 1.99700000 16.44400000 + 225 75 2 0.5564 11.93100000 2.13300000 18.99800001 + 226 76 1 -1.1128 15.27799999 1.29300000 24.55900000 + 227 76 2 0.5564 16.07100000 0.94600000 26.36500000 + 228 76 2 0.5564 15.79399999 0.19899999 23.49900000 + 229 77 1 -1.1128 22.22600000 31.62700000 24.71199999 + 230 77 2 0.5564 23.33800001 32.59500000 23.87600001 + 231 77 2 0.5564 22.16100000 30.05300000 24.13200000 + 232 78 1 -1.1128 15.63999999 1.84700001 32.71700000 + 233 78 2 0.5564 17.48800000 2.47300000 31.87400000 + 234 78 2 0.5564 16.40300001 0.86900001 34.26700001 + 235 79 1 -1.1128 14.85800001 10.19899999 2.75400001 + 236 79 2 0.5564 13.36000001 10.71199999 2.28199999 + 237 79 2 0.5564 14.56000000 9.31600000 4.55900000 + 238 80 1 -1.1128 15.71700000 8.46900000 10.73900000 + 239 80 2 0.5564 17.32300000 9.58100000 10.87500000 + 240 80 2 0.5564 14.57400000 9.63100000 10.22099999 + 241 81 1 -1.1128 15.24800000 10.39800000 16.52500001 + 242 81 2 0.5564 16.32400001 9.18100001 16.14899999 + 243 81 2 0.5564 14.17200000 10.48800000 15.09800001 + 244 82 1 -1.1128 13.22600000 8.43800000 20.80100001 + 245 82 2 0.5564 14.04300000 8.99600000 19.29500001 + 246 82 2 0.5564 14.66100001 7.80200000 22.09300000 + 247 83 1 -1.1128 10.17300001 10.96100000 25.87500000 + 248 83 2 0.5564 11.47700000 10.22300000 26.94000000 + 249 83 2 0.5564 11.26900000 10.73800000 24.34299999 + 250 84 1 -1.1128 12.79200000 7.73699999 29.17300001 + 251 84 2 0.5564 12.19899999 6.03799999 29.47499999 + 252 84 2 0.5564 14.42700000 7.44999999 29.61700000 + 253 85 1 -1.1128 15.18000000 19.49800000 3.57800000 + 254 85 2 0.5564 14.88300001 17.59600001 4.08000001 + 255 85 2 0.5564 16.75400001 19.57899999 2.62599999 + 256 86 1 -1.1128 12.51700000 11.09300000 7.70099999 + 257 86 2 0.5564 12.22400001 12.77800000 7.55500000 + 258 86 2 0.5564 11.15000000 10.39299999 7.05700000 + 259 87 1 -1.1128 16.26600000 16.27099999 10.75800001 + 260 87 2 0.5564 16.50700001 15.79500000 12.76800001 + 261 87 2 0.5564 17.72500001 16.97699999 10.29200001 + 262 88 1 -1.1128 14.06900000 18.39900001 18.89700000 + 263 88 2 0.5564 15.51300000 17.52300000 18.15500000 + 264 88 2 0.5564 14.95800001 18.70900000 20.67300000 + 265 89 1 -1.1128 14.09899999 15.48000000 25.51000001 + 266 89 2 0.5564 13.69800000 16.87200001 26.93799999 + 267 89 2 0.5564 12.56700000 15.37900000 24.44400000 + 268 90 1 -1.1128 13.30900000 17.57400000 30.29200001 + 269 90 2 0.5564 14.93700001 16.93399999 30.81000000 + 270 90 2 0.5564 13.96900001 19.49400000 30.01200001 + 271 91 1 -1.1128 18.37099999 23.25699999 0.92500000 + 272 91 2 0.5564 19.47899999 23.48000000 2.32099999 + 273 91 2 0.5564 19.08700001 24.32499999 -0.36900000 + 274 92 1 -1.1128 12.10000000 21.72999999 11.35500000 + 275 92 2 0.5564 13.14100001 22.28700000 12.74300001 + 276 92 2 0.5564 13.46700001 22.23600000 10.24400000 + 277 93 1 -1.1128 12.16300001 23.29000000 23.59699999 + 278 93 2 0.5564 11.32400001 22.73600001 24.94900000 + 279 93 2 0.5564 13.88200000 22.87200001 23.84000001 + 280 94 1 -1.1128 20.17300001 26.76100001 22.62800000 + 281 94 2 0.5564 20.20600001 26.53200001 20.79200000 + 282 94 2 0.5564 21.55600000 25.74200000 23.38899999 + 283 95 1 -1.1128 16.70099999 21.16500000 22.60500000 + 284 95 2 0.5564 18.02800000 20.68600001 23.84799999 + 285 95 2 0.5564 17.10400000 22.86599999 21.94900000 + 286 96 1 -1.1128 11.39100000 26.46099999 33.70499999 + 287 96 2 0.5564 9.84099999 27.19199999 34.04800001 + 288 96 2 0.5564 11.77599999 25.53999999 35.24300000 + 289 97 1 -1.1128 9.89799999 25.98900000 4.55300001 + 290 97 2 0.5564 8.90199999 26.13099999 6.03900000 + 291 97 2 0.5564 10.28700000 27.80600000 4.37600000 + 292 98 1 -1.1128 14.30800000 26.96000000 10.87699999 + 293 98 2 0.5564 15.30200000 27.40500000 12.17300001 + 294 98 2 0.5564 15.46300000 26.15100000 9.63299999 + 295 99 1 -1.1128 13.43300000 22.96000000 16.90400000 + 296 99 2 0.5564 13.40900000 24.13099999 18.13200000 + 297 99 2 0.5564 13.62400000 21.19100001 17.52000000 + 298 100 1 -1.1128 16.40900000 26.76800001 26.87500000 + 299 100 2 0.5564 17.58999999 26.98700001 25.43100000 + 300 100 2 0.5564 14.75099999 27.70300000 26.23000000 + 301 101 1 -1.1128 14.40500000 22.73299999 29.89200000 + 302 101 2 0.5564 15.42300000 23.07900000 28.49400000 + 303 101 2 0.5564 12.82600001 23.25900000 29.41600000 + 304 102 1 -1.1128 6.90500001 29.40800000 0.74900000 + 305 102 2 0.5564 8.42800001 30.48300000 1.56700000 + 306 102 2 0.5564 6.35300001 30.81400000 -0.44400000 + 307 103 1 -1.1128 9.18899999 34.15900001 6.50900000 + 308 103 2 0.5564 10.19800000 34.19300000 8.00199999 + 309 103 2 0.5564 9.89000001 35.69200000 5.78500000 + 310 104 1 -1.1128 14.25600001 32.31600000 9.36900000 + 311 104 2 0.5564 15.73299999 32.86700000 9.48599999 + 312 104 2 0.5564 14.75400001 30.67000000 10.09000000 + 313 105 1 -1.1128 14.71400000 30.84099999 16.51600000 + 314 105 2 0.5564 13.74799999 29.55099999 17.27900000 + 315 105 2 0.5564 13.21800000 31.93300001 16.61400001 + 316 106 1 -1.1128 18.40900000 33.64100000 20.61100001 + 317 106 2 0.5564 19.60099999 32.27400001 21.11500000 + 318 106 2 0.5564 17.36000001 32.65500000 19.51799999 + 319 107 1 -1.1128 16.06200001 28.63800000 32.20700000 + 320 107 2 0.5564 14.64800000 27.95800001 33.25299999 + 321 107 2 0.5564 15.75200000 28.01400000 30.52199999 + 322 108 1 -1.1128 16.20000000 30.89499999 1.47300000 + 323 108 2 0.5564 16.62599999 29.96800000 -0.13000001 + 324 108 2 0.5564 17.16699999 29.83300001 2.92699999 + 325 109 1 -1.1128 20.27799999 3.52899999 6.04800001 + 326 109 2 0.5564 20.97699999 3.61100001 4.57500001 + 327 109 2 0.5564 21.31200000 4.51300000 7.25100000 + 328 110 1 -1.1128 23.07900000 5.77800000 10.40800000 + 329 110 2 0.5564 24.65000001 6.25900000 10.83800000 + 330 110 2 0.5564 22.34200001 7.60900000 10.17799999 + 331 111 1 -1.1128 19.58100000 2.03099999 12.10999999 + 332 111 2 0.5564 19.03900000 1.08200000 10.44000000 + 333 111 2 0.5564 21.14100001 2.99100001 11.85100001 + 334 112 1 -1.1128 22.00500001 3.22300000 23.17799999 + 335 112 2 0.5564 21.42899999 4.09000000 24.55399999 + 336 112 2 0.5564 20.65400001 1.79099999 22.71100001 + 337 113 1 -1.1128 16.63000000 6.42200000 23.79200000 + 338 113 2 0.5564 16.21900000 4.80400001 24.40600001 + 339 113 2 0.5564 17.06600001 7.12799999 25.28199999 + 340 114 1 -1.1128 21.67599999 5.56400001 28.15800000 + 341 114 2 0.5564 20.65799999 6.71700000 29.18499999 + 342 114 2 0.5564 23.41300000 5.82800000 28.99600000 + 343 115 1 -1.1128 15.25699999 5.26500000 5.62599999 + 344 115 2 0.5564 16.91400000 4.51900000 5.48999999 + 345 115 2 0.5564 15.14400000 6.15000000 6.97200000 + 346 116 1 -1.1128 20.13700000 11.08200000 10.43700000 + 347 116 2 0.5564 20.02100000 10.94700000 8.73299999 + 348 116 2 0.5564 21.02500000 12.55500000 10.85300000 + 349 117 1 -1.1128 23.08900000 14.62700000 12.43700000 + 350 117 2 0.5564 24.71600000 15.25400000 12.73600001 + 351 117 2 0.5564 23.28400000 13.22799999 13.65300000 + 352 118 1 -1.1128 24.08300000 12.64900000 22.56600000 + 353 118 2 0.5564 22.39700000 12.66300000 23.04199999 + 354 118 2 0.5564 24.90100001 13.85100001 23.56499999 + 355 119 1 -1.1128 17.86500001 7.90899999 30.03600000 + 356 119 2 0.5564 17.50900000 8.04499999 31.98200000 + 357 119 2 0.5564 18.07800000 9.58200001 29.31799999 + 358 120 1 -1.1128 18.82400000 8.48599999 0.10400000 + 359 120 2 0.5564 19.99700000 10.19100001 -0.05700000 + 360 120 2 0.5564 17.07700001 8.99800001 0.77900001 + 361 121 1 -1.1128 20.12200000 9.14300000 5.34299999 + 362 121 2 0.5564 19.37300000 8.81899999 3.82100000 + 363 121 2 0.5564 21.99800001 8.77599999 5.12799999 + 364 122 1 -1.1128 16.41300000 14.45900000 5.85499999 + 365 122 2 0.5564 15.53599999 13.00700000 5.23899999 + 366 122 2 0.5564 16.00599999 14.72500001 7.73699999 + 367 123 1 -1.1128 17.56099999 15.06600001 15.65400001 + 368 123 2 0.5564 17.57500001 13.39800000 16.05500001 + 369 123 2 0.5564 18.97800000 15.82800000 16.39999999 + 370 124 1 -1.1128 26.37400001 17.04700000 24.81700000 + 371 124 2 0.5564 27.98300000 17.09800001 25.63200001 + 372 124 2 0.5564 25.62900001 18.75099999 24.91900001 + 373 125 1 -1.1128 19.78400000 12.96000000 28.70600000 + 374 125 2 0.5564 21.66199999 13.05500001 28.87100000 + 375 125 2 0.5564 19.54500000 14.06999999 27.14300000 + 376 126 1 -1.1128 17.89099999 16.73299999 32.49900000 + 377 126 2 0.5564 18.32700000 15.24000000 31.27700001 + 378 126 2 0.5564 18.63299999 18.33500001 31.69300001 + 379 127 1 -1.1128 23.73299999 23.02399999 1.66300000 + 380 127 2 0.5564 24.80000000 24.05199999 2.77599999 + 381 127 2 0.5564 24.69300001 22.61800001 0.19800000 + 382 128 1 -1.1128 20.78900000 18.44000000 9.44299999 + 383 128 2 0.5564 20.76599999 17.25699999 7.88100000 + 384 128 2 0.5564 21.89600000 17.34500000 10.38500001 + 385 129 1 -1.1128 21.57400000 17.49299999 17.83800000 + 386 129 2 0.5564 20.59699999 18.95500001 17.21800000 + 387 129 2 0.5564 22.53800000 16.87400000 16.25100000 + 388 130 1 -1.1128 19.16800000 14.74799999 24.13099999 + 389 130 2 0.5564 19.71100001 16.39000000 23.71199999 + 390 130 2 0.5564 17.42899999 14.69500000 24.40300001 + 391 131 1 -1.1128 22.14899999 20.19800000 24.97699999 + 392 131 2 0.5564 21.63900001 20.92400000 26.48599999 + 393 131 2 0.5564 22.65600000 21.65700001 24.41099999 + 394 132 1 -1.1128 20.56499999 20.79200000 29.60000001 + 395 132 2 0.5564 22.26399999 20.40900000 30.21399999 + 396 132 2 0.5564 20.54800000 22.40800000 30.59699999 + 397 133 1 -1.1128 20.80200000 26.54699999 9.61499999 + 398 133 2 0.5564 20.09899999 27.98399999 8.33800001 + 399 133 2 0.5564 21.27700001 27.53900001 11.32499999 + 400 134 1 -1.1128 16.28300000 23.58900001 7.77900001 + 401 134 2 0.5564 16.09300000 21.97300001 6.71199999 + 402 134 2 0.5564 17.90100001 22.97100000 8.15400000 + 403 135 1 -1.1128 18.46900000 29.79799999 13.56800001 + 404 135 2 0.5564 19.71199999 31.21600000 13.50600000 + 405 135 2 0.5564 16.87200001 30.34299999 14.39600001 + 406 136 1 -1.1128 18.79000001 21.71199999 16.06000000 + 407 136 2 0.5564 19.87800000 23.09000000 16.48500001 + 408 136 2 0.5564 17.20100000 22.32600000 15.81899999 + 409 137 1 -1.1128 21.74700001 26.08400001 16.34900001 + 410 137 2 0.5564 20.78300001 27.02100000 15.29999999 + 411 137 2 0.5564 22.70499999 27.32799999 17.20600001 + 412 138 1 -1.1128 20.76899999 26.21100000 32.05000000 + 413 138 2 0.5564 21.48800000 27.40399999 33.32799999 + 414 138 2 0.5564 18.98900000 26.71000000 32.14500001 + 415 139 1 -1.1128 19.82000000 29.18100001 5.55900000 + 416 139 2 0.5564 20.99100001 29.50900000 4.10900001 + 417 139 2 0.5564 19.43100000 31.01800000 6.22099999 + 418 140 1 -1.1128 19.24000000 33.86700000 7.99300000 + 419 140 2 0.5564 19.10700000 35.03900000 6.60399999 + 420 140 2 0.5564 20.69700001 33.67100000 9.06299999 + 421 141 1 -1.1128 22.51099999 34.97600001 15.79300000 + 422 141 2 0.5564 23.71600000 36.16300001 16.60300000 + 423 141 2 0.5564 21.69900000 36.15000000 14.46700001 + 424 142 1 -1.1128 22.62199999 30.28400000 19.06900000 + 425 142 2 0.5564 22.04899999 31.35100000 17.72500001 + 426 142 2 0.5564 24.41099999 30.77299999 19.57599999 + 427 143 1 -1.1128 18.63900001 33.61100001 28.36900000 + 428 143 2 0.5564 18.22600000 32.15900001 29.10300000 + 429 143 2 0.5564 19.90600000 33.00800000 27.15800000 + 430 144 1 -1.1128 22.52000000 1.32499999 31.92600001 + 431 144 2 0.5564 22.80300000 2.66800001 30.79600000 + 432 144 2 0.5564 21.04499999 0.42499999 31.12200000 + 433 145 1 -1.1128 21.75400001 3.78900000 1.15900001 + 434 145 2 0.5564 22.08499999 2.78500000 -0.18000000 + 435 145 2 0.5564 20.85000000 5.17500000 0.61000000 + 436 146 1 -1.1128 28.45699999 5.53900001 12.13300000 + 437 146 2 0.5564 29.48900001 4.39000000 11.18200000 + 438 146 2 0.5564 29.16100000 7.13099999 12.58700000 + 439 147 1 -1.1128 22.49500000 5.96599999 17.32400001 + 440 147 2 0.5564 24.37700000 5.37900000 17.39299999 + 441 147 2 0.5564 21.90600000 5.49100000 18.85700000 + 442 148 1 -1.1128 28.12799999 3.30400000 22.28700000 + 443 148 2 0.5564 28.12300001 2.99899999 20.49100000 + 444 148 2 0.5564 26.53299999 3.35500000 22.87600001 + 445 149 1 -1.1128 28.37800001 10.45500000 27.26600000 + 446 149 2 0.5564 30.01900001 10.29200001 28.05100000 + 447 149 2 0.5564 28.63500000 10.03900000 25.46300000 + 448 150 1 -1.1128 27.03099999 8.35300001 34.80600000 + 449 150 2 0.5564 26.11600001 9.98399999 34.57100001 + 450 150 2 0.5564 28.68500000 8.95100001 34.73900000 + 451 151 1 -1.1128 24.95100001 8.15999999 4.45399999 + 452 151 2 0.5564 25.93000001 9.61600000 5.15999999 + 453 151 2 0.5564 25.94700000 7.99400001 2.72400000 + 454 152 1 -1.1128 26.93700001 12.43599999 6.86900001 + 455 152 2 0.5564 25.49200001 13.28400000 6.70799999 + 456 152 2 0.5564 27.68900000 13.33199999 8.26600000 + 457 153 1 -1.1128 23.36500000 11.21399999 16.93300001 + 458 153 2 0.5564 22.24700000 9.74399999 16.78900000 + 459 153 2 0.5564 23.26399999 12.03500000 18.53900001 + 460 154 1 -1.1128 28.32099999 8.75900000 22.15800000 + 461 154 2 0.5564 27.66199999 6.89499999 22.48200001 + 462 154 2 0.5564 26.97100000 9.71000000 21.90199999 + 463 155 1 -1.1128 27.07100000 6.10900001 29.55500000 + 464 155 2 0.5564 27.59100000 7.66300000 28.85700000 + 465 155 2 0.5564 27.30400000 6.32000001 31.26100000 + 466 156 1 -1.1128 22.47400000 11.70400001 34.63999999 + 467 156 2 0.5564 22.75200000 13.30400000 35.58400000 + 468 156 2 0.5564 22.84000001 12.09000000 33.03000001 + 469 157 1 -1.1128 21.65600000 14.97100000 5.61499999 + 470 157 2 0.5564 21.68999999 15.86000000 3.97699999 + 471 157 2 0.5564 19.96400000 14.22500000 5.77400000 + 472 158 1 -1.1128 28.53900001 21.49200001 9.82000000 + 473 158 2 0.5564 27.28800001 22.18100001 8.68800000 + 474 158 2 0.5564 28.06500000 22.42000000 11.60200000 + 475 159 1 -1.1128 28.36399999 16.01999999 11.10900001 + 476 159 2 0.5564 30.03300000 16.64900000 12.08900000 + 477 159 2 0.5564 28.45600000 17.44000000 10.08200000 + 478 160 1 -1.1128 0.05400000 13.68600001 18.10300000 + 479 160 2 0.5564 -1.71400000 12.92800000 18.84099999 + 480 160 2 0.5564 1.00800000 12.42899999 17.38300000 + 481 161 1 -1.1128 24.63600001 12.89400001 29.95700000 + 482 161 2 0.5564 25.90600000 13.91400000 31.18300000 + 483 161 2 0.5564 25.64100000 11.60900000 29.16200000 + 484 162 1 -1.1128 21.54800000 17.25000000 0.74900000 + 485 162 2 0.5564 21.84300000 19.02600000 0.90500001 + 486 162 2 0.5564 20.38500001 16.71600000 -0.69700001 + 487 163 1 -1.1128 26.09499999 27.27400001 4.52000000 + 488 163 2 0.5564 27.88900000 26.45800000 4.50500000 + 489 163 2 0.5564 25.64800000 26.96999999 6.16500000 + 490 164 1 -1.1128 23.61000000 22.51499999 8.00800000 + 491 164 2 0.5564 22.65300000 21.18700000 8.73900000 + 492 164 2 0.5564 22.28600000 24.09499999 8.44400000 + 493 165 1 -1.1128 27.35500000 18.92900000 18.18000000 + 494 165 2 0.5564 27.20000000 20.34900001 17.15500000 + 495 165 2 0.5564 25.57899999 18.32200000 18.77000000 + 496 166 1 -1.1128 26.76500001 23.63299999 14.44400000 + 497 166 2 0.5564 27.44100000 25.29800000 13.65099999 + 498 166 2 0.5564 25.08600000 24.25600001 14.74900000 + 499 167 1 -1.1128 31.47800001 20.76899999 20.98600000 + 500 167 2 0.5564 30.44000000 22.50900000 21.13499999 + 501 167 2 0.5564 30.56700000 19.65600000 20.04300000 + 502 168 1 -1.1128 24.81199999 20.41200000 32.66800001 + 503 168 2 0.5564 26.24199999 21.47800001 31.87400000 + 504 168 2 0.5564 25.78699999 19.02300001 33.15800000 + 505 169 1 -1.1128 22.10500001 29.07600000 0.92800000 + 506 169 2 0.5564 23.29599999 27.92299999 1.73900000 + 507 169 2 0.5564 22.62300000 30.99400001 0.88200000 + 508 170 1 -1.1128 29.57199999 31.25600001 8.62599999 + 509 170 2 0.5564 30.79500000 30.20299999 7.73600001 + 510 170 2 0.5564 28.27700001 31.51900000 7.25999999 + 511 171 1 -1.1128 31.81700000 34.84300000 18.28300000 + 512 171 2 0.5564 32.43800000 34.38899999 16.47400000 + 513 171 2 0.5564 32.74300001 36.42200000 18.34100000 + 514 172 1 -1.1128 27.91500001 25.60099999 19.03300000 + 515 172 2 0.5564 29.35800000 26.56099999 19.19000000 + 516 172 2 0.5564 28.14800001 24.42899999 17.53000000 + 517 173 1 -1.1128 24.54800000 24.65400001 24.02500000 + 518 173 2 0.5564 25.52800001 25.63500000 22.82400000 + 519 173 2 0.5564 25.29999999 25.20000000 25.64500000 + 520 174 1 -1.1128 28.53999999 22.92200000 30.37000000 + 521 174 2 0.5564 27.41399999 24.09600000 29.78100000 + 522 174 2 0.5564 29.67400000 23.91400000 31.87299999 + 523 175 1 -1.1128 24.96900001 33.62300000 1.01400000 + 524 175 2 0.5564 26.52100001 33.05800000 1.51799999 + 525 175 2 0.5564 24.99000000 34.32200000 -0.68299999 + 526 176 1 -1.1128 23.07500000 32.17099999 11.32400001 + 527 176 2 0.5564 23.31600000 32.77500000 13.09700000 + 528 176 2 0.5564 24.46000001 33.20299999 10.66199999 + 529 177 1 -1.1128 27.49699999 2.73600001 17.22400001 + 530 177 2 0.5564 28.39700000 3.41500000 15.71500001 + 531 177 2 0.5564 28.23400001 1.23300000 17.41200000 + 532 178 1 -1.1128 26.36900000 33.06000000 22.07700001 + 533 178 2 0.5564 26.17000001 34.74600000 22.26399999 + 534 178 2 0.5564 27.59200000 32.40399999 23.32099999 + 535 179 1 -1.1128 30.22099999 30.95000000 25.84300000 + 536 179 2 0.5564 30.30500000 29.03799999 26.20800000 + 537 179 2 0.5564 30.36300001 31.97900000 27.41399999 + 538 180 1 -1.1128 24.97300001 26.73200000 28.60700001 + 539 180 2 0.5564 25.38500001 28.36900000 29.24800000 + 540 180 2 0.5564 23.33000000 26.59699999 29.23400001 + 541 181 1 -1.1128 32.16500000 4.85700000 2.25800000 + 542 181 2 0.5564 32.41700001 6.19500001 1.15700000 + 543 181 2 0.5564 32.61499999 3.72700000 1.11200000 + 544 182 1 -1.1128 28.06699999 3.53299999 5.21699999 + 545 182 2 0.5564 26.96000000 4.44699999 4.15800000 + 546 182 2 0.5564 29.87500000 3.86300000 4.44800000 + 547 183 1 -1.1128 33.27900000 2.78200000 13.02800000 + 548 183 2 0.5564 33.70799999 3.95500001 11.81700000 + 549 183 2 0.5564 33.65600000 3.54500000 14.63100000 + 550 184 1 -1.1128 34.27799999 4.94400001 17.49200001 + 551 184 2 0.5564 33.43800000 6.56300000 17.87600001 + 552 184 2 0.5564 34.90600000 4.45200000 18.99499999 + 553 185 1 -1.1128 32.36300001 1.90800001 26.09199999 + 554 185 2 0.5564 31.94099999 1.68299999 24.26800000 + 555 185 2 0.5564 33.85000000 1.39000000 26.90400000 + 556 186 1 -1.1128 27.98200000 0.41799999 28.24100000 + 557 186 2 0.5564 27.51600000 2.08000001 28.30900000 + 558 186 2 0.5564 29.59300001 0.17600000 27.29900001 + 559 187 1 -1.1128 28.84500000 14.67200001 2.72400000 + 560 187 2 0.5564 27.96299999 13.93000001 4.13900000 + 561 187 2 0.5564 30.38599999 15.71400000 3.37900000 + 562 188 1 -1.1128 28.08300000 10.61800001 14.29800000 + 563 188 2 0.5564 28.62300000 12.15999999 13.29300000 + 564 188 2 0.5564 26.48599999 11.01500000 15.37900000 + 565 189 1 -1.1128 33.86700000 10.54500000 13.30600001 + 566 189 2 0.5564 35.16500000 9.61200000 13.81000000 + 567 189 2 0.5564 33.61499999 10.27000001 11.51300000 + 568 190 1 -1.1128 31.79000001 9.69600000 18.22300000 + 569 190 2 0.5564 30.48400000 9.33400000 19.42100001 + 570 190 2 0.5564 30.83399999 10.09600000 16.92900000 + 571 191 1 -1.1128 30.14100001 15.00599999 21.53200001 + 572 191 2 0.5564 28.56499999 15.59399999 22.09899999 + 573 191 2 0.5564 30.94200000 14.25299999 23.07700001 + 574 192 1 -1.1128 32.79799999 10.73200000 30.67999999 + 575 192 2 0.5564 34.07300001 9.52800001 30.79900000 + 576 192 2 0.5564 32.99100001 11.51200000 28.98300000 + 577 193 1 -1.1128 33.65200000 16.26500000 5.08600000 + 578 193 2 0.5564 35.39900001 16.23899999 4.72999999 + 579 193 2 0.5564 33.50300001 17.93900000 5.63100000 + 580 194 1 -1.1128 31.94700000 10.79900000 7.94300000 + 581 194 2 0.5564 29.89400001 10.54900000 7.61899999 + 582 194 2 0.5564 32.27099999 12.41399999 7.07500000 + 583 195 1 -1.1128 0.32900000 15.51600000 11.74600000 + 584 195 2 0.5564 -0.44600001 14.24900001 12.93900000 + 585 195 2 0.5564 -0.68500000 17.01800000 11.93500000 + 586 196 1 -1.1128 4.26200000 19.16500000 14.30800000 + 587 196 2 0.5564 3.57899999 17.69100000 14.91999999 + 588 196 2 0.5564 5.72299999 19.18300000 15.20400000 + 589 197 1 -1.1128 32.99499999 13.54600001 25.94800001 + 590 197 2 0.5564 32.16699999 15.06000000 26.78699999 + 591 197 2 0.5564 34.42499999 13.80000000 25.00700000 + 592 198 1 -1.1128 1.77299999 13.52400000 34.03700001 + 593 198 2 0.5564 0.22700001 14.40900000 33.44600001 + 594 198 2 0.5564 2.16699999 14.67000000 35.51099999 + 595 199 1 -1.1128 33.02900000 20.52899999 7.24700000 + 596 199 2 0.5564 34.38800000 21.41399999 8.00300000 + 597 199 2 0.5564 31.45100000 20.83100000 8.18200000 + 598 200 1 -1.1128 2.03700001 24.25000000 10.25100000 + 599 200 2 0.5564 3.74300001 25.00800000 9.87600001 + 600 200 2 0.5564 1.89400001 25.04300000 11.90300000 + 601 201 1 -1.1128 32.75300000 19.25900000 13.97600001 + 602 201 2 0.5564 32.79200000 20.88600000 13.79200000 + 603 201 2 0.5564 34.33400000 18.79900000 14.97600001 + 604 202 1 -1.1128 0.39600001 18.67300000 18.69900000 + 605 202 2 0.5564 -1.21100000 18.95000000 19.12700001 + 606 202 2 0.5564 0.46900000 16.97699999 18.43599999 + 607 203 1 -1.1128 30.85499999 18.37000000 27.95899999 + 608 203 2 0.5564 29.75900000 19.68100000 28.68999999 + 609 203 2 0.5564 32.10300000 19.47700000 26.76300000 + 610 204 1 -1.1128 27.72299999 15.99200000 33.09100001 + 611 204 2 0.5564 29.39000000 16.42300000 32.19199999 + 612 204 2 0.5564 27.80100001 15.85899999 34.80400001 + 613 205 1 -1.1128 31.06800000 27.89499999 3.34800000 + 614 205 2 0.5564 32.51700000 27.82500000 4.61000000 + 615 205 2 0.5564 31.52899999 29.45900000 2.32400001 + 616 206 1 -1.1128 35.03900000 28.00800000 6.66300000 + 617 206 2 0.5564 35.96599999 26.93399999 7.68299999 + 618 206 2 0.5564 36.05500001 28.33600000 5.33600000 + 619 207 1 -1.1128 29.35600001 28.19599999 13.02500000 + 620 207 2 0.5564 29.20999999 29.33500001 14.58900001 + 621 207 2 0.5564 28.87400000 29.62900001 11.86700000 + 622 208 1 -1.1128 32.38599999 28.43400000 18.96100000 + 623 208 2 0.5564 33.36799999 28.57400000 20.41099999 + 624 208 2 0.5564 33.41000001 27.40600001 17.94900000 + 625 209 1 -1.1128 30.89799999 25.39000000 25.79900000 + 626 209 2 0.5564 32.36900000 25.91299999 24.58000000 + 627 209 2 0.5564 31.31700001 24.07500000 27.02900000 + 628 210 1 -1.1128 32.25900000 25.61100001 33.10400000 + 629 210 2 0.5564 32.23800001 25.73600001 34.80600000 + 630 210 2 0.5564 33.91999999 25.04199999 32.77500000 + 631 211 1 -1.1128 30.29000000 32.64500000 1.34100000 + 632 211 2 0.5564 29.94900000 32.79300000 -0.43000000 + 633 211 2 0.5564 31.76199999 33.34000000 1.84700001 + 634 212 1 -1.1128 25.53599999 34.23499999 6.46900000 + 635 212 2 0.5564 25.71600000 36.05900001 6.65099999 + 636 212 2 0.5564 25.28300000 33.86599999 4.89499999 + 637 213 1 -1.1128 31.67400000 33.16100000 13.10599999 + 638 213 2 0.5564 31.79300000 34.86300000 13.28100001 + 639 213 2 0.5564 30.42499999 32.92800000 11.78300001 + 640 214 1 -1.1128 33.84400001 32.66800001 22.29599999 + 641 214 2 0.5564 32.75000000 32.23400001 23.52400000 + 642 214 2 0.5564 32.91700000 32.87500000 20.73600001 + 643 215 1 -1.1128 31.60300000 30.54200000 30.80499999 + 644 215 2 0.5564 33.45100000 30.80400001 30.46799999 + 645 215 2 0.5564 31.57500001 28.81599999 31.75600000 + 646 216 1 -1.1128 26.29500001 31.23499999 30.59900000 + 647 216 2 0.5564 27.83399999 30.51499999 30.60700001 + 648 216 2 0.5564 26.36200000 32.91999999 29.85600000 + +Bonds + + 1 1 1 2 + 2 1 1 3 + 3 1 4 5 + 4 1 4 6 + 5 1 7 8 + 6 1 7 9 + 7 1 10 11 + 8 1 10 12 + 9 1 13 14 + 10 1 13 15 + 11 1 16 17 + 12 1 16 18 + 13 1 19 20 + 14 1 19 21 + 15 1 22 23 + 16 1 22 24 + 17 1 25 26 + 18 1 25 27 + 19 1 28 29 + 20 1 28 30 + 21 1 31 32 + 22 1 31 33 + 23 1 34 35 + 24 1 34 36 + 25 1 37 38 + 26 1 37 39 + 27 1 40 41 + 28 1 40 42 + 29 1 43 44 + 30 1 43 45 + 31 1 46 47 + 32 1 46 48 + 33 1 49 50 + 34 1 49 51 + 35 1 52 53 + 36 1 52 54 + 37 1 55 56 + 38 1 55 57 + 39 1 58 59 + 40 1 58 60 + 41 1 61 62 + 42 1 61 63 + 43 1 64 65 + 44 1 64 66 + 45 1 67 68 + 46 1 67 69 + 47 1 70 71 + 48 1 70 72 + 49 1 73 74 + 50 1 73 75 + 51 1 76 77 + 52 1 76 78 + 53 1 79 80 + 54 1 79 81 + 55 1 82 83 + 56 1 82 84 + 57 1 85 86 + 58 1 85 87 + 59 1 88 89 + 60 1 88 90 + 61 1 91 92 + 62 1 91 93 + 63 1 94 95 + 64 1 94 96 + 65 1 97 98 + 66 1 97 99 + 67 1 100 101 + 68 1 100 102 + 69 1 103 104 + 70 1 103 105 + 71 1 106 107 + 72 1 106 108 + 73 1 109 110 + 74 1 109 111 + 75 1 112 113 + 76 1 112 114 + 77 1 115 116 + 78 1 115 117 + 79 1 118 119 + 80 1 118 120 + 81 1 121 122 + 82 1 121 123 + 83 1 124 125 + 84 1 124 126 + 85 1 127 128 + 86 1 127 129 + 87 1 130 131 + 88 1 130 132 + 89 1 133 134 + 90 1 133 135 + 91 1 136 137 + 92 1 136 138 + 93 1 139 140 + 94 1 139 141 + 95 1 142 143 + 96 1 142 144 + 97 1 145 146 + 98 1 145 147 + 99 1 148 149 + 100 1 148 150 + 101 1 151 152 + 102 1 151 153 + 103 1 154 155 + 104 1 154 156 + 105 1 157 158 + 106 1 157 159 + 107 1 160 161 + 108 1 160 162 + 109 1 163 164 + 110 1 163 165 + 111 1 166 167 + 112 1 166 168 + 113 1 169 170 + 114 1 169 171 + 115 1 172 173 + 116 1 172 174 + 117 1 175 176 + 118 1 175 177 + 119 1 178 179 + 120 1 178 180 + 121 1 181 182 + 122 1 181 183 + 123 1 184 185 + 124 1 184 186 + 125 1 187 188 + 126 1 187 189 + 127 1 190 191 + 128 1 190 192 + 129 1 193 194 + 130 1 193 195 + 131 1 196 197 + 132 1 196 198 + 133 1 199 200 + 134 1 199 201 + 135 1 202 203 + 136 1 202 204 + 137 1 205 206 + 138 1 205 207 + 139 1 208 209 + 140 1 208 210 + 141 1 211 212 + 142 1 211 213 + 143 1 214 215 + 144 1 214 216 + 145 1 217 218 + 146 1 217 219 + 147 1 220 221 + 148 1 220 222 + 149 1 223 224 + 150 1 223 225 + 151 1 226 227 + 152 1 226 228 + 153 1 229 230 + 154 1 229 231 + 155 1 232 233 + 156 1 232 234 + 157 1 235 236 + 158 1 235 237 + 159 1 238 239 + 160 1 238 240 + 161 1 241 242 + 162 1 241 243 + 163 1 244 245 + 164 1 244 246 + 165 1 247 248 + 166 1 247 249 + 167 1 250 251 + 168 1 250 252 + 169 1 253 254 + 170 1 253 255 + 171 1 256 257 + 172 1 256 258 + 173 1 259 260 + 174 1 259 261 + 175 1 262 263 + 176 1 262 264 + 177 1 265 266 + 178 1 265 267 + 179 1 268 269 + 180 1 268 270 + 181 1 271 272 + 182 1 271 273 + 183 1 274 275 + 184 1 274 276 + 185 1 277 278 + 186 1 277 279 + 187 1 280 281 + 188 1 280 282 + 189 1 283 284 + 190 1 283 285 + 191 1 286 287 + 192 1 286 288 + 193 1 289 290 + 194 1 289 291 + 195 1 292 293 + 196 1 292 294 + 197 1 295 296 + 198 1 295 297 + 199 1 298 299 + 200 1 298 300 + 201 1 301 302 + 202 1 301 303 + 203 1 304 305 + 204 1 304 306 + 205 1 307 308 + 206 1 307 309 + 207 1 310 311 + 208 1 310 312 + 209 1 313 314 + 210 1 313 315 + 211 1 316 317 + 212 1 316 318 + 213 1 319 320 + 214 1 319 321 + 215 1 322 323 + 216 1 322 324 + 217 1 325 326 + 218 1 325 327 + 219 1 328 329 + 220 1 328 330 + 221 1 331 332 + 222 1 331 333 + 223 1 334 335 + 224 1 334 336 + 225 1 337 338 + 226 1 337 339 + 227 1 340 341 + 228 1 340 342 + 229 1 343 344 + 230 1 343 345 + 231 1 346 347 + 232 1 346 348 + 233 1 349 350 + 234 1 349 351 + 235 1 352 353 + 236 1 352 354 + 237 1 355 356 + 238 1 355 357 + 239 1 358 359 + 240 1 358 360 + 241 1 361 362 + 242 1 361 363 + 243 1 364 365 + 244 1 364 366 + 245 1 367 368 + 246 1 367 369 + 247 1 370 371 + 248 1 370 372 + 249 1 373 374 + 250 1 373 375 + 251 1 376 377 + 252 1 376 378 + 253 1 379 380 + 254 1 379 381 + 255 1 382 383 + 256 1 382 384 + 257 1 385 386 + 258 1 385 387 + 259 1 388 389 + 260 1 388 390 + 261 1 391 392 + 262 1 391 393 + 263 1 394 395 + 264 1 394 396 + 265 1 397 398 + 266 1 397 399 + 267 1 400 401 + 268 1 400 402 + 269 1 403 404 + 270 1 403 405 + 271 1 406 407 + 272 1 406 408 + 273 1 409 410 + 274 1 409 411 + 275 1 412 413 + 276 1 412 414 + 277 1 415 416 + 278 1 415 417 + 279 1 418 419 + 280 1 418 420 + 281 1 421 422 + 282 1 421 423 + 283 1 424 425 + 284 1 424 426 + 285 1 427 428 + 286 1 427 429 + 287 1 430 431 + 288 1 430 432 + 289 1 433 434 + 290 1 433 435 + 291 1 436 437 + 292 1 436 438 + 293 1 439 440 + 294 1 439 441 + 295 1 442 443 + 296 1 442 444 + 297 1 445 446 + 298 1 445 447 + 299 1 448 449 + 300 1 448 450 + 301 1 451 452 + 302 1 451 453 + 303 1 454 455 + 304 1 454 456 + 305 1 457 458 + 306 1 457 459 + 307 1 460 461 + 308 1 460 462 + 309 1 463 464 + 310 1 463 465 + 311 1 466 467 + 312 1 466 468 + 313 1 469 470 + 314 1 469 471 + 315 1 472 473 + 316 1 472 474 + 317 1 475 476 + 318 1 475 477 + 319 1 478 479 + 320 1 478 480 + 321 1 481 482 + 322 1 481 483 + 323 1 484 485 + 324 1 484 486 + 325 1 487 488 + 326 1 487 489 + 327 1 490 491 + 328 1 490 492 + 329 1 493 494 + 330 1 493 495 + 331 1 496 497 + 332 1 496 498 + 333 1 499 500 + 334 1 499 501 + 335 1 502 503 + 336 1 502 504 + 337 1 505 506 + 338 1 505 507 + 339 1 508 509 + 340 1 508 510 + 341 1 511 512 + 342 1 511 513 + 343 1 514 515 + 344 1 514 516 + 345 1 517 518 + 346 1 517 519 + 347 1 520 521 + 348 1 520 522 + 349 1 523 524 + 350 1 523 525 + 351 1 526 527 + 352 1 526 528 + 353 1 529 530 + 354 1 529 531 + 355 1 532 533 + 356 1 532 534 + 357 1 535 536 + 358 1 535 537 + 359 1 538 539 + 360 1 538 540 + 361 1 541 542 + 362 1 541 543 + 363 1 544 545 + 364 1 544 546 + 365 1 547 548 + 366 1 547 549 + 367 1 550 551 + 368 1 550 552 + 369 1 553 554 + 370 1 553 555 + 371 1 556 557 + 372 1 556 558 + 373 1 559 560 + 374 1 559 561 + 375 1 562 563 + 376 1 562 564 + 377 1 565 566 + 378 1 565 567 + 379 1 568 569 + 380 1 568 570 + 381 1 571 572 + 382 1 571 573 + 383 1 574 575 + 384 1 574 576 + 385 1 577 578 + 386 1 577 579 + 387 1 580 581 + 388 1 580 582 + 389 1 583 584 + 390 1 583 585 + 391 1 586 587 + 392 1 586 588 + 393 1 589 590 + 394 1 589 591 + 395 1 592 593 + 396 1 592 594 + 397 1 595 596 + 398 1 595 597 + 399 1 598 599 + 400 1 598 600 + 401 1 601 602 + 402 1 601 603 + 403 1 604 605 + 404 1 604 606 + 405 1 607 608 + 406 1 607 609 + 407 1 610 611 + 408 1 610 612 + 409 1 613 614 + 410 1 613 615 + 411 1 616 617 + 412 1 616 618 + 413 1 619 620 + 414 1 619 621 + 415 1 622 623 + 416 1 622 624 + 417 1 625 626 + 418 1 625 627 + 419 1 628 629 + 420 1 628 630 + 421 1 631 632 + 422 1 631 633 + 423 1 634 635 + 424 1 634 636 + 425 1 637 638 + 426 1 637 639 + 427 1 640 641 + 428 1 640 642 + 429 1 643 644 + 430 1 643 645 + 431 1 646 647 + 432 1 646 648 + +Angles + + 1 1 2 1 3 + 2 1 5 4 6 + 3 1 8 7 9 + 4 1 11 10 12 + 5 1 14 13 15 + 6 1 17 16 18 + 7 1 20 19 21 + 8 1 23 22 24 + 9 1 26 25 27 + 10 1 29 28 30 + 11 1 32 31 33 + 12 1 35 34 36 + 13 1 38 37 39 + 14 1 41 40 42 + 15 1 44 43 45 + 16 1 47 46 48 + 17 1 50 49 51 + 18 1 53 52 54 + 19 1 56 55 57 + 20 1 59 58 60 + 21 1 62 61 63 + 22 1 65 64 66 + 23 1 68 67 69 + 24 1 71 70 72 + 25 1 74 73 75 + 26 1 77 76 78 + 27 1 80 79 81 + 28 1 83 82 84 + 29 1 86 85 87 + 30 1 89 88 90 + 31 1 92 91 93 + 32 1 95 94 96 + 33 1 98 97 99 + 34 1 101 100 102 + 35 1 104 103 105 + 36 1 107 106 108 + 37 1 110 109 111 + 38 1 113 112 114 + 39 1 116 115 117 + 40 1 119 118 120 + 41 1 122 121 123 + 42 1 125 124 126 + 43 1 128 127 129 + 44 1 131 130 132 + 45 1 134 133 135 + 46 1 137 136 138 + 47 1 140 139 141 + 48 1 143 142 144 + 49 1 146 145 147 + 50 1 149 148 150 + 51 1 152 151 153 + 52 1 155 154 156 + 53 1 158 157 159 + 54 1 161 160 162 + 55 1 164 163 165 + 56 1 167 166 168 + 57 1 170 169 171 + 58 1 173 172 174 + 59 1 176 175 177 + 60 1 179 178 180 + 61 1 182 181 183 + 62 1 185 184 186 + 63 1 188 187 189 + 64 1 191 190 192 + 65 1 194 193 195 + 66 1 197 196 198 + 67 1 200 199 201 + 68 1 203 202 204 + 69 1 206 205 207 + 70 1 209 208 210 + 71 1 212 211 213 + 72 1 215 214 216 + 73 1 218 217 219 + 74 1 221 220 222 + 75 1 224 223 225 + 76 1 227 226 228 + 77 1 230 229 231 + 78 1 233 232 234 + 79 1 236 235 237 + 80 1 239 238 240 + 81 1 242 241 243 + 82 1 245 244 246 + 83 1 248 247 249 + 84 1 251 250 252 + 85 1 254 253 255 + 86 1 257 256 258 + 87 1 260 259 261 + 88 1 263 262 264 + 89 1 266 265 267 + 90 1 269 268 270 + 91 1 272 271 273 + 92 1 275 274 276 + 93 1 278 277 279 + 94 1 281 280 282 + 95 1 284 283 285 + 96 1 287 286 288 + 97 1 290 289 291 + 98 1 293 292 294 + 99 1 296 295 297 + 100 1 299 298 300 + 101 1 302 301 303 + 102 1 305 304 306 + 103 1 308 307 309 + 104 1 311 310 312 + 105 1 314 313 315 + 106 1 317 316 318 + 107 1 320 319 321 + 108 1 323 322 324 + 109 1 326 325 327 + 110 1 329 328 330 + 111 1 332 331 333 + 112 1 335 334 336 + 113 1 338 337 339 + 114 1 341 340 342 + 115 1 344 343 345 + 116 1 347 346 348 + 117 1 350 349 351 + 118 1 353 352 354 + 119 1 356 355 357 + 120 1 359 358 360 + 121 1 362 361 363 + 122 1 365 364 366 + 123 1 368 367 369 + 124 1 371 370 372 + 125 1 374 373 375 + 126 1 377 376 378 + 127 1 380 379 381 + 128 1 383 382 384 + 129 1 386 385 387 + 130 1 389 388 390 + 131 1 392 391 393 + 132 1 395 394 396 + 133 1 398 397 399 + 134 1 401 400 402 + 135 1 404 403 405 + 136 1 407 406 408 + 137 1 410 409 411 + 138 1 413 412 414 + 139 1 416 415 417 + 140 1 419 418 420 + 141 1 422 421 423 + 142 1 425 424 426 + 143 1 428 427 429 + 144 1 431 430 432 + 145 1 434 433 435 + 146 1 437 436 438 + 147 1 440 439 441 + 148 1 443 442 444 + 149 1 446 445 447 + 150 1 449 448 450 + 151 1 452 451 453 + 152 1 455 454 456 + 153 1 458 457 459 + 154 1 461 460 462 + 155 1 464 463 465 + 156 1 467 466 468 + 157 1 470 469 471 + 158 1 473 472 474 + 159 1 476 475 477 + 160 1 479 478 480 + 161 1 482 481 483 + 162 1 485 484 486 + 163 1 488 487 489 + 164 1 491 490 492 + 165 1 494 493 495 + 166 1 497 496 498 + 167 1 500 499 501 + 168 1 503 502 504 + 169 1 506 505 507 + 170 1 509 508 510 + 171 1 512 511 513 + 172 1 515 514 516 + 173 1 518 517 519 + 174 1 521 520 522 + 175 1 524 523 525 + 176 1 527 526 528 + 177 1 530 529 531 + 178 1 533 532 534 + 179 1 536 535 537 + 180 1 539 538 540 + 181 1 542 541 543 + 182 1 545 544 546 + 183 1 548 547 549 + 184 1 551 550 552 + 185 1 554 553 555 + 186 1 557 556 558 + 187 1 560 559 561 + 188 1 563 562 564 + 189 1 566 565 567 + 190 1 569 568 570 + 191 1 572 571 573 + 192 1 575 574 576 + 193 1 578 577 579 + 194 1 581 580 582 + 195 1 584 583 585 + 196 1 587 586 588 + 197 1 590 589 591 + 198 1 593 592 594 + 199 1 596 595 597 + 200 1 599 598 600 + 201 1 602 601 603 + 202 1 605 604 606 + 203 1 608 607 609 + 204 1 611 610 612 + 205 1 614 613 615 + 206 1 617 616 618 + 207 1 620 619 621 + 208 1 623 622 624 + 209 1 626 625 627 + 210 1 629 628 630 + 211 1 632 631 633 + 212 1 635 634 636 + 213 1 638 637 639 + 214 1 641 640 642 + 215 1 644 643 645 + 216 1 647 646 648 diff --git a/tools/i-pi/examples/lammps/h2o-piglet.4/in.water b/tools/i-pi/examples/lammps/h2o-piglet.4/in.water new file mode 100644 index 000000000..c43fe7c15 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.4/in.water @@ -0,0 +1,32 @@ +units electron +atom_style full + +#pair_style lj/cut/coul/long 17.01 +pair_style lj/cut/tip4p/long 1 2 1 1 0.278072379 17.007 +#bond_style harmonic +bond_style class2 +angle_style harmonic +#kspace_style pppm 0.0001 +kspace_style pppm/tip4p 0.0001 + +read_data data.water +pair_coeff * * 0 0 +pair_coeff 1 1 0.000295147 5.96946 + +neighbor 2.0 bin + +timestep 0.00025 + +#velocity all create 298.0 2345187 + +#thermo_style multi +#thermo 1 + +#fix 1 all nvt temp 298.0 298.0 30.0 tchain 1 +#fix 1 all nve +fix 1 all ipi piglet_4 32343 unix + +#dump 1 all xyz 25 dump.xyz + +run 100000000 + diff --git a/tools/i-pi/examples/lammps/h2o-piglet.4/input.xml b/tools/i-pi/examples/lammps/h2o-piglet.4/input.xml new file mode 100644 index 000000000..af3b01a1d --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.4/input.xml @@ -0,0 +1,40 @@ + + + water_298K.pdb + 298 + + + [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, kinetic_cv{kelvin}, potential{kelvin}, pressure_cv{megapascal}] + positions + + 500000 + 32343 + + +
piglet_4
+
+
+ + + +[ + 1.300513766690e-2, 9.078220950722e-6, 8.180522706851e-6, 1.196620464216e-5, 1.108609196233e-4, -8.941338246404e-4, 7.817382329484e-3, -1.206049888192e-2, -5.215913547478e-2, -9.756343549369e-6, 2.131200614277e-7, 2.972243541454e-6, -4.459298032276e-6, 2.177011229810e-7, 4.960251269751e-7, -2.083064995647e-6, -7.004617074013e-6, 2.299410255689e-5, -1.851243089560e-6, -2.972243541454e-6, 1.956991859501e-6, 1.742357040415e-6, -2.082265548357e-6, -1.760771137012e-6, -3.733162998255e-6, -3.711884630223e-5, -3.625483838477e-5, 1.492481502899e-5, 4.459298032276e-6, -1.742357040415e-6, 5.092476869103e-6, 2.033910859306e-6, 5.856365217540e-7, -3.020170664006e-6, 1.868034354962e-5, -5.049113665348e-6, 1.059383195368e-4, -2.177011229810e-7, 2.082265548357e-6, -2.033910859306e-6, 5.467813757620e-5, -6.684243951800e-6, -9.770331146786e-7, -2.159991642805e-4, 4.667176340213e-4, -7.611448585233e-4, -4.960251269751e-7, 1.760771137012e-6, -5.856365217540e-7, 6.684243951800e-6, 6.616597356640e-4, -1.637891086976e-6, -2.056652206438e-4, 2.960975881160e-4, 7.659946833472e-3, 2.083064995647e-6, 3.733162998255e-6, 3.020170664006e-6, 9.770331146786e-7, 1.637891086976e-6, 6.390977118535e-3, -6.246090363901e-5, 5.054994461623e-4, -1.078245092236e-2, 7.004617074013e-6, 3.711884630223e-5, -1.868034354962e-5, 2.159991642805e-4, 2.056652206438e-4, 6.246090363901e-5, 1.730397061203e-1, 1.004651317366e-4, -5.467410217589e-2, -2.299410255689e-5, 3.625483838477e-5, 5.049113665348e-6, -4.667176340213e-4, -2.960975881160e-4, -5.054994461623e-4, -1.004651317366e-4, 1.795223909984e+0, + 7.566936336534e-6, 6.338019063098e-3, 0.000000000000e+0, 1.060374810427e-2, 0.000000000000e+0, 4.208955410918e-3, 0.000000000000e+0, 8.082827448553e-5, 0.000000000000e+0, -6.338019063098e-3, 7.358306814484e-2, 2.945862869452e-2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -2.945862869452e-2, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.060374810427e-2, 0.000000000000e+0, 0.000000000000e+0, 1.487651276141e-2, 5.463360757376e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -5.463360757376e-3, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.208955410918e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 4.130761028108e-2, 1.462832567462e-2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.462832567462e-2, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, -8.082827448553e-5, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.105282519359e-3, 1.090072581774e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.090072581774e-3, 1.924557597624e-14, + 7.566936336534e-6, 6.338019063098e-3, 0.000000000000e+0, 1.060374810427e-2, 0.000000000000e+0, 4.208955410918e-3, 0.000000000000e+0, 8.082827448553e-5, 0.000000000000e+0, -6.338019063098e-3, 7.358306814484e-2, 2.945862869452e-2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -2.945862869452e-2, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.060374810427e-2, 0.000000000000e+0, 0.000000000000e+0, 1.487651276141e-2, 5.463360757376e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -5.463360757376e-3, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.208955410918e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 4.130761028108e-2, 1.462832567462e-2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.462832567462e-2, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, -8.082827448553e-5, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.105282519359e-3, 1.090072581774e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.090072581774e-3, 1.924557597624e-14, + 7.566936336534e-6, 6.338019063098e-3, 0.000000000000e+0, 1.060374810427e-2, 0.000000000000e+0, 4.208955410918e-3, 0.000000000000e+0, 8.082827448553e-5, 0.000000000000e+0, -6.338019063098e-3, 7.358306814484e-2, 2.945862869452e-2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -2.945862869452e-2, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.060374810427e-2, 0.000000000000e+0, 0.000000000000e+0, 1.487651276141e-2, 5.463360757376e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -5.463360757376e-3, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.208955410918e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 4.130761028108e-2, 1.462832567462e-2, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.462832567462e-2, 1.924557597624e-14, 0.000000000000e+0, 0.000000000000e+0, -8.082827448553e-5, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.105282519359e-3, 1.090072581774e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.090072581774e-3, 1.924557597624e-14 +] + + +[ + 1.192000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 1.192000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 1.192000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 1.192000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 1.192000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 1.192000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 1.192000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 1.192000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 1.192000000000e+3, + 1.974745232194e+3, -2.047141324480e+2, -1.465776544626e+3, 5.611692742600e+2, 2.600211572322e+2, -1.099491161786e+3, -3.093580205740e+3, -3.861032202200e+2, -1.067404178368e+3, -2.047141324480e+2, 1.087575551624e+4, 6.721323835060e-9, 2.021884782970e+2, 1.075739781622e+2, -7.437996121940e+1, -1.600458223938e+1, -1.059816853114e+1, 2.076593606756e+0, -1.465776544626e+3, 6.719263290220e-9, 1.056039393790e+4, -5.800425818660e+2, -1.752619163876e+2, 3.223014416760e+1, -6.625413068480e+2, -5.611883191420e+1, -2.352310083702e+2, 5.611692742600e+2, 2.021884782970e+2, -5.800425818660e+2, 8.662918193440e+2, 3.799597913860e-9, 1.716248402446e+2, -1.504572868414e+3, -2.864411056124e+2, -4.191189710000e+1, 2.600211572322e+2, 1.075739781622e+2, -1.752619163876e+2, 3.799720946140e-9, 1.370962657638e+3, 5.619251682460e+2, -1.447856743746e+3, 2.100592360296e+2, -2.014734930954e+3, -1.099491161786e+3, -7.437996121940e+1, 3.223014416760e+1, 1.716248402446e+2, 5.619251682460e+2, 2.319917706904e+4, 2.896113582292e-8, -1.931536922152e+1, 4.385447956380e+0, -3.093580205740e+3, -1.600458223938e+1, -6.625413068480e+2, -1.504572868414e+3, -1.447856743746e+3, 2.896343709812e-8, 2.230907239094e+4, -5.885090774480e+1, -3.209433686600e+2, -3.861032202200e+2, -1.059816853114e+1, -5.611883191420e+1, -2.864411056124e+2, 2.100592360296e+2, -1.931536922152e+1, -5.885090774480e+1, 7.065427000840e+4, 1.240853151798e-6, -1.067404178368e+3, 2.076593606756e+0, -2.352310083702e+2, -4.191189710000e+1, -2.014734930954e+3, 4.385447956380e+0, -3.209433686600e+2, 1.240861621554e-6, 7.057512257920e+4, + 1.974745232194e+3, -2.047141324480e+2, -1.465776544626e+3, 5.611692742600e+2, 2.600211572322e+2, -1.099491161786e+3, -3.093580205740e+3, -3.861032202200e+2, -1.067404178368e+3, -2.047141324480e+2, 1.087575551624e+4, 6.721323835060e-9, 2.021884782970e+2, 1.075739781622e+2, -7.437996121940e+1, -1.600458223938e+1, -1.059816853114e+1, 2.076593606756e+0, -1.465776544626e+3, 6.719263290220e-9, 1.056039393790e+4, -5.800425818660e+2, -1.752619163876e+2, 3.223014416760e+1, -6.625413068480e+2, -5.611883191420e+1, -2.352310083702e+2, 5.611692742600e+2, 2.021884782970e+2, -5.800425818660e+2, 8.662918193440e+2, 3.799597913860e-9, 1.716248402446e+2, -1.504572868414e+3, -2.864411056124e+2, -4.191189710000e+1, 2.600211572322e+2, 1.075739781622e+2, -1.752619163876e+2, 3.799720946140e-9, 1.370962657638e+3, 5.619251682460e+2, -1.447856743746e+3, 2.100592360296e+2, -2.014734930954e+3, -1.099491161786e+3, -7.437996121940e+1, 3.223014416760e+1, 1.716248402446e+2, 5.619251682460e+2, 2.319917706904e+4, 2.896113582292e-8, -1.931536922152e+1, 4.385447956380e+0, -3.093580205740e+3, -1.600458223938e+1, -6.625413068480e+2, -1.504572868414e+3, -1.447856743746e+3, 2.896343709812e-8, 2.230907239094e+4, -5.885090774480e+1, -3.209433686600e+2, -3.861032202200e+2, -1.059816853114e+1, -5.611883191420e+1, -2.864411056124e+2, 2.100592360296e+2, -1.931536922152e+1, -5.885090774480e+1, 7.065427000840e+4, 1.240853151798e-6, -1.067404178368e+3, 2.076593606756e+0, -2.352310083702e+2, -4.191189710000e+1, -2.014734930954e+3, 4.385447956380e+0, -3.209433686600e+2, 1.240861621554e-6, 7.057512257920e+4, + 1.974745232194e+3, -2.047141324480e+2, -1.465776544626e+3, 5.611692742600e+2, 2.600211572322e+2, -1.099491161786e+3, -3.093580205740e+3, -3.861032202200e+2, -1.067404178368e+3, -2.047141324480e+2, 1.087575551624e+4, 6.721323835060e-9, 2.021884782970e+2, 1.075739781622e+2, -7.437996121940e+1, -1.600458223938e+1, -1.059816853114e+1, 2.076593606756e+0, -1.465776544626e+3, 6.719263290220e-9, 1.056039393790e+4, -5.800425818660e+2, -1.752619163876e+2, 3.223014416760e+1, -6.625413068480e+2, -5.611883191420e+1, -2.352310083702e+2, 5.611692742600e+2, 2.021884782970e+2, -5.800425818660e+2, 8.662918193440e+2, 3.799597913860e-9, 1.716248402446e+2, -1.504572868414e+3, -2.864411056124e+2, -4.191189710000e+1, 2.600211572322e+2, 1.075739781622e+2, -1.752619163876e+2, 3.799720946140e-9, 1.370962657638e+3, 5.619251682460e+2, -1.447856743746e+3, 2.100592360296e+2, -2.014734930954e+3, -1.099491161786e+3, -7.437996121940e+1, 3.223014416760e+1, 1.716248402446e+2, 5.619251682460e+2, 2.319917706904e+4, 2.896113582292e-8, -1.931536922152e+1, 4.385447956380e+0, -3.093580205740e+3, -1.600458223938e+1, -6.625413068480e+2, -1.504572868414e+3, -1.447856743746e+3, 2.896343709812e-8, 2.230907239094e+4, -5.885090774480e+1, -3.209433686600e+2, -3.861032202200e+2, -1.059816853114e+1, -5.611883191420e+1, -2.864411056124e+2, 2.100592360296e+2, -1.931536922152e+1, -5.885090774480e+1, 7.065427000840e+4, 1.240853151798e-6, -1.067404178368e+3, 2.076593606756e+0, -2.352310083702e+2, -4.191189710000e+1, -2.014734930954e+3, 4.385447956380e+0, -3.209433686600e+2, 1.240861621554e-6, 7.057512257920e+4 +] + + + + 0.1 + 298 + +
diff --git a/tools/i-pi/examples/lammps/h2o-piglet.4/water_298K.pdb b/tools/i-pi/examples/lammps/h2o-piglet.4/water_298K.pdb new file mode 100644 index 000000000..e8509c868 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.4/water_298K.pdb @@ -0,0 +1,650 @@ +CRYST 35.233 35.233 35.233 90.00 90.00 90.00 P 1 1 +ATOM 1 O 1 1 3.846 5.672 1.323 0.00 0.00 0 +ATOM 2 H 1 1 2.979 7.054 0.857 0.00 0.00 0 +ATOM 3 H 1 1 5.525 5.697 0.451 0.00 0.00 0 +ATOM 4 O 1 1 34.557 34.341 3.078 0.00 0.00 0 +ATOM 5 H 1 1 33.722 34.689 4.840 0.00 0.00 0 +ATOM 6 H 1 1 36.029 33.220 3.711 0.00 0.00 0 +ATOM 7 O 1 1 5.591 1.963 13.477 0.00 0.00 0 +ATOM 8 H 1 1 7.265 1.864 13.851 0.00 0.00 0 +ATOM 9 H 1 1 5.009 3.555 13.916 0.00 0.00 0 +ATOM 10 O 1 1 1.060 2.061 21.718 0.00 0.00 0 +ATOM 11 H 1 1 0.757 0.261 21.820 0.00 0.00 0 +ATOM 12 H 1 1 0.213 3.013 23.047 0.00 0.00 0 +ATOM 13 O 1 1 1.200 1.337 29.006 0.00 0.00 0 +ATOM 14 H 1 1 0.818 1.884 30.732 0.00 0.00 0 +ATOM 15 H 1 1 2.883 1.825 29.011 0.00 0.00 0 +ATOM 16 O 1 1 1.331 1.386 34.306 0.00 0.00 0 +ATOM 17 H 1 1 2.392 2.898 34.846 0.00 0.00 0 +ATOM 18 H 1 1 0.814 0.532 35.836 0.00 0.00 0 +ATOM 19 O 1 1 31.451 10.201 0.726 0.00 0.00 0 +ATOM 20 H 1 1 32.282 10.877 -0.750 0.00 0.00 0 +ATOM 21 H 1 1 30.920 11.594 1.677 0.00 0.00 0 +ATOM 22 O 1 1 0.836 10.808 4.298 0.00 0.00 0 +ATOM 23 H 1 1 0.305 10.643 2.793 0.00 0.00 0 +ATOM 24 H 1 1 -0.356 10.334 5.524 0.00 0.00 0 +ATOM 25 O 1 1 34.381 5.979 9.194 0.00 0.00 0 +ATOM 26 H 1 1 33.616 7.673 8.857 0.00 0.00 0 +ATOM 27 H 1 1 35.115 5.260 7.618 0.00 0.00 0 +ATOM 28 O 1 1 33.212 6.480 24.278 0.00 0.00 0 +ATOM 29 H 1 1 31.624 6.908 23.521 0.00 0.00 0 +ATOM 30 H 1 1 32.544 4.990 24.982 0.00 0.00 0 +ATOM 31 O 1 1 1.992 9.002 26.863 0.00 0.00 0 +ATOM 32 H 1 1 1.856 10.175 25.579 0.00 0.00 0 +ATOM 33 H 1 1 0.519 8.099 26.386 0.00 0.00 0 +ATOM 34 O 1 1 2.054 8.660 32.515 0.00 0.00 0 +ATOM 35 H 1 1 2.167 8.727 30.494 0.00 0.00 0 +ATOM 36 H 1 1 2.374 10.513 33.038 0.00 0.00 0 +ATOM 37 O 1 1 3.402 16.639 3.008 0.00 0.00 0 +ATOM 38 H 1 1 4.127 15.872 4.446 0.00 0.00 0 +ATOM 39 H 1 1 2.905 18.339 3.160 0.00 0.00 0 +ATOM 40 O 1 1 4.222 15.444 8.072 0.00 0.00 0 +ATOM 41 H 1 1 5.211 16.756 8.299 0.00 0.00 0 +ATOM 42 H 1 1 2.560 15.492 8.860 0.00 0.00 0 +ATOM 43 O 1 1 2.831 9.246 16.488 0.00 0.00 0 +ATOM 44 H 1 1 2.869 8.023 18.050 0.00 0.00 0 +ATOM 45 H 1 1 3.960 8.467 15.154 0.00 0.00 0 +ATOM 46 O 1 1 5.563 6.003 20.907 0.00 0.00 0 +ATOM 47 H 1 1 4.653 4.638 21.480 0.00 0.00 0 +ATOM 48 H 1 1 6.405 6.208 22.529 0.00 0.00 0 +ATOM 49 O 1 1 2.087 13.370 22.913 0.00 0.00 0 +ATOM 50 H 1 1 2.832 14.804 23.422 0.00 0.00 0 +ATOM 51 H 1 1 1.434 13.509 21.196 0.00 0.00 0 +ATOM 52 O 1 1 3.369 17.886 25.109 0.00 0.00 0 +ATOM 53 H 1 1 3.655 17.200 26.766 0.00 0.00 0 +ATOM 54 H 1 1 4.772 18.977 24.500 0.00 0.00 0 +ATOM 55 O 1 1 34.764 20.803 0.948 0.00 0.00 0 +ATOM 56 H 1 1 35.210 21.267 2.816 0.00 0.00 0 +ATOM 57 H 1 1 35.962 21.726 0.131 0.00 0.00 0 +ATOM 58 O 1 1 2.836 24.178 15.229 0.00 0.00 0 +ATOM 59 H 1 1 2.795 22.346 14.876 0.00 0.00 0 +ATOM 60 H 1 1 2.414 24.115 17.130 0.00 0.00 0 +ATOM 61 O 1 1 33.000 24.481 15.230 0.00 0.00 0 +ATOM 62 H 1 1 34.640 24.804 15.013 0.00 0.00 0 +ATOM 63 H 1 1 32.401 25.764 14.295 0.00 0.00 0 +ATOM 64 O 1 1 0.404 26.779 23.400 0.00 0.00 0 +ATOM 65 H 1 1 1.353 27.248 24.987 0.00 0.00 0 +ATOM 66 H 1 1 1.546 28.050 22.317 0.00 0.00 0 +ATOM 67 O 1 1 34.222 21.380 25.418 0.00 0.00 0 +ATOM 68 H 1 1 35.669 20.151 25.317 0.00 0.00 0 +ATOM 69 H 1 1 32.960 21.180 23.992 0.00 0.00 0 +ATOM 70 O 1 1 33.259 17.438 32.480 0.00 0.00 0 +ATOM 71 H 1 1 33.314 18.782 33.883 0.00 0.00 0 +ATOM 72 H 1 1 32.743 18.181 30.871 0.00 0.00 0 +ATOM 73 O 1 1 4.463 21.979 3.936 0.00 0.00 0 +ATOM 74 H 1 1 5.856 23.084 3.400 0.00 0.00 0 +ATOM 75 H 1 1 3.986 22.180 5.602 0.00 0.00 0 +ATOM 76 O 1 1 6.258 25.851 8.520 0.00 0.00 0 +ATOM 77 H 1 1 5.767 27.693 8.476 0.00 0.00 0 +ATOM 78 H 1 1 7.202 25.506 10.186 0.00 0.00 0 +ATOM 79 O 1 1 0.601 29.737 12.747 0.00 0.00 0 +ATOM 80 H 1 1 -0.685 30.842 12.350 0.00 0.00 0 +ATOM 81 H 1 1 1.336 30.716 14.031 0.00 0.00 0 +ATOM 82 O 1 1 7.563 28.191 24.333 0.00 0.00 0 +ATOM 83 H 1 1 9.201 28.828 24.684 0.00 0.00 0 +ATOM 84 H 1 1 7.381 27.621 22.799 0.00 0.00 0 +ATOM 85 O 1 1 3.653 27.109 27.772 0.00 0.00 0 +ATOM 86 H 1 1 5.126 27.015 26.772 0.00 0.00 0 +ATOM 87 H 1 1 3.031 28.756 27.698 0.00 0.00 0 +ATOM 88 O 1 1 2.596 23.991 32.476 0.00 0.00 0 +ATOM 89 H 1 1 2.879 24.791 30.859 0.00 0.00 0 +ATOM 90 H 1 1 4.003 22.913 32.701 0.00 0.00 0 +ATOM 91 O 1 1 3.083 31.317 3.644 0.00 0.00 0 +ATOM 92 H 1 1 4.133 30.589 2.539 0.00 0.00 0 +ATOM 93 H 1 1 4.218 32.173 5.037 0.00 0.00 0 +ATOM 94 O 1 1 4.661 30.555 9.368 0.00 0.00 0 +ATOM 95 H 1 1 3.184 29.843 10.132 0.00 0.00 0 +ATOM 96 H 1 1 4.358 32.448 9.126 0.00 0.00 0 +ATOM 97 O 1 1 3.465 32.537 15.778 0.00 0.00 0 +ATOM 98 H 1 1 5.072 31.819 15.903 0.00 0.00 0 +ATOM 99 H 1 1 4.055 34.257 15.284 0.00 0.00 0 +ATOM 100 O 1 1 4.215 29.153 20.317 0.00 0.00 0 +ATOM 101 H 1 1 3.658 30.176 18.842 0.00 0.00 0 +ATOM 102 H 1 1 4.959 30.291 21.449 0.00 0.00 0 +ATOM 103 O 1 1 1.126 31.333 28.768 0.00 0.00 0 +ATOM 104 H 1 1 2.395 31.124 29.925 0.00 0.00 0 +ATOM 105 H 1 1 0.768 33.092 28.898 0.00 0.00 0 +ATOM 106 O 1 1 4.881 32.616 32.302 0.00 0.00 0 +ATOM 107 H 1 1 6.588 32.911 31.725 0.00 0.00 0 +ATOM 108 H 1 1 4.486 34.037 33.249 0.00 0.00 0 +ATOM 109 O 1 1 8.962 5.556 0.151 0.00 0.00 0 +ATOM 110 H 1 1 9.652 6.991 0.859 0.00 0.00 0 +ATOM 111 H 1 1 9.173 4.477 1.645 0.00 0.00 0 +ATOM 112 O 1 1 1.833 3.518 5.679 0.00 0.00 0 +ATOM 113 H 1 1 2.889 2.731 6.788 0.00 0.00 0 +ATOM 114 H 1 1 2.789 4.187 4.147 0.00 0.00 0 +ATOM 115 O 1 1 10.510 34.726 13.073 0.00 0.00 0 +ATOM 116 H 1 1 11.920 34.118 11.919 0.00 0.00 0 +ATOM 117 H 1 1 11.295 34.968 14.741 0.00 0.00 0 +ATOM 118 O 1 1 7.212 0.042 22.454 0.00 0.00 0 +ATOM 119 H 1 1 6.924 0.470 24.172 0.00 0.00 0 +ATOM 120 H 1 1 8.319 1.228 21.653 0.00 0.00 0 +ATOM 121 O 1 1 6.365 2.010 27.544 0.00 0.00 0 +ATOM 122 H 1 1 5.954 3.585 26.852 0.00 0.00 0 +ATOM 123 H 1 1 7.758 2.549 28.696 0.00 0.00 0 +ATOM 124 O 1 1 10.833 3.140 30.787 0.00 0.00 0 +ATOM 125 H 1 1 12.697 2.975 30.867 0.00 0.00 0 +ATOM 126 H 1 1 10.389 3.700 32.404 0.00 0.00 0 +ATOM 127 O 1 1 8.684 9.342 3.912 0.00 0.00 0 +ATOM 128 H 1 1 6.985 9.256 4.773 0.00 0.00 0 +ATOM 129 H 1 1 8.684 10.809 3.011 0.00 0.00 0 +ATOM 130 O 1 1 4.873 9.919 7.707 0.00 0.00 0 +ATOM 131 H 1 1 3.698 9.771 6.194 0.00 0.00 0 +ATOM 132 H 1 1 5.047 11.961 7.624 0.00 0.00 0 +ATOM 133 O 1 1 10.031 5.018 9.699 0.00 0.00 0 +ATOM 134 H 1 1 9.675 3.382 10.340 0.00 0.00 0 +ATOM 135 H 1 1 9.132 5.987 10.825 0.00 0.00 0 +ATOM 136 O 1 1 11.246 3.918 21.929 0.00 0.00 0 +ATOM 137 H 1 1 12.614 2.770 22.341 0.00 0.00 0 +ATOM 138 H 1 1 12.073 5.686 21.497 0.00 0.00 0 +ATOM 139 O 1 1 6.825 7.164 25.708 0.00 0.00 0 +ATOM 140 H 1 1 8.036 8.374 25.980 0.00 0.00 0 +ATOM 141 H 1 1 5.206 7.900 25.891 0.00 0.00 0 +ATOM 142 O 1 1 10.171 12.811 0.295 0.00 0.00 0 +ATOM 143 H 1 1 10.033 12.818 -1.609 0.00 0.00 0 +ATOM 144 H 1 1 9.880 14.492 0.480 0.00 0.00 0 +ATOM 145 O 1 1 8.190 17.402 1.253 0.00 0.00 0 +ATOM 146 H 1 1 9.472 18.531 1.253 0.00 0.00 0 +ATOM 147 H 1 1 6.351 17.817 1.568 0.00 0.00 0 +ATOM 148 O 1 1 11.233 16.188 8.299 0.00 0.00 0 +ATOM 149 H 1 1 10.291 17.689 8.166 0.00 0.00 0 +ATOM 150 H 1 1 12.768 17.123 8.733 0.00 0.00 0 +ATOM 151 O 1 1 6.386 8.002 12.846 0.00 0.00 0 +ATOM 152 H 1 1 7.701 8.896 13.655 0.00 0.00 0 +ATOM 153 H 1 1 5.591 8.877 11.519 0.00 0.00 0 +ATOM 154 O 1 1 8.184 10.419 18.848 0.00 0.00 0 +ATOM 155 H 1 1 9.498 9.434 19.905 0.00 0.00 0 +ATOM 156 H 1 1 6.882 9.027 18.948 0.00 0.00 0 +ATOM 157 O 1 1 10.806 14.431 21.328 0.00 0.00 0 +ATOM 158 H 1 1 9.177 13.531 20.670 0.00 0.00 0 +ATOM 159 H 1 1 11.344 15.696 20.448 0.00 0.00 0 +ATOM 160 O 1 1 9.237 13.928 30.341 0.00 0.00 0 +ATOM 161 H 1 1 10.779 14.839 30.522 0.00 0.00 0 +ATOM 162 H 1 1 9.965 13.192 28.899 0.00 0.00 0 +ATOM 163 O 1 1 10.918 21.707 1.864 0.00 0.00 0 +ATOM 164 H 1 1 10.280 23.449 2.279 0.00 0.00 0 +ATOM 165 H 1 1 12.708 21.456 1.749 0.00 0.00 0 +ATOM 166 O 1 1 9.353 16.125 13.927 0.00 0.00 0 +ATOM 167 H 1 1 9.938 17.594 14.618 0.00 0.00 0 +ATOM 168 H 1 1 9.518 16.360 12.244 0.00 0.00 0 +ATOM 169 O 1 1 10.371 11.107 14.268 0.00 0.00 0 +ATOM 170 H 1 1 9.644 10.406 15.859 0.00 0.00 0 +ATOM 171 H 1 1 9.434 12.523 14.117 0.00 0.00 0 +ATOM 172 O 1 1 3.351 22.769 20.196 0.00 0.00 0 +ATOM 173 H 1 1 2.055 23.686 21.503 0.00 0.00 0 +ATOM 174 H 1 1 2.452 21.401 19.413 0.00 0.00 0 +ATOM 175 O 1 1 6.836 21.329 23.199 0.00 0.00 0 +ATOM 176 H 1 1 8.249 20.848 22.320 0.00 0.00 0 +ATOM 177 H 1 1 5.668 21.841 21.886 0.00 0.00 0 +ATOM 178 O 1 1 4.604 15.649 30.043 0.00 0.00 0 +ATOM 179 H 1 1 6.453 15.217 30.207 0.00 0.00 0 +ATOM 180 H 1 1 3.822 14.762 31.562 0.00 0.00 0 +ATOM 181 O 1 1 7.125 19.976 9.421 0.00 0.00 0 +ATOM 182 H 1 1 5.918 20.453 10.730 0.00 0.00 0 +ATOM 183 H 1 1 8.099 21.496 9.491 0.00 0.00 0 +ATOM 184 O 1 1 9.063 25.912 13.186 0.00 0.00 0 +ATOM 185 H 1 1 10.350 26.572 12.367 0.00 0.00 0 +ATOM 186 H 1 1 9.680 24.367 13.697 0.00 0.00 0 +ATOM 187 O 1 1 8.022 22.343 17.042 0.00 0.00 0 +ATOM 188 H 1 1 9.144 23.367 18.074 0.00 0.00 0 +ATOM 189 H 1 1 6.562 23.462 16.852 0.00 0.00 0 +ATOM 190 O 1 1 10.762 26.285 19.963 0.00 0.00 0 +ATOM 191 H 1 1 11.036 27.966 20.538 0.00 0.00 0 +ATOM 192 H 1 1 11.078 25.401 21.456 0.00 0.00 0 +ATOM 193 O 1 1 9.158 22.902 28.391 0.00 0.00 0 +ATOM 194 H 1 1 8.219 23.528 27.085 0.00 0.00 0 +ATOM 195 H 1 1 8.089 21.760 29.509 0.00 0.00 0 +ATOM 196 O 1 1 6.219 20.158 31.921 0.00 0.00 0 +ATOM 197 H 1 1 5.635 18.511 31.161 0.00 0.00 0 +ATOM 198 H 1 1 7.530 19.624 33.071 0.00 0.00 0 +ATOM 199 O 1 1 11.191 31.509 2.617 0.00 0.00 0 +ATOM 200 H 1 1 10.460 32.214 4.108 0.00 0.00 0 +ATOM 201 H 1 1 13.176 31.751 2.577 0.00 0.00 0 +ATOM 202 O 1 1 4.748 0.055 8.605 0.00 0.00 0 +ATOM 203 H 1 1 5.380 0.517 10.183 0.00 0.00 0 +ATOM 204 H 1 1 6.050 -0.306 7.480 0.00 0.00 0 +ATOM 205 O 1 1 8.695 30.809 15.731 0.00 0.00 0 +ATOM 206 H 1 1 9.189 32.103 14.495 0.00 0.00 0 +ATOM 207 H 1 1 8.447 29.069 14.868 0.00 0.00 0 +ATOM 208 O 1 1 10.128 31.402 20.766 0.00 0.00 0 +ATOM 209 H 1 1 9.456 30.905 19.155 0.00 0.00 0 +ATOM 210 H 1 1 9.020 32.731 21.415 0.00 0.00 0 +ATOM 211 O 1 1 12.238 30.162 25.837 0.00 0.00 0 +ATOM 212 H 1 1 11.418 30.908 27.110 0.00 0.00 0 +ATOM 213 H 1 1 12.396 31.331 24.678 0.00 0.00 0 +ATOM 214 O 1 1 10.395 32.537 30.624 0.00 0.00 0 +ATOM 215 H 1 1 11.042 34.339 30.751 0.00 0.00 0 +ATOM 216 H 1 1 11.378 31.486 31.538 0.00 0.00 0 +ATOM 217 O 1 1 10.438 3.626 5.087 0.00 0.00 0 +ATOM 218 H 1 1 12.435 4.082 5.136 0.00 0.00 0 +ATOM 219 H 1 1 9.822 4.284 6.681 0.00 0.00 0 +ATOM 220 O 1 1 14.762 3.401 13.776 0.00 0.00 0 +ATOM 221 H 1 1 16.518 3.824 13.376 0.00 0.00 0 +ATOM 222 H 1 1 13.752 4.757 12.964 0.00 0.00 0 +ATOM 223 O 1 1 12.382 1.012 17.643 0.00 0.00 0 +ATOM 224 H 1 1 13.346 1.997 16.444 0.00 0.00 0 +ATOM 225 H 1 1 11.931 2.133 18.998 0.00 0.00 0 +ATOM 226 O 1 1 15.278 1.293 24.559 0.00 0.00 0 +ATOM 227 H 1 1 16.071 0.946 26.365 0.00 0.00 0 +ATOM 228 H 1 1 15.794 0.199 23.499 0.00 0.00 0 +ATOM 229 O 1 1 22.226 31.627 24.712 0.00 0.00 0 +ATOM 230 H 1 1 23.338 32.595 23.876 0.00 0.00 0 +ATOM 231 H 1 1 22.161 30.053 24.132 0.00 0.00 0 +ATOM 232 O 1 1 15.640 1.847 32.717 0.00 0.00 0 +ATOM 233 H 1 1 17.488 2.473 31.874 0.00 0.00 0 +ATOM 234 H 1 1 16.403 0.869 34.267 0.00 0.00 0 +ATOM 235 O 1 1 14.858 10.199 2.754 0.00 0.00 0 +ATOM 236 H 1 1 13.360 10.712 2.282 0.00 0.00 0 +ATOM 237 H 1 1 14.560 9.316 4.559 0.00 0.00 0 +ATOM 238 O 1 1 15.717 8.469 10.739 0.00 0.00 0 +ATOM 239 H 1 1 17.323 9.581 10.875 0.00 0.00 0 +ATOM 240 H 1 1 14.574 9.631 10.221 0.00 0.00 0 +ATOM 241 O 1 1 15.248 10.398 16.525 0.00 0.00 0 +ATOM 242 H 1 1 16.324 9.181 16.149 0.00 0.00 0 +ATOM 243 H 1 1 14.172 10.488 15.098 0.00 0.00 0 +ATOM 244 O 1 1 13.226 8.438 20.801 0.00 0.00 0 +ATOM 245 H 1 1 14.043 8.996 19.295 0.00 0.00 0 +ATOM 246 H 1 1 14.661 7.802 22.093 0.00 0.00 0 +ATOM 247 O 1 1 10.173 10.961 25.875 0.00 0.00 0 +ATOM 248 H 1 1 11.477 10.223 26.940 0.00 0.00 0 +ATOM 249 H 1 1 11.269 10.738 24.343 0.00 0.00 0 +ATOM 250 O 1 1 12.792 7.737 29.173 0.00 0.00 0 +ATOM 251 H 1 1 12.199 6.038 29.475 0.00 0.00 0 +ATOM 252 H 1 1 14.427 7.450 29.617 0.00 0.00 0 +ATOM 253 O 1 1 15.180 19.498 3.578 0.00 0.00 0 +ATOM 254 H 1 1 14.883 17.596 4.080 0.00 0.00 0 +ATOM 255 H 1 1 16.754 19.579 2.626 0.00 0.00 0 +ATOM 256 O 1 1 12.517 11.093 7.701 0.00 0.00 0 +ATOM 257 H 1 1 12.224 12.778 7.555 0.00 0.00 0 +ATOM 258 H 1 1 11.150 10.393 7.057 0.00 0.00 0 +ATOM 259 O 1 1 16.266 16.271 10.758 0.00 0.00 0 +ATOM 260 H 1 1 16.507 15.795 12.768 0.00 0.00 0 +ATOM 261 H 1 1 17.725 16.977 10.292 0.00 0.00 0 +ATOM 262 O 1 1 14.069 18.399 18.897 0.00 0.00 0 +ATOM 263 H 1 1 15.513 17.523 18.155 0.00 0.00 0 +ATOM 264 H 1 1 14.958 18.709 20.673 0.00 0.00 0 +ATOM 265 O 1 1 14.099 15.480 25.510 0.00 0.00 0 +ATOM 266 H 1 1 13.698 16.872 26.938 0.00 0.00 0 +ATOM 267 H 1 1 12.567 15.379 24.444 0.00 0.00 0 +ATOM 268 O 1 1 13.309 17.574 30.292 0.00 0.00 0 +ATOM 269 H 1 1 14.937 16.934 30.810 0.00 0.00 0 +ATOM 270 H 1 1 13.969 19.494 30.012 0.00 0.00 0 +ATOM 271 O 1 1 18.371 23.257 0.925 0.00 0.00 0 +ATOM 272 H 1 1 19.479 23.480 2.321 0.00 0.00 0 +ATOM 273 H 1 1 19.087 24.325 -0.369 0.00 0.00 0 +ATOM 274 O 1 1 12.100 21.730 11.355 0.00 0.00 0 +ATOM 275 H 1 1 13.141 22.287 12.743 0.00 0.00 0 +ATOM 276 H 1 1 13.467 22.236 10.244 0.00 0.00 0 +ATOM 277 O 1 1 12.163 23.290 23.597 0.00 0.00 0 +ATOM 278 H 1 1 11.324 22.736 24.949 0.00 0.00 0 +ATOM 279 H 1 1 13.882 22.872 23.840 0.00 0.00 0 +ATOM 280 O 1 1 20.173 26.761 22.628 0.00 0.00 0 +ATOM 281 H 1 1 20.206 26.532 20.792 0.00 0.00 0 +ATOM 282 H 1 1 21.556 25.742 23.389 0.00 0.00 0 +ATOM 283 O 1 1 16.701 21.165 22.605 0.00 0.00 0 +ATOM 284 H 1 1 18.028 20.686 23.848 0.00 0.00 0 +ATOM 285 H 1 1 17.104 22.866 21.949 0.00 0.00 0 +ATOM 286 O 1 1 11.391 26.461 33.705 0.00 0.00 0 +ATOM 287 H 1 1 9.841 27.192 34.048 0.00 0.00 0 +ATOM 288 H 1 1 11.776 25.540 35.243 0.00 0.00 0 +ATOM 289 O 1 1 9.898 25.989 4.553 0.00 0.00 0 +ATOM 290 H 1 1 8.902 26.131 6.039 0.00 0.00 0 +ATOM 291 H 1 1 10.287 27.806 4.376 0.00 0.00 0 +ATOM 292 O 1 1 14.308 26.960 10.877 0.00 0.00 0 +ATOM 293 H 1 1 15.302 27.405 12.173 0.00 0.00 0 +ATOM 294 H 1 1 15.463 26.151 9.633 0.00 0.00 0 +ATOM 295 O 1 1 13.433 22.960 16.904 0.00 0.00 0 +ATOM 296 H 1 1 13.409 24.131 18.132 0.00 0.00 0 +ATOM 297 H 1 1 13.624 21.191 17.520 0.00 0.00 0 +ATOM 298 O 1 1 16.409 26.768 26.875 0.00 0.00 0 +ATOM 299 H 1 1 17.590 26.987 25.431 0.00 0.00 0 +ATOM 300 H 1 1 14.751 27.703 26.230 0.00 0.00 0 +ATOM 301 O 1 1 14.405 22.733 29.892 0.00 0.00 0 +ATOM 302 H 1 1 15.423 23.079 28.494 0.00 0.00 0 +ATOM 303 H 1 1 12.826 23.259 29.416 0.00 0.00 0 +ATOM 304 O 1 1 6.905 29.408 0.749 0.00 0.00 0 +ATOM 305 H 1 1 8.428 30.483 1.567 0.00 0.00 0 +ATOM 306 H 1 1 6.353 30.814 -0.444 0.00 0.00 0 +ATOM 307 O 1 1 9.189 34.159 6.509 0.00 0.00 0 +ATOM 308 H 1 1 10.198 34.193 8.002 0.00 0.00 0 +ATOM 309 H 1 1 9.890 35.692 5.785 0.00 0.00 0 +ATOM 310 O 1 1 14.256 32.316 9.369 0.00 0.00 0 +ATOM 311 H 1 1 15.733 32.867 9.486 0.00 0.00 0 +ATOM 312 H 1 1 14.754 30.670 10.090 0.00 0.00 0 +ATOM 313 O 1 1 14.714 30.841 16.516 0.00 0.00 0 +ATOM 314 H 1 1 13.748 29.551 17.279 0.00 0.00 0 +ATOM 315 H 1 1 13.218 31.933 16.614 0.00 0.00 0 +ATOM 316 O 1 1 18.409 33.641 20.611 0.00 0.00 0 +ATOM 317 H 1 1 19.601 32.274 21.115 0.00 0.00 0 +ATOM 318 H 1 1 17.360 32.655 19.518 0.00 0.00 0 +ATOM 319 O 1 1 16.062 28.638 32.207 0.00 0.00 0 +ATOM 320 H 1 1 14.648 27.958 33.253 0.00 0.00 0 +ATOM 321 H 1 1 15.752 28.014 30.522 0.00 0.00 0 +ATOM 322 O 1 1 16.200 30.895 1.473 0.00 0.00 0 +ATOM 323 H 1 1 16.626 29.968 -0.130 0.00 0.00 0 +ATOM 324 H 1 1 17.167 29.833 2.927 0.00 0.00 0 +ATOM 325 O 1 1 20.278 3.529 6.048 0.00 0.00 0 +ATOM 326 H 1 1 20.977 3.611 4.575 0.00 0.00 0 +ATOM 327 H 1 1 21.312 4.513 7.251 0.00 0.00 0 +ATOM 328 O 1 1 23.079 5.778 10.408 0.00 0.00 0 +ATOM 329 H 1 1 24.650 6.259 10.838 0.00 0.00 0 +ATOM 330 H 1 1 22.342 7.609 10.178 0.00 0.00 0 +ATOM 331 O 1 1 19.581 2.031 12.110 0.00 0.00 0 +ATOM 332 H 1 1 19.039 1.082 10.440 0.00 0.00 0 +ATOM 333 H 1 1 21.141 2.991 11.851 0.00 0.00 0 +ATOM 334 O 1 1 22.005 3.223 23.178 0.00 0.00 0 +ATOM 335 H 1 1 21.429 4.090 24.554 0.00 0.00 0 +ATOM 336 H 1 1 20.654 1.791 22.711 0.00 0.00 0 +ATOM 337 O 1 1 16.630 6.422 23.792 0.00 0.00 0 +ATOM 338 H 1 1 16.219 4.804 24.406 0.00 0.00 0 +ATOM 339 H 1 1 17.066 7.128 25.282 0.00 0.00 0 +ATOM 340 O 1 1 21.676 5.564 28.158 0.00 0.00 0 +ATOM 341 H 1 1 20.658 6.717 29.185 0.00 0.00 0 +ATOM 342 H 1 1 23.413 5.828 28.996 0.00 0.00 0 +ATOM 343 O 1 1 15.257 5.265 5.626 0.00 0.00 0 +ATOM 344 H 1 1 16.914 4.519 5.490 0.00 0.00 0 +ATOM 345 H 1 1 15.144 6.150 6.972 0.00 0.00 0 +ATOM 346 O 1 1 20.137 11.082 10.437 0.00 0.00 0 +ATOM 347 H 1 1 20.021 10.947 8.733 0.00 0.00 0 +ATOM 348 H 1 1 21.025 12.555 10.853 0.00 0.00 0 +ATOM 349 O 1 1 23.089 14.627 12.437 0.00 0.00 0 +ATOM 350 H 1 1 24.716 15.254 12.736 0.00 0.00 0 +ATOM 351 H 1 1 23.284 13.228 13.653 0.00 0.00 0 +ATOM 352 O 1 1 24.083 12.649 22.566 0.00 0.00 0 +ATOM 353 H 1 1 22.397 12.663 23.042 0.00 0.00 0 +ATOM 354 H 1 1 24.901 13.851 23.565 0.00 0.00 0 +ATOM 355 O 1 1 17.865 7.909 30.036 0.00 0.00 0 +ATOM 356 H 1 1 17.509 8.045 31.982 0.00 0.00 0 +ATOM 357 H 1 1 18.078 9.582 29.318 0.00 0.00 0 +ATOM 358 O 1 1 18.824 8.486 0.104 0.00 0.00 0 +ATOM 359 H 1 1 19.997 10.191 -0.057 0.00 0.00 0 +ATOM 360 H 1 1 17.077 8.998 0.779 0.00 0.00 0 +ATOM 361 O 1 1 20.122 9.143 5.343 0.00 0.00 0 +ATOM 362 H 1 1 19.373 8.819 3.821 0.00 0.00 0 +ATOM 363 H 1 1 21.998 8.776 5.128 0.00 0.00 0 +ATOM 364 O 1 1 16.413 14.459 5.855 0.00 0.00 0 +ATOM 365 H 1 1 15.536 13.007 5.239 0.00 0.00 0 +ATOM 366 H 1 1 16.006 14.725 7.737 0.00 0.00 0 +ATOM 367 O 1 1 17.561 15.066 15.654 0.00 0.00 0 +ATOM 368 H 1 1 17.575 13.398 16.055 0.00 0.00 0 +ATOM 369 H 1 1 18.978 15.828 16.400 0.00 0.00 0 +ATOM 370 O 1 1 26.374 17.047 24.817 0.00 0.00 0 +ATOM 371 H 1 1 27.983 17.098 25.632 0.00 0.00 0 +ATOM 372 H 1 1 25.629 18.751 24.919 0.00 0.00 0 +ATOM 373 O 1 1 19.784 12.960 28.706 0.00 0.00 0 +ATOM 374 H 1 1 21.662 13.055 28.871 0.00 0.00 0 +ATOM 375 H 1 1 19.545 14.070 27.143 0.00 0.00 0 +ATOM 376 O 1 1 17.891 16.733 32.499 0.00 0.00 0 +ATOM 377 H 1 1 18.327 15.240 31.277 0.00 0.00 0 +ATOM 378 H 1 1 18.633 18.335 31.693 0.00 0.00 0 +ATOM 379 O 1 1 23.733 23.024 1.663 0.00 0.00 0 +ATOM 380 H 1 1 24.800 24.052 2.776 0.00 0.00 0 +ATOM 381 H 1 1 24.693 22.618 0.198 0.00 0.00 0 +ATOM 382 O 1 1 20.789 18.440 9.443 0.00 0.00 0 +ATOM 383 H 1 1 20.766 17.257 7.881 0.00 0.00 0 +ATOM 384 H 1 1 21.896 17.345 10.385 0.00 0.00 0 +ATOM 385 O 1 1 21.574 17.493 17.838 0.00 0.00 0 +ATOM 386 H 1 1 20.597 18.955 17.218 0.00 0.00 0 +ATOM 387 H 1 1 22.538 16.874 16.251 0.00 0.00 0 +ATOM 388 O 1 1 19.168 14.748 24.131 0.00 0.00 0 +ATOM 389 H 1 1 19.711 16.390 23.712 0.00 0.00 0 +ATOM 390 H 1 1 17.429 14.695 24.403 0.00 0.00 0 +ATOM 391 O 1 1 22.149 20.198 24.977 0.00 0.00 0 +ATOM 392 H 1 1 21.639 20.924 26.486 0.00 0.00 0 +ATOM 393 H 1 1 22.656 21.657 24.411 0.00 0.00 0 +ATOM 394 O 1 1 20.565 20.792 29.600 0.00 0.00 0 +ATOM 395 H 1 1 22.264 20.409 30.214 0.00 0.00 0 +ATOM 396 H 1 1 20.548 22.408 30.597 0.00 0.00 0 +ATOM 397 O 1 1 20.802 26.547 9.615 0.00 0.00 0 +ATOM 398 H 1 1 20.099 27.984 8.338 0.00 0.00 0 +ATOM 399 H 1 1 21.277 27.539 11.325 0.00 0.00 0 +ATOM 400 O 1 1 16.283 23.589 7.779 0.00 0.00 0 +ATOM 401 H 1 1 16.093 21.973 6.712 0.00 0.00 0 +ATOM 402 H 1 1 17.901 22.971 8.154 0.00 0.00 0 +ATOM 403 O 1 1 18.469 29.798 13.568 0.00 0.00 0 +ATOM 404 H 1 1 19.712 31.216 13.506 0.00 0.00 0 +ATOM 405 H 1 1 16.872 30.343 14.396 0.00 0.00 0 +ATOM 406 O 1 1 18.790 21.712 16.060 0.00 0.00 0 +ATOM 407 H 1 1 19.878 23.090 16.485 0.00 0.00 0 +ATOM 408 H 1 1 17.201 22.326 15.819 0.00 0.00 0 +ATOM 409 O 1 1 21.747 26.084 16.349 0.00 0.00 0 +ATOM 410 H 1 1 20.783 27.021 15.300 0.00 0.00 0 +ATOM 411 H 1 1 22.705 27.328 17.206 0.00 0.00 0 +ATOM 412 O 1 1 20.769 26.211 32.050 0.00 0.00 0 +ATOM 413 H 1 1 21.488 27.404 33.328 0.00 0.00 0 +ATOM 414 H 1 1 18.989 26.710 32.145 0.00 0.00 0 +ATOM 415 O 1 1 19.820 29.181 5.559 0.00 0.00 0 +ATOM 416 H 1 1 20.991 29.509 4.109 0.00 0.00 0 +ATOM 417 H 1 1 19.431 31.018 6.221 0.00 0.00 0 +ATOM 418 O 1 1 19.240 33.867 7.993 0.00 0.00 0 +ATOM 419 H 1 1 19.107 35.039 6.604 0.00 0.00 0 +ATOM 420 H 1 1 20.697 33.671 9.063 0.00 0.00 0 +ATOM 421 O 1 1 22.511 34.976 15.793 0.00 0.00 0 +ATOM 422 H 1 1 23.716 36.163 16.603 0.00 0.00 0 +ATOM 423 H 1 1 21.699 36.150 14.467 0.00 0.00 0 +ATOM 424 O 1 1 22.622 30.284 19.069 0.00 0.00 0 +ATOM 425 H 1 1 22.049 31.351 17.725 0.00 0.00 0 +ATOM 426 H 1 1 24.411 30.773 19.576 0.00 0.00 0 +ATOM 427 O 1 1 18.639 33.611 28.369 0.00 0.00 0 +ATOM 428 H 1 1 18.226 32.159 29.103 0.00 0.00 0 +ATOM 429 H 1 1 19.906 33.008 27.158 0.00 0.00 0 +ATOM 430 O 1 1 22.520 1.325 31.926 0.00 0.00 0 +ATOM 431 H 1 1 22.803 2.668 30.796 0.00 0.00 0 +ATOM 432 H 1 1 21.045 0.425 31.122 0.00 0.00 0 +ATOM 433 O 1 1 21.754 3.789 1.159 0.00 0.00 0 +ATOM 434 H 1 1 22.085 2.785 -0.180 0.00 0.00 0 +ATOM 435 H 1 1 20.850 5.175 0.610 0.00 0.00 0 +ATOM 436 O 1 1 28.457 5.539 12.133 0.00 0.00 0 +ATOM 437 H 1 1 29.489 4.390 11.182 0.00 0.00 0 +ATOM 438 H 1 1 29.161 7.131 12.587 0.00 0.00 0 +ATOM 439 O 1 1 22.495 5.966 17.324 0.00 0.00 0 +ATOM 440 H 1 1 24.377 5.379 17.393 0.00 0.00 0 +ATOM 441 H 1 1 21.906 5.491 18.857 0.00 0.00 0 +ATOM 442 O 1 1 28.128 3.304 22.287 0.00 0.00 0 +ATOM 443 H 1 1 28.123 2.999 20.491 0.00 0.00 0 +ATOM 444 H 1 1 26.533 3.355 22.876 0.00 0.00 0 +ATOM 445 O 1 1 28.378 10.455 27.266 0.00 0.00 0 +ATOM 446 H 1 1 30.019 10.292 28.051 0.00 0.00 0 +ATOM 447 H 1 1 28.635 10.039 25.463 0.00 0.00 0 +ATOM 448 O 1 1 27.031 8.353 34.806 0.00 0.00 0 +ATOM 449 H 1 1 26.116 9.984 34.571 0.00 0.00 0 +ATOM 450 H 1 1 28.685 8.951 34.739 0.00 0.00 0 +ATOM 451 O 1 1 24.951 8.160 4.454 0.00 0.00 0 +ATOM 452 H 1 1 25.930 9.616 5.160 0.00 0.00 0 +ATOM 453 H 1 1 25.947 7.994 2.724 0.00 0.00 0 +ATOM 454 O 1 1 26.937 12.436 6.869 0.00 0.00 0 +ATOM 455 H 1 1 25.492 13.284 6.708 0.00 0.00 0 +ATOM 456 H 1 1 27.689 13.332 8.266 0.00 0.00 0 +ATOM 457 O 1 1 23.365 11.214 16.933 0.00 0.00 0 +ATOM 458 H 1 1 22.247 9.744 16.789 0.00 0.00 0 +ATOM 459 H 1 1 23.264 12.035 18.539 0.00 0.00 0 +ATOM 460 O 1 1 28.321 8.759 22.158 0.00 0.00 0 +ATOM 461 H 1 1 27.662 6.895 22.482 0.00 0.00 0 +ATOM 462 H 1 1 26.971 9.710 21.902 0.00 0.00 0 +ATOM 463 O 1 1 27.071 6.109 29.555 0.00 0.00 0 +ATOM 464 H 1 1 27.591 7.663 28.857 0.00 0.00 0 +ATOM 465 H 1 1 27.304 6.320 31.261 0.00 0.00 0 +ATOM 466 O 1 1 22.474 11.704 34.640 0.00 0.00 0 +ATOM 467 H 1 1 22.752 13.304 35.584 0.00 0.00 0 +ATOM 468 H 1 1 22.840 12.090 33.030 0.00 0.00 0 +ATOM 469 O 1 1 21.656 14.971 5.615 0.00 0.00 0 +ATOM 470 H 1 1 21.690 15.860 3.977 0.00 0.00 0 +ATOM 471 H 1 1 19.964 14.225 5.774 0.00 0.00 0 +ATOM 472 O 1 1 28.539 21.492 9.820 0.00 0.00 0 +ATOM 473 H 1 1 27.288 22.181 8.688 0.00 0.00 0 +ATOM 474 H 1 1 28.065 22.420 11.602 0.00 0.00 0 +ATOM 475 O 1 1 28.364 16.020 11.109 0.00 0.00 0 +ATOM 476 H 1 1 30.033 16.649 12.089 0.00 0.00 0 +ATOM 477 H 1 1 28.456 17.440 10.082 0.00 0.00 0 +ATOM 478 O 1 1 0.054 13.686 18.103 0.00 0.00 0 +ATOM 479 H 1 1 -1.714 12.928 18.841 0.00 0.00 0 +ATOM 480 H 1 1 1.008 12.429 17.383 0.00 0.00 0 +ATOM 481 O 1 1 24.636 12.894 29.957 0.00 0.00 0 +ATOM 482 H 1 1 25.906 13.914 31.183 0.00 0.00 0 +ATOM 483 H 1 1 25.641 11.609 29.162 0.00 0.00 0 +ATOM 484 O 1 1 21.548 17.250 0.749 0.00 0.00 0 +ATOM 485 H 1 1 21.843 19.026 0.905 0.00 0.00 0 +ATOM 486 H 1 1 20.385 16.716 -0.697 0.00 0.00 0 +ATOM 487 O 1 1 26.095 27.274 4.520 0.00 0.00 0 +ATOM 488 H 1 1 27.889 26.458 4.505 0.00 0.00 0 +ATOM 489 H 1 1 25.648 26.970 6.165 0.00 0.00 0 +ATOM 490 O 1 1 23.610 22.515 8.008 0.00 0.00 0 +ATOM 491 H 1 1 22.653 21.187 8.739 0.00 0.00 0 +ATOM 492 H 1 1 22.286 24.095 8.444 0.00 0.00 0 +ATOM 493 O 1 1 27.355 18.929 18.180 0.00 0.00 0 +ATOM 494 H 1 1 27.200 20.349 17.155 0.00 0.00 0 +ATOM 495 H 1 1 25.579 18.322 18.770 0.00 0.00 0 +ATOM 496 O 1 1 26.765 23.633 14.444 0.00 0.00 0 +ATOM 497 H 1 1 27.441 25.298 13.651 0.00 0.00 0 +ATOM 498 H 1 1 25.086 24.256 14.749 0.00 0.00 0 +ATOM 499 O 1 1 31.478 20.769 20.986 0.00 0.00 0 +ATOM 500 H 1 1 30.440 22.509 21.135 0.00 0.00 0 +ATOM 501 H 1 1 30.567 19.656 20.043 0.00 0.00 0 +ATOM 502 O 1 1 24.812 20.412 32.668 0.00 0.00 0 +ATOM 503 H 1 1 26.242 21.478 31.874 0.00 0.00 0 +ATOM 504 H 1 1 25.787 19.023 33.158 0.00 0.00 0 +ATOM 505 O 1 1 22.105 29.076 0.928 0.00 0.00 0 +ATOM 506 H 1 1 23.296 27.923 1.739 0.00 0.00 0 +ATOM 507 H 1 1 22.623 30.994 0.882 0.00 0.00 0 +ATOM 508 O 1 1 29.572 31.256 8.626 0.00 0.00 0 +ATOM 509 H 1 1 30.795 30.203 7.736 0.00 0.00 0 +ATOM 510 H 1 1 28.277 31.519 7.260 0.00 0.00 0 +ATOM 511 O 1 1 31.817 34.843 18.283 0.00 0.00 0 +ATOM 512 H 1 1 32.438 34.389 16.474 0.00 0.00 0 +ATOM 513 H 1 1 32.743 36.422 18.341 0.00 0.00 0 +ATOM 514 O 1 1 27.915 25.601 19.033 0.00 0.00 0 +ATOM 515 H 1 1 29.358 26.561 19.190 0.00 0.00 0 +ATOM 516 H 1 1 28.148 24.429 17.530 0.00 0.00 0 +ATOM 517 O 1 1 24.548 24.654 24.025 0.00 0.00 0 +ATOM 518 H 1 1 25.528 25.635 22.824 0.00 0.00 0 +ATOM 519 H 1 1 25.300 25.200 25.645 0.00 0.00 0 +ATOM 520 O 1 1 28.540 22.922 30.370 0.00 0.00 0 +ATOM 521 H 1 1 27.414 24.096 29.781 0.00 0.00 0 +ATOM 522 H 1 1 29.674 23.914 31.873 0.00 0.00 0 +ATOM 523 O 1 1 24.969 33.623 1.014 0.00 0.00 0 +ATOM 524 H 1 1 26.521 33.058 1.518 0.00 0.00 0 +ATOM 525 H 1 1 24.990 34.322 -0.683 0.00 0.00 0 +ATOM 526 O 1 1 23.075 32.171 11.324 0.00 0.00 0 +ATOM 527 H 1 1 23.316 32.775 13.097 0.00 0.00 0 +ATOM 528 H 1 1 24.460 33.203 10.662 0.00 0.00 0 +ATOM 529 O 1 1 27.497 2.736 17.224 0.00 0.00 0 +ATOM 530 H 1 1 28.397 3.415 15.715 0.00 0.00 0 +ATOM 531 H 1 1 28.234 1.233 17.412 0.00 0.00 0 +ATOM 532 O 1 1 26.369 33.060 22.077 0.00 0.00 0 +ATOM 533 H 1 1 26.170 34.746 22.264 0.00 0.00 0 +ATOM 534 H 1 1 27.592 32.404 23.321 0.00 0.00 0 +ATOM 535 O 1 1 30.221 30.950 25.843 0.00 0.00 0 +ATOM 536 H 1 1 30.305 29.038 26.208 0.00 0.00 0 +ATOM 537 H 1 1 30.363 31.979 27.414 0.00 0.00 0 +ATOM 538 O 1 1 24.973 26.732 28.607 0.00 0.00 0 +ATOM 539 H 1 1 25.385 28.369 29.248 0.00 0.00 0 +ATOM 540 H 1 1 23.330 26.597 29.234 0.00 0.00 0 +ATOM 541 O 1 1 32.165 4.857 2.258 0.00 0.00 0 +ATOM 542 H 1 1 32.417 6.195 1.157 0.00 0.00 0 +ATOM 543 H 1 1 32.615 3.727 1.112 0.00 0.00 0 +ATOM 544 O 1 1 28.067 3.533 5.217 0.00 0.00 0 +ATOM 545 H 1 1 26.960 4.447 4.158 0.00 0.00 0 +ATOM 546 H 1 1 29.875 3.863 4.448 0.00 0.00 0 +ATOM 547 O 1 1 33.279 2.782 13.028 0.00 0.00 0 +ATOM 548 H 1 1 33.708 3.955 11.817 0.00 0.00 0 +ATOM 549 H 1 1 33.656 3.545 14.631 0.00 0.00 0 +ATOM 550 O 1 1 34.278 4.944 17.492 0.00 0.00 0 +ATOM 551 H 1 1 33.438 6.563 17.876 0.00 0.00 0 +ATOM 552 H 1 1 34.906 4.452 18.995 0.00 0.00 0 +ATOM 553 O 1 1 32.363 1.908 26.092 0.00 0.00 0 +ATOM 554 H 1 1 31.941 1.683 24.268 0.00 0.00 0 +ATOM 555 H 1 1 33.850 1.390 26.904 0.00 0.00 0 +ATOM 556 O 1 1 27.982 0.418 28.241 0.00 0.00 0 +ATOM 557 H 1 1 27.516 2.080 28.309 0.00 0.00 0 +ATOM 558 H 1 1 29.593 0.176 27.299 0.00 0.00 0 +ATOM 559 O 1 1 28.845 14.672 2.724 0.00 0.00 0 +ATOM 560 H 1 1 27.963 13.930 4.139 0.00 0.00 0 +ATOM 561 H 1 1 30.386 15.714 3.379 0.00 0.00 0 +ATOM 562 O 1 1 28.083 10.618 14.298 0.00 0.00 0 +ATOM 563 H 1 1 28.623 12.160 13.293 0.00 0.00 0 +ATOM 564 H 1 1 26.486 11.015 15.379 0.00 0.00 0 +ATOM 565 O 1 1 33.867 10.545 13.306 0.00 0.00 0 +ATOM 566 H 1 1 35.165 9.612 13.810 0.00 0.00 0 +ATOM 567 H 1 1 33.615 10.270 11.513 0.00 0.00 0 +ATOM 568 O 1 1 31.790 9.696 18.223 0.00 0.00 0 +ATOM 569 H 1 1 30.484 9.334 19.421 0.00 0.00 0 +ATOM 570 H 1 1 30.834 10.096 16.929 0.00 0.00 0 +ATOM 571 O 1 1 30.141 15.006 21.532 0.00 0.00 0 +ATOM 572 H 1 1 28.565 15.594 22.099 0.00 0.00 0 +ATOM 573 H 1 1 30.942 14.253 23.077 0.00 0.00 0 +ATOM 574 O 1 1 32.798 10.732 30.680 0.00 0.00 0 +ATOM 575 H 1 1 34.073 9.528 30.799 0.00 0.00 0 +ATOM 576 H 1 1 32.991 11.512 28.983 0.00 0.00 0 +ATOM 577 O 1 1 33.652 16.265 5.086 0.00 0.00 0 +ATOM 578 H 1 1 35.399 16.239 4.730 0.00 0.00 0 +ATOM 579 H 1 1 33.503 17.939 5.631 0.00 0.00 0 +ATOM 580 O 1 1 31.947 10.799 7.943 0.00 0.00 0 +ATOM 581 H 1 1 29.894 10.549 7.619 0.00 0.00 0 +ATOM 582 H 1 1 32.271 12.414 7.075 0.00 0.00 0 +ATOM 583 O 1 1 0.329 15.516 11.746 0.00 0.00 0 +ATOM 584 H 1 1 -0.446 14.249 12.939 0.00 0.00 0 +ATOM 585 H 1 1 -0.685 17.018 11.935 0.00 0.00 0 +ATOM 586 O 1 1 4.262 19.165 14.308 0.00 0.00 0 +ATOM 587 H 1 1 3.579 17.691 14.920 0.00 0.00 0 +ATOM 588 H 1 1 5.723 19.183 15.204 0.00 0.00 0 +ATOM 589 O 1 1 32.995 13.546 25.948 0.00 0.00 0 +ATOM 590 H 1 1 32.167 15.060 26.787 0.00 0.00 0 +ATOM 591 H 1 1 34.425 13.800 25.007 0.00 0.00 0 +ATOM 592 O 1 1 1.773 13.524 34.037 0.00 0.00 0 +ATOM 593 H 1 1 0.227 14.409 33.446 0.00 0.00 0 +ATOM 594 H 1 1 2.167 14.670 35.511 0.00 0.00 0 +ATOM 595 O 1 1 33.029 20.529 7.247 0.00 0.00 0 +ATOM 596 H 1 1 34.388 21.414 8.003 0.00 0.00 0 +ATOM 597 H 1 1 31.451 20.831 8.182 0.00 0.00 0 +ATOM 598 O 1 1 2.037 24.250 10.251 0.00 0.00 0 +ATOM 599 H 1 1 3.743 25.008 9.876 0.00 0.00 0 +ATOM 600 H 1 1 1.894 25.043 11.903 0.00 0.00 0 +ATOM 601 O 1 1 32.753 19.259 13.976 0.00 0.00 0 +ATOM 602 H 1 1 32.792 20.886 13.792 0.00 0.00 0 +ATOM 603 H 1 1 34.334 18.799 14.976 0.00 0.00 0 +ATOM 604 O 1 1 0.396 18.673 18.699 0.00 0.00 0 +ATOM 605 H 1 1 -1.211 18.950 19.127 0.00 0.00 0 +ATOM 606 H 1 1 0.469 16.977 18.436 0.00 0.00 0 +ATOM 607 O 1 1 30.855 18.370 27.959 0.00 0.00 0 +ATOM 608 H 1 1 29.759 19.681 28.690 0.00 0.00 0 +ATOM 609 H 1 1 32.103 19.477 26.763 0.00 0.00 0 +ATOM 610 O 1 1 27.723 15.992 33.091 0.00 0.00 0 +ATOM 611 H 1 1 29.390 16.423 32.192 0.00 0.00 0 +ATOM 612 H 1 1 27.801 15.859 34.804 0.00 0.00 0 +ATOM 613 O 1 1 31.068 27.895 3.348 0.00 0.00 0 +ATOM 614 H 1 1 32.517 27.825 4.610 0.00 0.00 0 +ATOM 615 H 1 1 31.529 29.459 2.324 0.00 0.00 0 +ATOM 616 O 1 1 35.039 28.008 6.663 0.00 0.00 0 +ATOM 617 H 1 1 35.966 26.934 7.683 0.00 0.00 0 +ATOM 618 H 1 1 36.055 28.336 5.336 0.00 0.00 0 +ATOM 619 O 1 1 29.356 28.196 13.025 0.00 0.00 0 +ATOM 620 H 1 1 29.210 29.335 14.589 0.00 0.00 0 +ATOM 621 H 1 1 28.874 29.629 11.867 0.00 0.00 0 +ATOM 622 O 1 1 32.386 28.434 18.961 0.00 0.00 0 +ATOM 623 H 1 1 33.368 28.574 20.411 0.00 0.00 0 +ATOM 624 H 1 1 33.410 27.406 17.949 0.00 0.00 0 +ATOM 625 O 1 1 30.898 25.390 25.799 0.00 0.00 0 +ATOM 626 H 1 1 32.369 25.913 24.580 0.00 0.00 0 +ATOM 627 H 1 1 31.317 24.075 27.029 0.00 0.00 0 +ATOM 628 O 1 1 32.259 25.611 33.104 0.00 0.00 0 +ATOM 629 H 1 1 32.238 25.736 34.806 0.00 0.00 0 +ATOM 630 H 1 1 33.920 25.042 32.775 0.00 0.00 0 +ATOM 631 O 1 1 30.290 32.645 1.341 0.00 0.00 0 +ATOM 632 H 1 1 29.949 32.793 -0.430 0.00 0.00 0 +ATOM 633 H 1 1 31.762 33.340 1.847 0.00 0.00 0 +ATOM 634 O 1 1 25.536 34.235 6.469 0.00 0.00 0 +ATOM 635 H 1 1 25.716 36.059 6.651 0.00 0.00 0 +ATOM 636 H 1 1 25.283 33.866 4.895 0.00 0.00 0 +ATOM 637 O 1 1 31.674 33.161 13.106 0.00 0.00 0 +ATOM 638 H 1 1 31.793 34.863 13.281 0.00 0.00 0 +ATOM 639 H 1 1 30.425 32.928 11.783 0.00 0.00 0 +ATOM 640 O 1 1 33.844 32.668 22.296 0.00 0.00 0 +ATOM 641 H 1 1 32.750 32.234 23.524 0.00 0.00 0 +ATOM 642 H 1 1 32.917 32.875 20.736 0.00 0.00 0 +ATOM 643 O 1 1 31.603 30.542 30.805 0.00 0.00 0 +ATOM 644 H 1 1 33.451 30.804 30.468 0.00 0.00 0 +ATOM 645 H 1 1 31.575 28.816 31.756 0.00 0.00 0 +ATOM 646 O 1 1 26.295 31.235 30.599 0.00 0.00 0 +ATOM 647 H 1 1 27.834 30.515 30.607 0.00 0.00 0 +ATOM 648 H 1 1 26.362 32.920 29.856 0.00 0.00 0 +END diff --git a/tools/i-pi/examples/lammps/h2o-piglet.8/data.water b/tools/i-pi/examples/lammps/h2o-piglet.8/data.water new file mode 100644 index 000000000..13c75e993 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.8/data.water @@ -0,0 +1,1331 @@ +LAMMPS Description + + 648 atoms + 432 bonds + 216 angles + + 2 atom types + 1 bond types + 1 angle types + + 0 35.233 xlo xhi + 0 35.233 ylo yhi + 0 35.233 zlo zhi + +Masses + + 1 15.9994 + 2 1.0080 + +Bond Coeffs + + 1 1.78 0.2708585 -0.327738785 0.231328959 + +Angle Coeffs + + 1 0.0700 107.400000 + +Atoms + + 1 1 1 -1.1128 3.84600000 5.67200001 1.32300000 + 2 1 2 0.5564 2.97900000 7.05400000 0.85700000 + 3 1 2 0.5564 5.52500001 5.69700001 0.45100000 + 4 2 1 -1.1128 34.55700001 34.34100000 3.07800000 + 5 2 2 0.5564 33.72200001 34.68900000 4.84000001 + 6 2 2 0.5564 36.02900000 33.22000001 3.71100001 + 7 3 1 -1.1128 5.59100000 1.96299999 13.47700000 + 8 3 2 0.5564 7.26500000 1.86400000 13.85100001 + 9 3 2 0.5564 5.00899999 3.55500000 13.91599999 + 10 4 1 -1.1128 1.06000000 2.06100000 21.71800001 + 11 4 2 0.5564 0.75700000 0.26100000 21.82000000 + 12 4 2 0.5564 0.21300001 3.01299999 23.04700000 + 13 5 1 -1.1128 1.20000000 1.33700000 29.00599999 + 14 5 2 0.5564 0.81800000 1.88399999 30.73200000 + 15 5 2 0.5564 2.88300001 1.82500000 29.01100000 + 16 6 1 -1.1128 1.33100001 1.38599999 34.30600001 + 17 6 2 0.5564 2.39200001 2.89799999 34.84600000 + 18 6 2 0.5564 0.81400000 0.53200001 35.83600000 + 19 7 1 -1.1128 31.45100000 10.20100000 0.72599999 + 20 7 2 0.5564 32.28199999 10.87699999 -0.75000000 + 21 7 2 0.5564 30.91999999 11.59399999 1.67700000 + 22 8 1 -1.1128 0.83600000 10.80800001 4.29800000 + 23 8 2 0.5564 0.30500000 10.64300001 2.79300000 + 24 8 2 0.5564 -0.35600001 10.33400000 5.52400000 + 25 9 1 -1.1128 34.38100001 5.97900000 9.19400000 + 26 9 2 0.5564 33.61600000 7.67300000 8.85700000 + 27 9 2 0.5564 35.11500000 5.25999999 7.61800001 + 28 10 1 -1.1128 33.21200000 6.48000000 24.27799999 + 29 10 2 0.5564 31.62400000 6.90800001 23.52100001 + 30 10 2 0.5564 32.54400000 4.99000000 24.98200000 + 31 11 1 -1.1128 1.99200000 9.00199999 26.86300000 + 32 11 2 0.5564 1.85600000 10.17500000 25.57899999 + 33 11 2 0.5564 0.51900000 8.09899999 26.38599999 + 34 12 1 -1.1128 2.05400000 8.66000000 32.51499999 + 35 12 2 0.5564 2.16699999 8.72700000 30.49400000 + 36 12 2 0.5564 2.37400001 10.51300000 33.03799999 + 37 13 1 -1.1128 3.40200000 16.63900001 3.00800000 + 38 13 2 0.5564 4.12700001 15.87200001 4.44600001 + 39 13 2 0.5564 2.90500001 18.33899999 3.15999999 + 40 14 1 -1.1128 4.22200000 15.44400000 8.07200000 + 41 14 2 0.5564 5.21100000 16.75600000 8.29900001 + 42 14 2 0.5564 2.56000000 15.49200001 8.86000000 + 43 15 1 -1.1128 2.83100000 9.24599999 16.48800000 + 44 15 2 0.5564 2.86900001 8.02300001 18.05000000 + 45 15 2 0.5564 3.96000000 8.46700001 15.15400000 + 46 16 1 -1.1128 5.56300000 6.00300000 20.90700000 + 47 16 2 0.5564 4.65300000 4.63800000 21.48000000 + 48 16 2 0.5564 6.40500000 6.20800000 22.52899999 + 49 17 1 -1.1128 2.08700001 13.37000000 22.91299999 + 50 17 2 0.5564 2.83200000 14.80400001 23.42200000 + 51 17 2 0.5564 1.43400000 13.50900000 21.19599999 + 52 18 1 -1.1128 3.36900000 17.88600000 25.10900001 + 53 18 2 0.5564 3.65500000 17.20000000 26.76599999 + 54 18 2 0.5564 4.77200001 18.97699999 24.49999999 + 55 19 1 -1.1128 34.76400000 20.80300000 0.94800001 + 56 19 2 0.5564 35.20999999 21.26700001 2.81599999 + 57 19 2 0.5564 35.96200001 21.72599999 0.13099999 + 58 20 1 -1.1128 2.83600000 24.17799999 15.22900000 + 59 20 2 0.5564 2.79500000 22.34599999 14.87600001 + 60 20 2 0.5564 2.41399999 24.11500000 17.13000001 + 61 21 1 -1.1128 33.00000000 24.48100000 15.23000000 + 62 21 2 0.5564 34.63999999 24.80400001 15.01299999 + 63 21 2 0.5564 32.40100000 25.76400000 14.29500001 + 64 22 1 -1.1128 0.40399999 26.77900001 23.39999999 + 65 22 2 0.5564 1.35300001 27.24800000 24.98700001 + 66 22 2 0.5564 1.54600001 28.05000000 22.31700001 + 67 23 1 -1.1128 34.22200000 21.38000000 25.41799999 + 68 23 2 0.5564 35.66899999 20.15100000 25.31700001 + 69 23 2 0.5564 32.96000000 21.18000000 23.99200000 + 70 24 1 -1.1128 33.25900000 17.43800000 32.48000000 + 71 24 2 0.5564 33.31399999 18.78200000 33.88300001 + 72 24 2 0.5564 32.74300001 18.18100001 30.87100000 + 73 25 1 -1.1128 4.46300000 21.97900000 3.93600000 + 74 25 2 0.5564 5.85600000 23.08400001 3.39999999 + 75 25 2 0.5564 3.98600000 22.18000000 5.60200000 + 76 26 1 -1.1128 6.25800000 25.85100001 8.52000000 + 77 26 2 0.5564 5.76700000 27.69300001 8.47600000 + 78 26 2 0.5564 7.20200001 25.50600000 10.18600000 + 79 27 1 -1.1128 0.60099999 29.73699999 12.74700001 + 80 27 2 0.5564 -0.68500000 30.84200000 12.34999999 + 81 27 2 0.5564 1.33600000 30.71600000 14.03099999 + 82 28 1 -1.1128 7.56300000 28.19100001 24.33300000 + 83 28 2 0.5564 9.20100000 28.82800000 24.68400000 + 84 28 2 0.5564 7.38100001 27.62100000 22.79900000 + 85 29 1 -1.1128 3.65300000 27.10900001 27.77200001 + 86 29 2 0.5564 5.12600000 27.01500000 26.77200001 + 87 29 2 0.5564 3.03099999 28.75600000 27.69800000 + 88 30 1 -1.1128 2.59600001 23.99100001 32.47600000 + 89 30 2 0.5564 2.87900000 24.79099999 30.85899999 + 90 30 2 0.5564 4.00300000 22.91299999 32.70099999 + 91 31 1 -1.1128 3.08300000 31.31700001 3.64399999 + 92 31 2 0.5564 4.13300000 30.58900001 2.53900001 + 93 31 2 0.5564 4.21800000 32.17300001 5.03700001 + 94 32 1 -1.1128 4.66100001 30.55500000 9.36799999 + 95 32 2 0.5564 3.18400001 29.84300000 10.13200000 + 96 32 2 0.5564 4.35800000 32.44800000 9.12600000 + 97 33 1 -1.1128 3.46499999 32.53700000 15.77800000 + 98 33 2 0.5564 5.07200000 31.81899999 15.90300000 + 99 33 2 0.5564 4.05500001 34.25699999 15.28400000 + 100 34 1 -1.1128 4.21500000 29.15299999 20.31700001 + 101 34 2 0.5564 3.65799999 30.17600000 18.84200000 + 102 34 2 0.5564 4.95899999 30.29100000 21.44900001 + 103 35 1 -1.1128 1.12600000 31.33300000 28.76800001 + 104 35 2 0.5564 2.39500000 31.12399999 29.92500000 + 105 35 2 0.5564 0.76800001 33.09199999 28.89799999 + 106 36 1 -1.1128 4.88100000 32.61600000 32.30200000 + 107 36 2 0.5564 6.58800000 32.91100000 31.72500001 + 108 36 2 0.5564 4.48599999 34.03700001 33.24900001 + 109 37 1 -1.1128 8.96200001 5.55600000 0.15100000 + 110 37 2 0.5564 9.65200000 6.99100001 0.85899999 + 111 37 2 0.5564 9.17300001 4.47700000 1.64500000 + 112 38 1 -1.1128 1.83300001 3.51799999 5.67900001 + 113 38 2 0.5564 2.88900000 2.73100000 6.78800000 + 114 38 2 0.5564 2.78900000 4.18700000 4.14700000 + 115 39 1 -1.1128 10.51000001 34.72599999 13.07300001 + 116 39 2 0.5564 11.91999999 34.11800000 11.91900001 + 117 39 2 0.5564 11.29500001 34.96800000 14.74100000 + 118 40 1 -1.1128 7.21200000 0.04199999 22.45399999 + 119 40 2 0.5564 6.92400000 0.47000000 24.17200000 + 120 40 2 0.5564 8.31900000 1.22799999 21.65300000 + 121 41 1 -1.1128 6.36500000 2.01000000 27.54400000 + 122 41 2 0.5564 5.95400000 3.58500000 26.85199999 + 123 41 2 0.5564 7.75800001 2.54900000 28.69600000 + 124 42 1 -1.1128 10.83300001 3.14000000 30.78699999 + 125 42 2 0.5564 12.69700001 2.97500000 30.86700000 + 126 42 2 0.5564 10.38899999 3.70000001 32.40399999 + 127 43 1 -1.1128 8.68400000 9.34200001 3.91200001 + 128 43 2 0.5564 6.98500000 9.25600001 4.77299999 + 129 43 2 0.5564 8.68400000 10.80899999 3.01100000 + 130 44 1 -1.1128 4.87299999 9.91900001 7.70700000 + 131 44 2 0.5564 3.69800000 9.77100000 6.19400000 + 132 44 2 0.5564 5.04700000 11.96100000 7.62400000 + 133 45 1 -1.1128 10.03099999 5.01800000 9.69900000 + 134 45 2 0.5564 9.67500001 3.38199999 10.34000000 + 135 45 2 0.5564 9.13200000 5.98700001 10.82500000 + 136 46 1 -1.1128 11.24599999 3.91800000 21.92900000 + 137 46 2 0.5564 12.61400001 2.77000000 22.34100000 + 138 46 2 0.5564 12.07300001 5.68600001 21.49699999 + 139 47 1 -1.1128 6.82500000 7.16400000 25.70799999 + 140 47 2 0.5564 8.03600000 8.37400001 25.98000001 + 141 47 2 0.5564 5.20600001 7.90000000 25.89099999 + 142 48 1 -1.1128 10.17099999 12.81100001 0.29500001 + 143 48 2 0.5564 10.03300000 12.81800000 -1.60900000 + 144 48 2 0.5564 9.87999999 14.49200001 0.48000000 + 145 49 1 -1.1128 8.19000000 17.40200000 1.25299999 + 146 49 2 0.5564 9.47199999 18.53100000 1.25299999 + 147 49 2 0.5564 6.35100000 17.81700000 1.56800001 + 148 50 1 -1.1128 11.23300000 16.18800001 8.29900001 + 149 50 2 0.5564 10.29100000 17.68900000 8.16600001 + 150 50 2 0.5564 12.76800001 17.12300001 8.73299999 + 151 51 1 -1.1128 6.38599999 8.00199999 12.84600000 + 152 51 2 0.5564 7.70099999 8.89600000 13.65500000 + 153 51 2 0.5564 5.59100000 8.87699999 11.51900000 + 154 52 1 -1.1128 8.18400001 10.41900000 18.84799999 + 155 52 2 0.5564 9.49800000 9.43400000 19.90500001 + 156 52 2 0.5564 6.88200000 9.02699999 18.94800001 + 157 53 1 -1.1128 10.80600000 14.43100000 21.32799999 + 158 53 2 0.5564 9.17700001 13.53100000 20.67000000 + 159 53 2 0.5564 11.34400000 15.69600000 20.44800000 + 160 54 1 -1.1128 9.23700000 13.92800000 30.34100000 + 161 54 2 0.5564 10.77900001 14.83900000 30.52199999 + 162 54 2 0.5564 9.96500000 13.19199999 28.89900000 + 163 55 1 -1.1128 10.91800000 21.70700000 1.86400000 + 164 55 2 0.5564 10.28000000 23.44900001 2.27900000 + 165 55 2 0.5564 12.70799999 21.45600000 1.74900000 + 166 56 1 -1.1128 9.35300001 16.12500000 13.92699999 + 167 56 2 0.5564 9.93799999 17.59399999 14.61800001 + 168 56 2 0.5564 9.51799999 16.36000001 12.24400000 + 169 57 1 -1.1128 10.37099999 11.10700000 14.26800000 + 170 57 2 0.5564 9.64399999 10.40600001 15.85899999 + 171 57 2 0.5564 9.43400000 12.52300000 14.11699999 + 172 58 1 -1.1128 3.35100000 22.76899999 20.19599999 + 173 58 2 0.5564 2.05500001 23.68600001 21.50300001 + 174 58 2 0.5564 2.45200000 21.40100000 19.41300000 + 175 59 1 -1.1128 6.83600000 21.32900000 23.19899999 + 176 59 2 0.5564 8.24900001 20.84799999 22.32000001 + 177 59 2 0.5564 5.66800001 21.84099999 21.88600000 + 178 60 1 -1.1128 4.60399999 15.64900000 30.04300000 + 179 60 2 0.5564 6.45300001 15.21699999 30.20700000 + 180 60 2 0.5564 3.82200001 14.76199999 31.56200000 + 181 61 1 -1.1128 7.12500000 19.97600001 9.42100001 + 182 61 2 0.5564 5.91800000 20.45300001 10.72999999 + 183 61 2 0.5564 8.09899999 21.49600001 9.49100000 + 184 62 1 -1.1128 9.06299999 25.91200001 13.18600000 + 185 62 2 0.5564 10.34999999 26.57199999 12.36700001 + 186 62 2 0.5564 9.67999999 24.36700001 13.69700001 + 187 63 1 -1.1128 8.02200000 22.34299999 17.04199999 + 188 63 2 0.5564 9.14400000 23.36700001 18.07399999 + 189 63 2 0.5564 6.56200000 23.46200000 16.85199999 + 190 64 1 -1.1128 10.76199999 26.28499999 19.96299999 + 191 64 2 0.5564 11.03600000 27.96599999 20.53800000 + 192 64 2 0.5564 11.07800000 25.40100000 21.45600000 + 193 65 1 -1.1128 9.15800000 22.90199999 28.39100000 + 194 65 2 0.5564 8.21900000 23.52800001 27.08499999 + 195 65 2 0.5564 8.08900000 21.76000000 29.50900000 + 196 66 1 -1.1128 6.21900000 20.15800000 31.92100000 + 197 66 2 0.5564 5.63500000 18.51099999 31.16100000 + 198 66 2 0.5564 7.53000000 19.62400000 33.07100000 + 199 67 1 -1.1128 11.19100001 31.50900000 2.61700000 + 200 67 2 0.5564 10.46000001 32.21399999 4.10800000 + 201 67 2 0.5564 13.17600000 31.75099999 2.57700000 + 202 68 1 -1.1128 4.74799999 0.05500001 8.60500000 + 203 68 2 0.5564 5.38000000 0.51700000 10.18300000 + 204 68 2 0.5564 6.05000000 -0.30600001 7.48000000 + 205 69 1 -1.1128 8.69500000 30.80899999 15.73100000 + 206 69 2 0.5564 9.18899999 32.10300000 14.49500000 + 207 69 2 0.5564 8.44699999 29.06900000 14.86800000 + 208 70 1 -1.1128 10.12799999 31.40200000 20.76599999 + 209 70 2 0.5564 9.45600000 30.90500001 19.15500000 + 210 70 2 0.5564 9.01999999 32.73100000 21.41500000 + 211 71 1 -1.1128 12.23800001 30.16200000 25.83699999 + 212 71 2 0.5564 11.41799999 30.90800001 27.10999999 + 213 71 2 0.5564 12.39600001 31.33100001 24.67800000 + 214 72 1 -1.1128 10.39500000 32.53700000 30.62400000 + 215 72 2 0.5564 11.04199999 34.33899999 30.75099999 + 216 72 2 0.5564 11.37800001 31.48599999 31.53800000 + 217 73 1 -1.1128 10.43800000 3.62599999 5.08700001 + 218 73 2 0.5564 12.43500001 4.08200000 5.13600000 + 219 73 2 0.5564 9.82200001 4.28400000 6.68100000 + 220 74 1 -1.1128 14.76199999 3.40100000 13.77599999 + 221 74 2 0.5564 16.51799999 3.82400000 13.37600000 + 222 74 2 0.5564 13.75200000 4.75700000 12.96400000 + 223 75 1 -1.1128 12.38199999 1.01200001 17.64300001 + 224 75 2 0.5564 13.34599999 1.99700000 16.44400000 + 225 75 2 0.5564 11.93100000 2.13300000 18.99800001 + 226 76 1 -1.1128 15.27799999 1.29300000 24.55900000 + 227 76 2 0.5564 16.07100000 0.94600000 26.36500000 + 228 76 2 0.5564 15.79399999 0.19899999 23.49900000 + 229 77 1 -1.1128 22.22600000 31.62700000 24.71199999 + 230 77 2 0.5564 23.33800001 32.59500000 23.87600001 + 231 77 2 0.5564 22.16100000 30.05300000 24.13200000 + 232 78 1 -1.1128 15.63999999 1.84700001 32.71700000 + 233 78 2 0.5564 17.48800000 2.47300000 31.87400000 + 234 78 2 0.5564 16.40300001 0.86900001 34.26700001 + 235 79 1 -1.1128 14.85800001 10.19899999 2.75400001 + 236 79 2 0.5564 13.36000001 10.71199999 2.28199999 + 237 79 2 0.5564 14.56000000 9.31600000 4.55900000 + 238 80 1 -1.1128 15.71700000 8.46900000 10.73900000 + 239 80 2 0.5564 17.32300000 9.58100000 10.87500000 + 240 80 2 0.5564 14.57400000 9.63100000 10.22099999 + 241 81 1 -1.1128 15.24800000 10.39800000 16.52500001 + 242 81 2 0.5564 16.32400001 9.18100001 16.14899999 + 243 81 2 0.5564 14.17200000 10.48800000 15.09800001 + 244 82 1 -1.1128 13.22600000 8.43800000 20.80100001 + 245 82 2 0.5564 14.04300000 8.99600000 19.29500001 + 246 82 2 0.5564 14.66100001 7.80200000 22.09300000 + 247 83 1 -1.1128 10.17300001 10.96100000 25.87500000 + 248 83 2 0.5564 11.47700000 10.22300000 26.94000000 + 249 83 2 0.5564 11.26900000 10.73800000 24.34299999 + 250 84 1 -1.1128 12.79200000 7.73699999 29.17300001 + 251 84 2 0.5564 12.19899999 6.03799999 29.47499999 + 252 84 2 0.5564 14.42700000 7.44999999 29.61700000 + 253 85 1 -1.1128 15.18000000 19.49800000 3.57800000 + 254 85 2 0.5564 14.88300001 17.59600001 4.08000001 + 255 85 2 0.5564 16.75400001 19.57899999 2.62599999 + 256 86 1 -1.1128 12.51700000 11.09300000 7.70099999 + 257 86 2 0.5564 12.22400001 12.77800000 7.55500000 + 258 86 2 0.5564 11.15000000 10.39299999 7.05700000 + 259 87 1 -1.1128 16.26600000 16.27099999 10.75800001 + 260 87 2 0.5564 16.50700001 15.79500000 12.76800001 + 261 87 2 0.5564 17.72500001 16.97699999 10.29200001 + 262 88 1 -1.1128 14.06900000 18.39900001 18.89700000 + 263 88 2 0.5564 15.51300000 17.52300000 18.15500000 + 264 88 2 0.5564 14.95800001 18.70900000 20.67300000 + 265 89 1 -1.1128 14.09899999 15.48000000 25.51000001 + 266 89 2 0.5564 13.69800000 16.87200001 26.93799999 + 267 89 2 0.5564 12.56700000 15.37900000 24.44400000 + 268 90 1 -1.1128 13.30900000 17.57400000 30.29200001 + 269 90 2 0.5564 14.93700001 16.93399999 30.81000000 + 270 90 2 0.5564 13.96900001 19.49400000 30.01200001 + 271 91 1 -1.1128 18.37099999 23.25699999 0.92500000 + 272 91 2 0.5564 19.47899999 23.48000000 2.32099999 + 273 91 2 0.5564 19.08700001 24.32499999 -0.36900000 + 274 92 1 -1.1128 12.10000000 21.72999999 11.35500000 + 275 92 2 0.5564 13.14100001 22.28700000 12.74300001 + 276 92 2 0.5564 13.46700001 22.23600000 10.24400000 + 277 93 1 -1.1128 12.16300001 23.29000000 23.59699999 + 278 93 2 0.5564 11.32400001 22.73600001 24.94900000 + 279 93 2 0.5564 13.88200000 22.87200001 23.84000001 + 280 94 1 -1.1128 20.17300001 26.76100001 22.62800000 + 281 94 2 0.5564 20.20600001 26.53200001 20.79200000 + 282 94 2 0.5564 21.55600000 25.74200000 23.38899999 + 283 95 1 -1.1128 16.70099999 21.16500000 22.60500000 + 284 95 2 0.5564 18.02800000 20.68600001 23.84799999 + 285 95 2 0.5564 17.10400000 22.86599999 21.94900000 + 286 96 1 -1.1128 11.39100000 26.46099999 33.70499999 + 287 96 2 0.5564 9.84099999 27.19199999 34.04800001 + 288 96 2 0.5564 11.77599999 25.53999999 35.24300000 + 289 97 1 -1.1128 9.89799999 25.98900000 4.55300001 + 290 97 2 0.5564 8.90199999 26.13099999 6.03900000 + 291 97 2 0.5564 10.28700000 27.80600000 4.37600000 + 292 98 1 -1.1128 14.30800000 26.96000000 10.87699999 + 293 98 2 0.5564 15.30200000 27.40500000 12.17300001 + 294 98 2 0.5564 15.46300000 26.15100000 9.63299999 + 295 99 1 -1.1128 13.43300000 22.96000000 16.90400000 + 296 99 2 0.5564 13.40900000 24.13099999 18.13200000 + 297 99 2 0.5564 13.62400000 21.19100001 17.52000000 + 298 100 1 -1.1128 16.40900000 26.76800001 26.87500000 + 299 100 2 0.5564 17.58999999 26.98700001 25.43100000 + 300 100 2 0.5564 14.75099999 27.70300000 26.23000000 + 301 101 1 -1.1128 14.40500000 22.73299999 29.89200000 + 302 101 2 0.5564 15.42300000 23.07900000 28.49400000 + 303 101 2 0.5564 12.82600001 23.25900000 29.41600000 + 304 102 1 -1.1128 6.90500001 29.40800000 0.74900000 + 305 102 2 0.5564 8.42800001 30.48300000 1.56700000 + 306 102 2 0.5564 6.35300001 30.81400000 -0.44400000 + 307 103 1 -1.1128 9.18899999 34.15900001 6.50900000 + 308 103 2 0.5564 10.19800000 34.19300000 8.00199999 + 309 103 2 0.5564 9.89000001 35.69200000 5.78500000 + 310 104 1 -1.1128 14.25600001 32.31600000 9.36900000 + 311 104 2 0.5564 15.73299999 32.86700000 9.48599999 + 312 104 2 0.5564 14.75400001 30.67000000 10.09000000 + 313 105 1 -1.1128 14.71400000 30.84099999 16.51600000 + 314 105 2 0.5564 13.74799999 29.55099999 17.27900000 + 315 105 2 0.5564 13.21800000 31.93300001 16.61400001 + 316 106 1 -1.1128 18.40900000 33.64100000 20.61100001 + 317 106 2 0.5564 19.60099999 32.27400001 21.11500000 + 318 106 2 0.5564 17.36000001 32.65500000 19.51799999 + 319 107 1 -1.1128 16.06200001 28.63800000 32.20700000 + 320 107 2 0.5564 14.64800000 27.95800001 33.25299999 + 321 107 2 0.5564 15.75200000 28.01400000 30.52199999 + 322 108 1 -1.1128 16.20000000 30.89499999 1.47300000 + 323 108 2 0.5564 16.62599999 29.96800000 -0.13000001 + 324 108 2 0.5564 17.16699999 29.83300001 2.92699999 + 325 109 1 -1.1128 20.27799999 3.52899999 6.04800001 + 326 109 2 0.5564 20.97699999 3.61100001 4.57500001 + 327 109 2 0.5564 21.31200000 4.51300000 7.25100000 + 328 110 1 -1.1128 23.07900000 5.77800000 10.40800000 + 329 110 2 0.5564 24.65000001 6.25900000 10.83800000 + 330 110 2 0.5564 22.34200001 7.60900000 10.17799999 + 331 111 1 -1.1128 19.58100000 2.03099999 12.10999999 + 332 111 2 0.5564 19.03900000 1.08200000 10.44000000 + 333 111 2 0.5564 21.14100001 2.99100001 11.85100001 + 334 112 1 -1.1128 22.00500001 3.22300000 23.17799999 + 335 112 2 0.5564 21.42899999 4.09000000 24.55399999 + 336 112 2 0.5564 20.65400001 1.79099999 22.71100001 + 337 113 1 -1.1128 16.63000000 6.42200000 23.79200000 + 338 113 2 0.5564 16.21900000 4.80400001 24.40600001 + 339 113 2 0.5564 17.06600001 7.12799999 25.28199999 + 340 114 1 -1.1128 21.67599999 5.56400001 28.15800000 + 341 114 2 0.5564 20.65799999 6.71700000 29.18499999 + 342 114 2 0.5564 23.41300000 5.82800000 28.99600000 + 343 115 1 -1.1128 15.25699999 5.26500000 5.62599999 + 344 115 2 0.5564 16.91400000 4.51900000 5.48999999 + 345 115 2 0.5564 15.14400000 6.15000000 6.97200000 + 346 116 1 -1.1128 20.13700000 11.08200000 10.43700000 + 347 116 2 0.5564 20.02100000 10.94700000 8.73299999 + 348 116 2 0.5564 21.02500000 12.55500000 10.85300000 + 349 117 1 -1.1128 23.08900000 14.62700000 12.43700000 + 350 117 2 0.5564 24.71600000 15.25400000 12.73600001 + 351 117 2 0.5564 23.28400000 13.22799999 13.65300000 + 352 118 1 -1.1128 24.08300000 12.64900000 22.56600000 + 353 118 2 0.5564 22.39700000 12.66300000 23.04199999 + 354 118 2 0.5564 24.90100001 13.85100001 23.56499999 + 355 119 1 -1.1128 17.86500001 7.90899999 30.03600000 + 356 119 2 0.5564 17.50900000 8.04499999 31.98200000 + 357 119 2 0.5564 18.07800000 9.58200001 29.31799999 + 358 120 1 -1.1128 18.82400000 8.48599999 0.10400000 + 359 120 2 0.5564 19.99700000 10.19100001 -0.05700000 + 360 120 2 0.5564 17.07700001 8.99800001 0.77900001 + 361 121 1 -1.1128 20.12200000 9.14300000 5.34299999 + 362 121 2 0.5564 19.37300000 8.81899999 3.82100000 + 363 121 2 0.5564 21.99800001 8.77599999 5.12799999 + 364 122 1 -1.1128 16.41300000 14.45900000 5.85499999 + 365 122 2 0.5564 15.53599999 13.00700000 5.23899999 + 366 122 2 0.5564 16.00599999 14.72500001 7.73699999 + 367 123 1 -1.1128 17.56099999 15.06600001 15.65400001 + 368 123 2 0.5564 17.57500001 13.39800000 16.05500001 + 369 123 2 0.5564 18.97800000 15.82800000 16.39999999 + 370 124 1 -1.1128 26.37400001 17.04700000 24.81700000 + 371 124 2 0.5564 27.98300000 17.09800001 25.63200001 + 372 124 2 0.5564 25.62900001 18.75099999 24.91900001 + 373 125 1 -1.1128 19.78400000 12.96000000 28.70600000 + 374 125 2 0.5564 21.66199999 13.05500001 28.87100000 + 375 125 2 0.5564 19.54500000 14.06999999 27.14300000 + 376 126 1 -1.1128 17.89099999 16.73299999 32.49900000 + 377 126 2 0.5564 18.32700000 15.24000000 31.27700001 + 378 126 2 0.5564 18.63299999 18.33500001 31.69300001 + 379 127 1 -1.1128 23.73299999 23.02399999 1.66300000 + 380 127 2 0.5564 24.80000000 24.05199999 2.77599999 + 381 127 2 0.5564 24.69300001 22.61800001 0.19800000 + 382 128 1 -1.1128 20.78900000 18.44000000 9.44299999 + 383 128 2 0.5564 20.76599999 17.25699999 7.88100000 + 384 128 2 0.5564 21.89600000 17.34500000 10.38500001 + 385 129 1 -1.1128 21.57400000 17.49299999 17.83800000 + 386 129 2 0.5564 20.59699999 18.95500001 17.21800000 + 387 129 2 0.5564 22.53800000 16.87400000 16.25100000 + 388 130 1 -1.1128 19.16800000 14.74799999 24.13099999 + 389 130 2 0.5564 19.71100001 16.39000000 23.71199999 + 390 130 2 0.5564 17.42899999 14.69500000 24.40300001 + 391 131 1 -1.1128 22.14899999 20.19800000 24.97699999 + 392 131 2 0.5564 21.63900001 20.92400000 26.48599999 + 393 131 2 0.5564 22.65600000 21.65700001 24.41099999 + 394 132 1 -1.1128 20.56499999 20.79200000 29.60000001 + 395 132 2 0.5564 22.26399999 20.40900000 30.21399999 + 396 132 2 0.5564 20.54800000 22.40800000 30.59699999 + 397 133 1 -1.1128 20.80200000 26.54699999 9.61499999 + 398 133 2 0.5564 20.09899999 27.98399999 8.33800001 + 399 133 2 0.5564 21.27700001 27.53900001 11.32499999 + 400 134 1 -1.1128 16.28300000 23.58900001 7.77900001 + 401 134 2 0.5564 16.09300000 21.97300001 6.71199999 + 402 134 2 0.5564 17.90100001 22.97100000 8.15400000 + 403 135 1 -1.1128 18.46900000 29.79799999 13.56800001 + 404 135 2 0.5564 19.71199999 31.21600000 13.50600000 + 405 135 2 0.5564 16.87200001 30.34299999 14.39600001 + 406 136 1 -1.1128 18.79000001 21.71199999 16.06000000 + 407 136 2 0.5564 19.87800000 23.09000000 16.48500001 + 408 136 2 0.5564 17.20100000 22.32600000 15.81899999 + 409 137 1 -1.1128 21.74700001 26.08400001 16.34900001 + 410 137 2 0.5564 20.78300001 27.02100000 15.29999999 + 411 137 2 0.5564 22.70499999 27.32799999 17.20600001 + 412 138 1 -1.1128 20.76899999 26.21100000 32.05000000 + 413 138 2 0.5564 21.48800000 27.40399999 33.32799999 + 414 138 2 0.5564 18.98900000 26.71000000 32.14500001 + 415 139 1 -1.1128 19.82000000 29.18100001 5.55900000 + 416 139 2 0.5564 20.99100001 29.50900000 4.10900001 + 417 139 2 0.5564 19.43100000 31.01800000 6.22099999 + 418 140 1 -1.1128 19.24000000 33.86700000 7.99300000 + 419 140 2 0.5564 19.10700000 35.03900000 6.60399999 + 420 140 2 0.5564 20.69700001 33.67100000 9.06299999 + 421 141 1 -1.1128 22.51099999 34.97600001 15.79300000 + 422 141 2 0.5564 23.71600000 36.16300001 16.60300000 + 423 141 2 0.5564 21.69900000 36.15000000 14.46700001 + 424 142 1 -1.1128 22.62199999 30.28400000 19.06900000 + 425 142 2 0.5564 22.04899999 31.35100000 17.72500001 + 426 142 2 0.5564 24.41099999 30.77299999 19.57599999 + 427 143 1 -1.1128 18.63900001 33.61100001 28.36900000 + 428 143 2 0.5564 18.22600000 32.15900001 29.10300000 + 429 143 2 0.5564 19.90600000 33.00800000 27.15800000 + 430 144 1 -1.1128 22.52000000 1.32499999 31.92600001 + 431 144 2 0.5564 22.80300000 2.66800001 30.79600000 + 432 144 2 0.5564 21.04499999 0.42499999 31.12200000 + 433 145 1 -1.1128 21.75400001 3.78900000 1.15900001 + 434 145 2 0.5564 22.08499999 2.78500000 -0.18000000 + 435 145 2 0.5564 20.85000000 5.17500000 0.61000000 + 436 146 1 -1.1128 28.45699999 5.53900001 12.13300000 + 437 146 2 0.5564 29.48900001 4.39000000 11.18200000 + 438 146 2 0.5564 29.16100000 7.13099999 12.58700000 + 439 147 1 -1.1128 22.49500000 5.96599999 17.32400001 + 440 147 2 0.5564 24.37700000 5.37900000 17.39299999 + 441 147 2 0.5564 21.90600000 5.49100000 18.85700000 + 442 148 1 -1.1128 28.12799999 3.30400000 22.28700000 + 443 148 2 0.5564 28.12300001 2.99899999 20.49100000 + 444 148 2 0.5564 26.53299999 3.35500000 22.87600001 + 445 149 1 -1.1128 28.37800001 10.45500000 27.26600000 + 446 149 2 0.5564 30.01900001 10.29200001 28.05100000 + 447 149 2 0.5564 28.63500000 10.03900000 25.46300000 + 448 150 1 -1.1128 27.03099999 8.35300001 34.80600000 + 449 150 2 0.5564 26.11600001 9.98399999 34.57100001 + 450 150 2 0.5564 28.68500000 8.95100001 34.73900000 + 451 151 1 -1.1128 24.95100001 8.15999999 4.45399999 + 452 151 2 0.5564 25.93000001 9.61600000 5.15999999 + 453 151 2 0.5564 25.94700000 7.99400001 2.72400000 + 454 152 1 -1.1128 26.93700001 12.43599999 6.86900001 + 455 152 2 0.5564 25.49200001 13.28400000 6.70799999 + 456 152 2 0.5564 27.68900000 13.33199999 8.26600000 + 457 153 1 -1.1128 23.36500000 11.21399999 16.93300001 + 458 153 2 0.5564 22.24700000 9.74399999 16.78900000 + 459 153 2 0.5564 23.26399999 12.03500000 18.53900001 + 460 154 1 -1.1128 28.32099999 8.75900000 22.15800000 + 461 154 2 0.5564 27.66199999 6.89499999 22.48200001 + 462 154 2 0.5564 26.97100000 9.71000000 21.90199999 + 463 155 1 -1.1128 27.07100000 6.10900001 29.55500000 + 464 155 2 0.5564 27.59100000 7.66300000 28.85700000 + 465 155 2 0.5564 27.30400000 6.32000001 31.26100000 + 466 156 1 -1.1128 22.47400000 11.70400001 34.63999999 + 467 156 2 0.5564 22.75200000 13.30400000 35.58400000 + 468 156 2 0.5564 22.84000001 12.09000000 33.03000001 + 469 157 1 -1.1128 21.65600000 14.97100000 5.61499999 + 470 157 2 0.5564 21.68999999 15.86000000 3.97699999 + 471 157 2 0.5564 19.96400000 14.22500000 5.77400000 + 472 158 1 -1.1128 28.53900001 21.49200001 9.82000000 + 473 158 2 0.5564 27.28800001 22.18100001 8.68800000 + 474 158 2 0.5564 28.06500000 22.42000000 11.60200000 + 475 159 1 -1.1128 28.36399999 16.01999999 11.10900001 + 476 159 2 0.5564 30.03300000 16.64900000 12.08900000 + 477 159 2 0.5564 28.45600000 17.44000000 10.08200000 + 478 160 1 -1.1128 0.05400000 13.68600001 18.10300000 + 479 160 2 0.5564 -1.71400000 12.92800000 18.84099999 + 480 160 2 0.5564 1.00800000 12.42899999 17.38300000 + 481 161 1 -1.1128 24.63600001 12.89400001 29.95700000 + 482 161 2 0.5564 25.90600000 13.91400000 31.18300000 + 483 161 2 0.5564 25.64100000 11.60900000 29.16200000 + 484 162 1 -1.1128 21.54800000 17.25000000 0.74900000 + 485 162 2 0.5564 21.84300000 19.02600000 0.90500001 + 486 162 2 0.5564 20.38500001 16.71600000 -0.69700001 + 487 163 1 -1.1128 26.09499999 27.27400001 4.52000000 + 488 163 2 0.5564 27.88900000 26.45800000 4.50500000 + 489 163 2 0.5564 25.64800000 26.96999999 6.16500000 + 490 164 1 -1.1128 23.61000000 22.51499999 8.00800000 + 491 164 2 0.5564 22.65300000 21.18700000 8.73900000 + 492 164 2 0.5564 22.28600000 24.09499999 8.44400000 + 493 165 1 -1.1128 27.35500000 18.92900000 18.18000000 + 494 165 2 0.5564 27.20000000 20.34900001 17.15500000 + 495 165 2 0.5564 25.57899999 18.32200000 18.77000000 + 496 166 1 -1.1128 26.76500001 23.63299999 14.44400000 + 497 166 2 0.5564 27.44100000 25.29800000 13.65099999 + 498 166 2 0.5564 25.08600000 24.25600001 14.74900000 + 499 167 1 -1.1128 31.47800001 20.76899999 20.98600000 + 500 167 2 0.5564 30.44000000 22.50900000 21.13499999 + 501 167 2 0.5564 30.56700000 19.65600000 20.04300000 + 502 168 1 -1.1128 24.81199999 20.41200000 32.66800001 + 503 168 2 0.5564 26.24199999 21.47800001 31.87400000 + 504 168 2 0.5564 25.78699999 19.02300001 33.15800000 + 505 169 1 -1.1128 22.10500001 29.07600000 0.92800000 + 506 169 2 0.5564 23.29599999 27.92299999 1.73900000 + 507 169 2 0.5564 22.62300000 30.99400001 0.88200000 + 508 170 1 -1.1128 29.57199999 31.25600001 8.62599999 + 509 170 2 0.5564 30.79500000 30.20299999 7.73600001 + 510 170 2 0.5564 28.27700001 31.51900000 7.25999999 + 511 171 1 -1.1128 31.81700000 34.84300000 18.28300000 + 512 171 2 0.5564 32.43800000 34.38899999 16.47400000 + 513 171 2 0.5564 32.74300001 36.42200000 18.34100000 + 514 172 1 -1.1128 27.91500001 25.60099999 19.03300000 + 515 172 2 0.5564 29.35800000 26.56099999 19.19000000 + 516 172 2 0.5564 28.14800001 24.42899999 17.53000000 + 517 173 1 -1.1128 24.54800000 24.65400001 24.02500000 + 518 173 2 0.5564 25.52800001 25.63500000 22.82400000 + 519 173 2 0.5564 25.29999999 25.20000000 25.64500000 + 520 174 1 -1.1128 28.53999999 22.92200000 30.37000000 + 521 174 2 0.5564 27.41399999 24.09600000 29.78100000 + 522 174 2 0.5564 29.67400000 23.91400000 31.87299999 + 523 175 1 -1.1128 24.96900001 33.62300000 1.01400000 + 524 175 2 0.5564 26.52100001 33.05800000 1.51799999 + 525 175 2 0.5564 24.99000000 34.32200000 -0.68299999 + 526 176 1 -1.1128 23.07500000 32.17099999 11.32400001 + 527 176 2 0.5564 23.31600000 32.77500000 13.09700000 + 528 176 2 0.5564 24.46000001 33.20299999 10.66199999 + 529 177 1 -1.1128 27.49699999 2.73600001 17.22400001 + 530 177 2 0.5564 28.39700000 3.41500000 15.71500001 + 531 177 2 0.5564 28.23400001 1.23300000 17.41200000 + 532 178 1 -1.1128 26.36900000 33.06000000 22.07700001 + 533 178 2 0.5564 26.17000001 34.74600000 22.26399999 + 534 178 2 0.5564 27.59200000 32.40399999 23.32099999 + 535 179 1 -1.1128 30.22099999 30.95000000 25.84300000 + 536 179 2 0.5564 30.30500000 29.03799999 26.20800000 + 537 179 2 0.5564 30.36300001 31.97900000 27.41399999 + 538 180 1 -1.1128 24.97300001 26.73200000 28.60700001 + 539 180 2 0.5564 25.38500001 28.36900000 29.24800000 + 540 180 2 0.5564 23.33000000 26.59699999 29.23400001 + 541 181 1 -1.1128 32.16500000 4.85700000 2.25800000 + 542 181 2 0.5564 32.41700001 6.19500001 1.15700000 + 543 181 2 0.5564 32.61499999 3.72700000 1.11200000 + 544 182 1 -1.1128 28.06699999 3.53299999 5.21699999 + 545 182 2 0.5564 26.96000000 4.44699999 4.15800000 + 546 182 2 0.5564 29.87500000 3.86300000 4.44800000 + 547 183 1 -1.1128 33.27900000 2.78200000 13.02800000 + 548 183 2 0.5564 33.70799999 3.95500001 11.81700000 + 549 183 2 0.5564 33.65600000 3.54500000 14.63100000 + 550 184 1 -1.1128 34.27799999 4.94400001 17.49200001 + 551 184 2 0.5564 33.43800000 6.56300000 17.87600001 + 552 184 2 0.5564 34.90600000 4.45200000 18.99499999 + 553 185 1 -1.1128 32.36300001 1.90800001 26.09199999 + 554 185 2 0.5564 31.94099999 1.68299999 24.26800000 + 555 185 2 0.5564 33.85000000 1.39000000 26.90400000 + 556 186 1 -1.1128 27.98200000 0.41799999 28.24100000 + 557 186 2 0.5564 27.51600000 2.08000001 28.30900000 + 558 186 2 0.5564 29.59300001 0.17600000 27.29900001 + 559 187 1 -1.1128 28.84500000 14.67200001 2.72400000 + 560 187 2 0.5564 27.96299999 13.93000001 4.13900000 + 561 187 2 0.5564 30.38599999 15.71400000 3.37900000 + 562 188 1 -1.1128 28.08300000 10.61800001 14.29800000 + 563 188 2 0.5564 28.62300000 12.15999999 13.29300000 + 564 188 2 0.5564 26.48599999 11.01500000 15.37900000 + 565 189 1 -1.1128 33.86700000 10.54500000 13.30600001 + 566 189 2 0.5564 35.16500000 9.61200000 13.81000000 + 567 189 2 0.5564 33.61499999 10.27000001 11.51300000 + 568 190 1 -1.1128 31.79000001 9.69600000 18.22300000 + 569 190 2 0.5564 30.48400000 9.33400000 19.42100001 + 570 190 2 0.5564 30.83399999 10.09600000 16.92900000 + 571 191 1 -1.1128 30.14100001 15.00599999 21.53200001 + 572 191 2 0.5564 28.56499999 15.59399999 22.09899999 + 573 191 2 0.5564 30.94200000 14.25299999 23.07700001 + 574 192 1 -1.1128 32.79799999 10.73200000 30.67999999 + 575 192 2 0.5564 34.07300001 9.52800001 30.79900000 + 576 192 2 0.5564 32.99100001 11.51200000 28.98300000 + 577 193 1 -1.1128 33.65200000 16.26500000 5.08600000 + 578 193 2 0.5564 35.39900001 16.23899999 4.72999999 + 579 193 2 0.5564 33.50300001 17.93900000 5.63100000 + 580 194 1 -1.1128 31.94700000 10.79900000 7.94300000 + 581 194 2 0.5564 29.89400001 10.54900000 7.61899999 + 582 194 2 0.5564 32.27099999 12.41399999 7.07500000 + 583 195 1 -1.1128 0.32900000 15.51600000 11.74600000 + 584 195 2 0.5564 -0.44600001 14.24900001 12.93900000 + 585 195 2 0.5564 -0.68500000 17.01800000 11.93500000 + 586 196 1 -1.1128 4.26200000 19.16500000 14.30800000 + 587 196 2 0.5564 3.57899999 17.69100000 14.91999999 + 588 196 2 0.5564 5.72299999 19.18300000 15.20400000 + 589 197 1 -1.1128 32.99499999 13.54600001 25.94800001 + 590 197 2 0.5564 32.16699999 15.06000000 26.78699999 + 591 197 2 0.5564 34.42499999 13.80000000 25.00700000 + 592 198 1 -1.1128 1.77299999 13.52400000 34.03700001 + 593 198 2 0.5564 0.22700001 14.40900000 33.44600001 + 594 198 2 0.5564 2.16699999 14.67000000 35.51099999 + 595 199 1 -1.1128 33.02900000 20.52899999 7.24700000 + 596 199 2 0.5564 34.38800000 21.41399999 8.00300000 + 597 199 2 0.5564 31.45100000 20.83100000 8.18200000 + 598 200 1 -1.1128 2.03700001 24.25000000 10.25100000 + 599 200 2 0.5564 3.74300001 25.00800000 9.87600001 + 600 200 2 0.5564 1.89400001 25.04300000 11.90300000 + 601 201 1 -1.1128 32.75300000 19.25900000 13.97600001 + 602 201 2 0.5564 32.79200000 20.88600000 13.79200000 + 603 201 2 0.5564 34.33400000 18.79900000 14.97600001 + 604 202 1 -1.1128 0.39600001 18.67300000 18.69900000 + 605 202 2 0.5564 -1.21100000 18.95000000 19.12700001 + 606 202 2 0.5564 0.46900000 16.97699999 18.43599999 + 607 203 1 -1.1128 30.85499999 18.37000000 27.95899999 + 608 203 2 0.5564 29.75900000 19.68100000 28.68999999 + 609 203 2 0.5564 32.10300000 19.47700000 26.76300000 + 610 204 1 -1.1128 27.72299999 15.99200000 33.09100001 + 611 204 2 0.5564 29.39000000 16.42300000 32.19199999 + 612 204 2 0.5564 27.80100001 15.85899999 34.80400001 + 613 205 1 -1.1128 31.06800000 27.89499999 3.34800000 + 614 205 2 0.5564 32.51700000 27.82500000 4.61000000 + 615 205 2 0.5564 31.52899999 29.45900000 2.32400001 + 616 206 1 -1.1128 35.03900000 28.00800000 6.66300000 + 617 206 2 0.5564 35.96599999 26.93399999 7.68299999 + 618 206 2 0.5564 36.05500001 28.33600000 5.33600000 + 619 207 1 -1.1128 29.35600001 28.19599999 13.02500000 + 620 207 2 0.5564 29.20999999 29.33500001 14.58900001 + 621 207 2 0.5564 28.87400000 29.62900001 11.86700000 + 622 208 1 -1.1128 32.38599999 28.43400000 18.96100000 + 623 208 2 0.5564 33.36799999 28.57400000 20.41099999 + 624 208 2 0.5564 33.41000001 27.40600001 17.94900000 + 625 209 1 -1.1128 30.89799999 25.39000000 25.79900000 + 626 209 2 0.5564 32.36900000 25.91299999 24.58000000 + 627 209 2 0.5564 31.31700001 24.07500000 27.02900000 + 628 210 1 -1.1128 32.25900000 25.61100001 33.10400000 + 629 210 2 0.5564 32.23800001 25.73600001 34.80600000 + 630 210 2 0.5564 33.91999999 25.04199999 32.77500000 + 631 211 1 -1.1128 30.29000000 32.64500000 1.34100000 + 632 211 2 0.5564 29.94900000 32.79300000 -0.43000000 + 633 211 2 0.5564 31.76199999 33.34000000 1.84700001 + 634 212 1 -1.1128 25.53599999 34.23499999 6.46900000 + 635 212 2 0.5564 25.71600000 36.05900001 6.65099999 + 636 212 2 0.5564 25.28300000 33.86599999 4.89499999 + 637 213 1 -1.1128 31.67400000 33.16100000 13.10599999 + 638 213 2 0.5564 31.79300000 34.86300000 13.28100001 + 639 213 2 0.5564 30.42499999 32.92800000 11.78300001 + 640 214 1 -1.1128 33.84400001 32.66800001 22.29599999 + 641 214 2 0.5564 32.75000000 32.23400001 23.52400000 + 642 214 2 0.5564 32.91700000 32.87500000 20.73600001 + 643 215 1 -1.1128 31.60300000 30.54200000 30.80499999 + 644 215 2 0.5564 33.45100000 30.80400001 30.46799999 + 645 215 2 0.5564 31.57500001 28.81599999 31.75600000 + 646 216 1 -1.1128 26.29500001 31.23499999 30.59900000 + 647 216 2 0.5564 27.83399999 30.51499999 30.60700001 + 648 216 2 0.5564 26.36200000 32.91999999 29.85600000 + +Bonds + + 1 1 1 2 + 2 1 1 3 + 3 1 4 5 + 4 1 4 6 + 5 1 7 8 + 6 1 7 9 + 7 1 10 11 + 8 1 10 12 + 9 1 13 14 + 10 1 13 15 + 11 1 16 17 + 12 1 16 18 + 13 1 19 20 + 14 1 19 21 + 15 1 22 23 + 16 1 22 24 + 17 1 25 26 + 18 1 25 27 + 19 1 28 29 + 20 1 28 30 + 21 1 31 32 + 22 1 31 33 + 23 1 34 35 + 24 1 34 36 + 25 1 37 38 + 26 1 37 39 + 27 1 40 41 + 28 1 40 42 + 29 1 43 44 + 30 1 43 45 + 31 1 46 47 + 32 1 46 48 + 33 1 49 50 + 34 1 49 51 + 35 1 52 53 + 36 1 52 54 + 37 1 55 56 + 38 1 55 57 + 39 1 58 59 + 40 1 58 60 + 41 1 61 62 + 42 1 61 63 + 43 1 64 65 + 44 1 64 66 + 45 1 67 68 + 46 1 67 69 + 47 1 70 71 + 48 1 70 72 + 49 1 73 74 + 50 1 73 75 + 51 1 76 77 + 52 1 76 78 + 53 1 79 80 + 54 1 79 81 + 55 1 82 83 + 56 1 82 84 + 57 1 85 86 + 58 1 85 87 + 59 1 88 89 + 60 1 88 90 + 61 1 91 92 + 62 1 91 93 + 63 1 94 95 + 64 1 94 96 + 65 1 97 98 + 66 1 97 99 + 67 1 100 101 + 68 1 100 102 + 69 1 103 104 + 70 1 103 105 + 71 1 106 107 + 72 1 106 108 + 73 1 109 110 + 74 1 109 111 + 75 1 112 113 + 76 1 112 114 + 77 1 115 116 + 78 1 115 117 + 79 1 118 119 + 80 1 118 120 + 81 1 121 122 + 82 1 121 123 + 83 1 124 125 + 84 1 124 126 + 85 1 127 128 + 86 1 127 129 + 87 1 130 131 + 88 1 130 132 + 89 1 133 134 + 90 1 133 135 + 91 1 136 137 + 92 1 136 138 + 93 1 139 140 + 94 1 139 141 + 95 1 142 143 + 96 1 142 144 + 97 1 145 146 + 98 1 145 147 + 99 1 148 149 + 100 1 148 150 + 101 1 151 152 + 102 1 151 153 + 103 1 154 155 + 104 1 154 156 + 105 1 157 158 + 106 1 157 159 + 107 1 160 161 + 108 1 160 162 + 109 1 163 164 + 110 1 163 165 + 111 1 166 167 + 112 1 166 168 + 113 1 169 170 + 114 1 169 171 + 115 1 172 173 + 116 1 172 174 + 117 1 175 176 + 118 1 175 177 + 119 1 178 179 + 120 1 178 180 + 121 1 181 182 + 122 1 181 183 + 123 1 184 185 + 124 1 184 186 + 125 1 187 188 + 126 1 187 189 + 127 1 190 191 + 128 1 190 192 + 129 1 193 194 + 130 1 193 195 + 131 1 196 197 + 132 1 196 198 + 133 1 199 200 + 134 1 199 201 + 135 1 202 203 + 136 1 202 204 + 137 1 205 206 + 138 1 205 207 + 139 1 208 209 + 140 1 208 210 + 141 1 211 212 + 142 1 211 213 + 143 1 214 215 + 144 1 214 216 + 145 1 217 218 + 146 1 217 219 + 147 1 220 221 + 148 1 220 222 + 149 1 223 224 + 150 1 223 225 + 151 1 226 227 + 152 1 226 228 + 153 1 229 230 + 154 1 229 231 + 155 1 232 233 + 156 1 232 234 + 157 1 235 236 + 158 1 235 237 + 159 1 238 239 + 160 1 238 240 + 161 1 241 242 + 162 1 241 243 + 163 1 244 245 + 164 1 244 246 + 165 1 247 248 + 166 1 247 249 + 167 1 250 251 + 168 1 250 252 + 169 1 253 254 + 170 1 253 255 + 171 1 256 257 + 172 1 256 258 + 173 1 259 260 + 174 1 259 261 + 175 1 262 263 + 176 1 262 264 + 177 1 265 266 + 178 1 265 267 + 179 1 268 269 + 180 1 268 270 + 181 1 271 272 + 182 1 271 273 + 183 1 274 275 + 184 1 274 276 + 185 1 277 278 + 186 1 277 279 + 187 1 280 281 + 188 1 280 282 + 189 1 283 284 + 190 1 283 285 + 191 1 286 287 + 192 1 286 288 + 193 1 289 290 + 194 1 289 291 + 195 1 292 293 + 196 1 292 294 + 197 1 295 296 + 198 1 295 297 + 199 1 298 299 + 200 1 298 300 + 201 1 301 302 + 202 1 301 303 + 203 1 304 305 + 204 1 304 306 + 205 1 307 308 + 206 1 307 309 + 207 1 310 311 + 208 1 310 312 + 209 1 313 314 + 210 1 313 315 + 211 1 316 317 + 212 1 316 318 + 213 1 319 320 + 214 1 319 321 + 215 1 322 323 + 216 1 322 324 + 217 1 325 326 + 218 1 325 327 + 219 1 328 329 + 220 1 328 330 + 221 1 331 332 + 222 1 331 333 + 223 1 334 335 + 224 1 334 336 + 225 1 337 338 + 226 1 337 339 + 227 1 340 341 + 228 1 340 342 + 229 1 343 344 + 230 1 343 345 + 231 1 346 347 + 232 1 346 348 + 233 1 349 350 + 234 1 349 351 + 235 1 352 353 + 236 1 352 354 + 237 1 355 356 + 238 1 355 357 + 239 1 358 359 + 240 1 358 360 + 241 1 361 362 + 242 1 361 363 + 243 1 364 365 + 244 1 364 366 + 245 1 367 368 + 246 1 367 369 + 247 1 370 371 + 248 1 370 372 + 249 1 373 374 + 250 1 373 375 + 251 1 376 377 + 252 1 376 378 + 253 1 379 380 + 254 1 379 381 + 255 1 382 383 + 256 1 382 384 + 257 1 385 386 + 258 1 385 387 + 259 1 388 389 + 260 1 388 390 + 261 1 391 392 + 262 1 391 393 + 263 1 394 395 + 264 1 394 396 + 265 1 397 398 + 266 1 397 399 + 267 1 400 401 + 268 1 400 402 + 269 1 403 404 + 270 1 403 405 + 271 1 406 407 + 272 1 406 408 + 273 1 409 410 + 274 1 409 411 + 275 1 412 413 + 276 1 412 414 + 277 1 415 416 + 278 1 415 417 + 279 1 418 419 + 280 1 418 420 + 281 1 421 422 + 282 1 421 423 + 283 1 424 425 + 284 1 424 426 + 285 1 427 428 + 286 1 427 429 + 287 1 430 431 + 288 1 430 432 + 289 1 433 434 + 290 1 433 435 + 291 1 436 437 + 292 1 436 438 + 293 1 439 440 + 294 1 439 441 + 295 1 442 443 + 296 1 442 444 + 297 1 445 446 + 298 1 445 447 + 299 1 448 449 + 300 1 448 450 + 301 1 451 452 + 302 1 451 453 + 303 1 454 455 + 304 1 454 456 + 305 1 457 458 + 306 1 457 459 + 307 1 460 461 + 308 1 460 462 + 309 1 463 464 + 310 1 463 465 + 311 1 466 467 + 312 1 466 468 + 313 1 469 470 + 314 1 469 471 + 315 1 472 473 + 316 1 472 474 + 317 1 475 476 + 318 1 475 477 + 319 1 478 479 + 320 1 478 480 + 321 1 481 482 + 322 1 481 483 + 323 1 484 485 + 324 1 484 486 + 325 1 487 488 + 326 1 487 489 + 327 1 490 491 + 328 1 490 492 + 329 1 493 494 + 330 1 493 495 + 331 1 496 497 + 332 1 496 498 + 333 1 499 500 + 334 1 499 501 + 335 1 502 503 + 336 1 502 504 + 337 1 505 506 + 338 1 505 507 + 339 1 508 509 + 340 1 508 510 + 341 1 511 512 + 342 1 511 513 + 343 1 514 515 + 344 1 514 516 + 345 1 517 518 + 346 1 517 519 + 347 1 520 521 + 348 1 520 522 + 349 1 523 524 + 350 1 523 525 + 351 1 526 527 + 352 1 526 528 + 353 1 529 530 + 354 1 529 531 + 355 1 532 533 + 356 1 532 534 + 357 1 535 536 + 358 1 535 537 + 359 1 538 539 + 360 1 538 540 + 361 1 541 542 + 362 1 541 543 + 363 1 544 545 + 364 1 544 546 + 365 1 547 548 + 366 1 547 549 + 367 1 550 551 + 368 1 550 552 + 369 1 553 554 + 370 1 553 555 + 371 1 556 557 + 372 1 556 558 + 373 1 559 560 + 374 1 559 561 + 375 1 562 563 + 376 1 562 564 + 377 1 565 566 + 378 1 565 567 + 379 1 568 569 + 380 1 568 570 + 381 1 571 572 + 382 1 571 573 + 383 1 574 575 + 384 1 574 576 + 385 1 577 578 + 386 1 577 579 + 387 1 580 581 + 388 1 580 582 + 389 1 583 584 + 390 1 583 585 + 391 1 586 587 + 392 1 586 588 + 393 1 589 590 + 394 1 589 591 + 395 1 592 593 + 396 1 592 594 + 397 1 595 596 + 398 1 595 597 + 399 1 598 599 + 400 1 598 600 + 401 1 601 602 + 402 1 601 603 + 403 1 604 605 + 404 1 604 606 + 405 1 607 608 + 406 1 607 609 + 407 1 610 611 + 408 1 610 612 + 409 1 613 614 + 410 1 613 615 + 411 1 616 617 + 412 1 616 618 + 413 1 619 620 + 414 1 619 621 + 415 1 622 623 + 416 1 622 624 + 417 1 625 626 + 418 1 625 627 + 419 1 628 629 + 420 1 628 630 + 421 1 631 632 + 422 1 631 633 + 423 1 634 635 + 424 1 634 636 + 425 1 637 638 + 426 1 637 639 + 427 1 640 641 + 428 1 640 642 + 429 1 643 644 + 430 1 643 645 + 431 1 646 647 + 432 1 646 648 + +Angles + + 1 1 2 1 3 + 2 1 5 4 6 + 3 1 8 7 9 + 4 1 11 10 12 + 5 1 14 13 15 + 6 1 17 16 18 + 7 1 20 19 21 + 8 1 23 22 24 + 9 1 26 25 27 + 10 1 29 28 30 + 11 1 32 31 33 + 12 1 35 34 36 + 13 1 38 37 39 + 14 1 41 40 42 + 15 1 44 43 45 + 16 1 47 46 48 + 17 1 50 49 51 + 18 1 53 52 54 + 19 1 56 55 57 + 20 1 59 58 60 + 21 1 62 61 63 + 22 1 65 64 66 + 23 1 68 67 69 + 24 1 71 70 72 + 25 1 74 73 75 + 26 1 77 76 78 + 27 1 80 79 81 + 28 1 83 82 84 + 29 1 86 85 87 + 30 1 89 88 90 + 31 1 92 91 93 + 32 1 95 94 96 + 33 1 98 97 99 + 34 1 101 100 102 + 35 1 104 103 105 + 36 1 107 106 108 + 37 1 110 109 111 + 38 1 113 112 114 + 39 1 116 115 117 + 40 1 119 118 120 + 41 1 122 121 123 + 42 1 125 124 126 + 43 1 128 127 129 + 44 1 131 130 132 + 45 1 134 133 135 + 46 1 137 136 138 + 47 1 140 139 141 + 48 1 143 142 144 + 49 1 146 145 147 + 50 1 149 148 150 + 51 1 152 151 153 + 52 1 155 154 156 + 53 1 158 157 159 + 54 1 161 160 162 + 55 1 164 163 165 + 56 1 167 166 168 + 57 1 170 169 171 + 58 1 173 172 174 + 59 1 176 175 177 + 60 1 179 178 180 + 61 1 182 181 183 + 62 1 185 184 186 + 63 1 188 187 189 + 64 1 191 190 192 + 65 1 194 193 195 + 66 1 197 196 198 + 67 1 200 199 201 + 68 1 203 202 204 + 69 1 206 205 207 + 70 1 209 208 210 + 71 1 212 211 213 + 72 1 215 214 216 + 73 1 218 217 219 + 74 1 221 220 222 + 75 1 224 223 225 + 76 1 227 226 228 + 77 1 230 229 231 + 78 1 233 232 234 + 79 1 236 235 237 + 80 1 239 238 240 + 81 1 242 241 243 + 82 1 245 244 246 + 83 1 248 247 249 + 84 1 251 250 252 + 85 1 254 253 255 + 86 1 257 256 258 + 87 1 260 259 261 + 88 1 263 262 264 + 89 1 266 265 267 + 90 1 269 268 270 + 91 1 272 271 273 + 92 1 275 274 276 + 93 1 278 277 279 + 94 1 281 280 282 + 95 1 284 283 285 + 96 1 287 286 288 + 97 1 290 289 291 + 98 1 293 292 294 + 99 1 296 295 297 + 100 1 299 298 300 + 101 1 302 301 303 + 102 1 305 304 306 + 103 1 308 307 309 + 104 1 311 310 312 + 105 1 314 313 315 + 106 1 317 316 318 + 107 1 320 319 321 + 108 1 323 322 324 + 109 1 326 325 327 + 110 1 329 328 330 + 111 1 332 331 333 + 112 1 335 334 336 + 113 1 338 337 339 + 114 1 341 340 342 + 115 1 344 343 345 + 116 1 347 346 348 + 117 1 350 349 351 + 118 1 353 352 354 + 119 1 356 355 357 + 120 1 359 358 360 + 121 1 362 361 363 + 122 1 365 364 366 + 123 1 368 367 369 + 124 1 371 370 372 + 125 1 374 373 375 + 126 1 377 376 378 + 127 1 380 379 381 + 128 1 383 382 384 + 129 1 386 385 387 + 130 1 389 388 390 + 131 1 392 391 393 + 132 1 395 394 396 + 133 1 398 397 399 + 134 1 401 400 402 + 135 1 404 403 405 + 136 1 407 406 408 + 137 1 410 409 411 + 138 1 413 412 414 + 139 1 416 415 417 + 140 1 419 418 420 + 141 1 422 421 423 + 142 1 425 424 426 + 143 1 428 427 429 + 144 1 431 430 432 + 145 1 434 433 435 + 146 1 437 436 438 + 147 1 440 439 441 + 148 1 443 442 444 + 149 1 446 445 447 + 150 1 449 448 450 + 151 1 452 451 453 + 152 1 455 454 456 + 153 1 458 457 459 + 154 1 461 460 462 + 155 1 464 463 465 + 156 1 467 466 468 + 157 1 470 469 471 + 158 1 473 472 474 + 159 1 476 475 477 + 160 1 479 478 480 + 161 1 482 481 483 + 162 1 485 484 486 + 163 1 488 487 489 + 164 1 491 490 492 + 165 1 494 493 495 + 166 1 497 496 498 + 167 1 500 499 501 + 168 1 503 502 504 + 169 1 506 505 507 + 170 1 509 508 510 + 171 1 512 511 513 + 172 1 515 514 516 + 173 1 518 517 519 + 174 1 521 520 522 + 175 1 524 523 525 + 176 1 527 526 528 + 177 1 530 529 531 + 178 1 533 532 534 + 179 1 536 535 537 + 180 1 539 538 540 + 181 1 542 541 543 + 182 1 545 544 546 + 183 1 548 547 549 + 184 1 551 550 552 + 185 1 554 553 555 + 186 1 557 556 558 + 187 1 560 559 561 + 188 1 563 562 564 + 189 1 566 565 567 + 190 1 569 568 570 + 191 1 572 571 573 + 192 1 575 574 576 + 193 1 578 577 579 + 194 1 581 580 582 + 195 1 584 583 585 + 196 1 587 586 588 + 197 1 590 589 591 + 198 1 593 592 594 + 199 1 596 595 597 + 200 1 599 598 600 + 201 1 602 601 603 + 202 1 605 604 606 + 203 1 608 607 609 + 204 1 611 610 612 + 205 1 614 613 615 + 206 1 617 616 618 + 207 1 620 619 621 + 208 1 623 622 624 + 209 1 626 625 627 + 210 1 629 628 630 + 211 1 632 631 633 + 212 1 635 634 636 + 213 1 638 637 639 + 214 1 641 640 642 + 215 1 644 643 645 + 216 1 647 646 648 diff --git a/tools/i-pi/examples/lammps/h2o-piglet.8/in.water b/tools/i-pi/examples/lammps/h2o-piglet.8/in.water new file mode 100644 index 000000000..9592d112f --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.8/in.water @@ -0,0 +1,32 @@ +units electron +atom_style full + +#pair_style lj/cut/coul/long 17.01 +pair_style lj/cut/tip4p/long 1 2 1 1 0.278072379 17.007 +#bond_style harmonic +bond_style class2 +angle_style harmonic +#kspace_style pppm 0.0001 +kspace_style pppm/tip4p 0.0001 + +read_data data.water +pair_coeff * * 0 0 +pair_coeff 1 1 0.000295147 5.96946 + +neighbor 2.0 bin + +timestep 0.00025 + +#velocity all create 298.0 2345187 + +#thermo_style multi +#thermo 1 + +#fix 1 all nvt temp 298.0 298.0 30.0 tchain 1 +#fix 1 all nve +fix 1 all ipi piglet_8 32342 unix + +#dump 1 all xyz 25 dump.xyz + +run 100000000 + diff --git a/tools/i-pi/examples/lammps/h2o-piglet.8/input.xml b/tools/i-pi/examples/lammps/h2o-piglet.8/input.xml new file mode 100644 index 000000000..ace4d7f3d --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.8/input.xml @@ -0,0 +1,49 @@ + + + water_298K.pdb + 298 + + + [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, kinetic_cv{kelvin}, potential{kelvin}, pressure_cv{megapascal}] + positions + + 500000 + 32342 + + +
piglet_8
+
+
+ + + +[ + 1.300513766690e-2, 9.078220950722e-6, 8.180522706851e-6, 1.196620464216e-5, 1.108609196233e-4, -8.941338246404e-4, 7.817382329484e-3, -1.206049888192e-2, -5.215913547478e-2, -9.756343549369e-6, 2.131200614277e-7, 2.972243541454e-6, -4.459298032276e-6, 2.177011229810e-7, 4.960251269751e-7, -2.083064995647e-6, -7.004617074013e-6, 2.299410255689e-5, -1.851243089560e-6, -2.972243541454e-6, 1.956991859501e-6, 1.742357040415e-6, -2.082265548357e-6, -1.760771137012e-6, -3.733162998255e-6, -3.711884630223e-5, -3.625483838477e-5, 1.492481502899e-5, 4.459298032276e-6, -1.742357040415e-6, 5.092476869103e-6, 2.033910859306e-6, 5.856365217540e-7, -3.020170664006e-6, 1.868034354962e-5, -5.049113665348e-6, 1.059383195368e-4, -2.177011229810e-7, 2.082265548357e-6, -2.033910859306e-6, 5.467813757620e-5, -6.684243951800e-6, -9.770331146786e-7, -2.159991642805e-4, 4.667176340213e-4, -7.611448585233e-4, -4.960251269751e-7, 1.760771137012e-6, -5.856365217540e-7, 6.684243951800e-6, 6.616597356640e-4, -1.637891086976e-6, -2.056652206438e-4, 2.960975881160e-4, 7.659946833472e-3, 2.083064995647e-6, 3.733162998255e-6, 3.020170664006e-6, 9.770331146786e-7, 1.637891086976e-6, 6.390977118535e-3, -6.246090363901e-5, 5.054994461623e-4, -1.078245092236e-2, 7.004617074013e-6, 3.711884630223e-5, -1.868034354962e-5, 2.159991642805e-4, 2.056652206438e-4, 6.246090363901e-5, 1.730397061203e-1, 1.004651317366e-4, -5.467410217589e-2, -2.299410255689e-5, 3.625483838477e-5, 5.049113665348e-6, -4.667176340213e-4, -2.960975881160e-4, -5.054994461623e-4, -1.004651317366e-4, 1.795223909984e+0, + 8.433361179684e-6, 5.985771048989e-3, 0.000000000000e+0, 1.106850007061e-2, 0.000000000000e+0, 4.737897597685e-3, 0.000000000000e+0, 2.344265458323e-4, 0.000000000000e+0, -5.985771048989e-3, 9.461326310093e-2, 9.829968606252e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -9.829968606252e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.106850007061e-2, 0.000000000000e+0, 0.000000000000e+0, 1.488504300030e-2, 4.214899343968e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.214899343968e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.737897597685e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.514677295700e-2, 8.541932660186e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -8.541932660186e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, -2.344265458323e-4, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.199180080880e-4, 3.798554823700e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -3.798554823700e-3, 1.889231157037e-14, + 8.433361179684e-6, 5.985771048989e-3, 0.000000000000e+0, 1.106850007061e-2, 0.000000000000e+0, 4.737897597685e-3, 0.000000000000e+0, 2.344265458323e-4, 0.000000000000e+0, -5.985771048989e-3, 9.461326310093e-2, 9.829968606252e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -9.829968606252e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.106850007061e-2, 0.000000000000e+0, 0.000000000000e+0, 1.488504300030e-2, 4.214899343968e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.214899343968e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.737897597685e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.514677295700e-2, 8.541932660186e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -8.541932660186e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, -2.344265458323e-4, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.199180080880e-4, 3.798554823700e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -3.798554823700e-3, 1.889231157037e-14, + 8.433361179684e-6, 5.985771048989e-3, 0.000000000000e+0, 1.106850007061e-2, 0.000000000000e+0, 4.737897597685e-3, 0.000000000000e+0, 2.344265458323e-4, 0.000000000000e+0, -5.985771048989e-3, 9.461326310093e-2, 9.829968606252e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -9.829968606252e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.106850007061e-2, 0.000000000000e+0, 0.000000000000e+0, 1.488504300030e-2, 4.214899343968e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.214899343968e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.737897597685e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.514677295700e-2, 8.541932660186e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -8.541932660186e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, -2.344265458323e-4, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.199180080880e-4, 3.798554823700e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -3.798554823700e-3, 1.889231157037e-14, + 8.433361179684e-6, 5.985771048989e-3, 0.000000000000e+0, 1.106850007061e-2, 0.000000000000e+0, 4.737897597685e-3, 0.000000000000e+0, 2.344265458323e-4, 0.000000000000e+0, -5.985771048989e-3, 9.461326310093e-2, 9.829968606252e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -9.829968606252e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.106850007061e-2, 0.000000000000e+0, 0.000000000000e+0, 1.488504300030e-2, 4.214899343968e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.214899343968e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.737897597685e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.514677295700e-2, 8.541932660186e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -8.541932660186e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, -2.344265458323e-4, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.199180080880e-4, 3.798554823700e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -3.798554823700e-3, 1.889231157037e-14, + 8.433361179684e-6, 5.985771048989e-3, 0.000000000000e+0, 1.106850007061e-2, 0.000000000000e+0, 4.737897597685e-3, 0.000000000000e+0, 2.344265458323e-4, 0.000000000000e+0, -5.985771048989e-3, 9.461326310093e-2, 9.829968606252e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -9.829968606252e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.106850007061e-2, 0.000000000000e+0, 0.000000000000e+0, 1.488504300030e-2, 4.214899343968e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.214899343968e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.737897597685e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.514677295700e-2, 8.541932660186e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -8.541932660186e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, -2.344265458323e-4, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.199180080880e-4, 3.798554823700e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -3.798554823700e-3, 1.889231157037e-14, + 8.433361179684e-6, 5.985771048989e-3, 0.000000000000e+0, 1.106850007061e-2, 0.000000000000e+0, 4.737897597685e-3, 0.000000000000e+0, 2.344265458323e-4, 0.000000000000e+0, -5.985771048989e-3, 9.461326310093e-2, 9.829968606252e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -9.829968606252e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.106850007061e-2, 0.000000000000e+0, 0.000000000000e+0, 1.488504300030e-2, 4.214899343968e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.214899343968e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.737897597685e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.514677295700e-2, 8.541932660186e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -8.541932660186e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, -2.344265458323e-4, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.199180080880e-4, 3.798554823700e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -3.798554823700e-3, 1.889231157037e-14, + 8.433361179684e-6, 5.985771048989e-3, 0.000000000000e+0, 1.106850007061e-2, 0.000000000000e+0, 4.737897597685e-3, 0.000000000000e+0, 2.344265458323e-4, 0.000000000000e+0, -5.985771048989e-3, 9.461326310093e-2, 9.829968606252e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -9.829968606252e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -1.106850007061e-2, 0.000000000000e+0, 0.000000000000e+0, 1.488504300030e-2, 4.214899343968e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.214899343968e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -4.737897597685e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 3.514677295700e-2, 8.541932660186e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -8.541932660186e-3, 1.889231157037e-14, 0.000000000000e+0, 0.000000000000e+0, -2.344265458323e-4, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.199180080880e-4, 3.798554823700e-3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, -3.798554823700e-3, 1.889231157037e-14 +] + + +[ + 2.384000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.384000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.384000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.384000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.384000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.384000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.384000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.384000000000e+3, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 0.000000000000e+0, 2.384000000000e+3, + 2.698549372188e+3, -1.368081060516e+3, -3.209415830440e+3, 8.738658365140e+2, 7.268039280880e+2, -2.513005676292e+2, -4.150754888640e+2, -1.260054684948e+3, -6.448165752780e+2, -1.368081060516e+3, 2.965586458180e+4, 5.268769597220e-8, -5.555628715240e+0, 4.972346413560e+2, -5.924916939780e+1, 1.075269335280e+2, -8.318280168320e+1, -1.172679285326e+0, -3.209415830440e+3, 5.268504922560e-8, 2.770155230160e+4, -1.159648313612e+3, -4.345682898960e+3, -1.237408936636e+2, -1.339182640444e+3, 3.034680577260e+0, -4.135056752260e+2, 8.738658365140e+2, -5.555628715240e+0, -1.159648313612e+3, 1.243175060816e+3, 1.278480055046e-8, 5.970691220840e+1, -2.520026819128e+2, -9.347295856760e+2, -4.292224714720e+2, 7.268039280880e+2, 4.972346413560e+2, -4.345682898960e+3, 1.278476746650e-8, 3.151792246900e+3, 1.243472620074e+2, -7.904812686860e+1, 4.762678432220e+2, -1.019900735322e+3, -2.513005676292e+2, -5.924916939780e+1, -1.237408936636e+2, 5.970691220840e+1, 1.243472620074e+2, 5.255446383760e+3, 1.045563267562e-8, -1.725915110312e+2, -4.871461433960e+0, -4.150754888640e+2, 1.075269335280e+2, -1.339182640444e+3, -2.520026819128e+2, -7.904812686860e+1, 1.045503715242e-8, 5.025219194680e+3, 1.095461232690e+1, -4.143625581340e+2, -1.260054684948e+3, -8.318280168320e+1, 3.034680577260e+0, -9.347295856760e+2, 4.762678432220e+2, -1.725915110312e+2, 1.095461232690e+1, 6.411989938480e+4, 3.172261366260e-7, -6.448165752780e+2, -1.172679285326e+0, -4.135056752260e+2, -4.292224714720e+2, -1.019900735322e+3, -4.871461433960e+0, -4.143625581340e+2, 3.172261720880e-7, 6.408010473300e+4, + 2.698549372188e+3, -1.368081060516e+3, -3.209415830440e+3, 8.738658365140e+2, 7.268039280880e+2, -2.513005676292e+2, -4.150754888640e+2, -1.260054684948e+3, -6.448165752780e+2, -1.368081060516e+3, 2.965586458180e+4, 5.268769597220e-8, -5.555628715240e+0, 4.972346413560e+2, -5.924916939780e+1, 1.075269335280e+2, -8.318280168320e+1, -1.172679285326e+0, -3.209415830440e+3, 5.268504922560e-8, 2.770155230160e+4, -1.159648313612e+3, -4.345682898960e+3, -1.237408936636e+2, -1.339182640444e+3, 3.034680577260e+0, -4.135056752260e+2, 8.738658365140e+2, -5.555628715240e+0, -1.159648313612e+3, 1.243175060816e+3, 1.278480055046e-8, 5.970691220840e+1, -2.520026819128e+2, -9.347295856760e+2, -4.292224714720e+2, 7.268039280880e+2, 4.972346413560e+2, -4.345682898960e+3, 1.278476746650e-8, 3.151792246900e+3, 1.243472620074e+2, -7.904812686860e+1, 4.762678432220e+2, -1.019900735322e+3, -2.513005676292e+2, -5.924916939780e+1, -1.237408936636e+2, 5.970691220840e+1, 1.243472620074e+2, 5.255446383760e+3, 1.045563267562e-8, -1.725915110312e+2, -4.871461433960e+0, -4.150754888640e+2, 1.075269335280e+2, -1.339182640444e+3, -2.520026819128e+2, -7.904812686860e+1, 1.045503715242e-8, 5.025219194680e+3, 1.095461232690e+1, -4.143625581340e+2, -1.260054684948e+3, -8.318280168320e+1, 3.034680577260e+0, -9.347295856760e+2, 4.762678432220e+2, -1.725915110312e+2, 1.095461232690e+1, 6.411989938480e+4, 3.172261366260e-7, -6.448165752780e+2, -1.172679285326e+0, -4.135056752260e+2, -4.292224714720e+2, -1.019900735322e+3, -4.871461433960e+0, -4.143625581340e+2, 3.172261720880e-7, 6.408010473300e+4, + 2.698549372188e+3, -1.368081060516e+3, -3.209415830440e+3, 8.738658365140e+2, 7.268039280880e+2, -2.513005676292e+2, -4.150754888640e+2, -1.260054684948e+3, -6.448165752780e+2, -1.368081060516e+3, 2.965586458180e+4, 5.268769597220e-8, -5.555628715240e+0, 4.972346413560e+2, -5.924916939780e+1, 1.075269335280e+2, -8.318280168320e+1, -1.172679285326e+0, -3.209415830440e+3, 5.268504922560e-8, 2.770155230160e+4, -1.159648313612e+3, -4.345682898960e+3, -1.237408936636e+2, -1.339182640444e+3, 3.034680577260e+0, -4.135056752260e+2, 8.738658365140e+2, -5.555628715240e+0, -1.159648313612e+3, 1.243175060816e+3, 1.278480055046e-8, 5.970691220840e+1, -2.520026819128e+2, -9.347295856760e+2, -4.292224714720e+2, 7.268039280880e+2, 4.972346413560e+2, -4.345682898960e+3, 1.278476746650e-8, 3.151792246900e+3, 1.243472620074e+2, -7.904812686860e+1, 4.762678432220e+2, -1.019900735322e+3, -2.513005676292e+2, -5.924916939780e+1, -1.237408936636e+2, 5.970691220840e+1, 1.243472620074e+2, 5.255446383760e+3, 1.045563267562e-8, -1.725915110312e+2, -4.871461433960e+0, -4.150754888640e+2, 1.075269335280e+2, -1.339182640444e+3, -2.520026819128e+2, -7.904812686860e+1, 1.045503715242e-8, 5.025219194680e+3, 1.095461232690e+1, -4.143625581340e+2, -1.260054684948e+3, -8.318280168320e+1, 3.034680577260e+0, -9.347295856760e+2, 4.762678432220e+2, -1.725915110312e+2, 1.095461232690e+1, 6.411989938480e+4, 3.172261366260e-7, -6.448165752780e+2, -1.172679285326e+0, -4.135056752260e+2, -4.292224714720e+2, -1.019900735322e+3, -4.871461433960e+0, -4.143625581340e+2, 3.172261720880e-7, 6.408010473300e+4, + 2.698549372188e+3, -1.368081060516e+3, -3.209415830440e+3, 8.738658365140e+2, 7.268039280880e+2, -2.513005676292e+2, -4.150754888640e+2, -1.260054684948e+3, -6.448165752780e+2, -1.368081060516e+3, 2.965586458180e+4, 5.268769597220e-8, -5.555628715240e+0, 4.972346413560e+2, -5.924916939780e+1, 1.075269335280e+2, -8.318280168320e+1, -1.172679285326e+0, -3.209415830440e+3, 5.268504922560e-8, 2.770155230160e+4, -1.159648313612e+3, -4.345682898960e+3, -1.237408936636e+2, -1.339182640444e+3, 3.034680577260e+0, -4.135056752260e+2, 8.738658365140e+2, -5.555628715240e+0, -1.159648313612e+3, 1.243175060816e+3, 1.278480055046e-8, 5.970691220840e+1, -2.520026819128e+2, -9.347295856760e+2, -4.292224714720e+2, 7.268039280880e+2, 4.972346413560e+2, -4.345682898960e+3, 1.278476746650e-8, 3.151792246900e+3, 1.243472620074e+2, -7.904812686860e+1, 4.762678432220e+2, -1.019900735322e+3, -2.513005676292e+2, -5.924916939780e+1, -1.237408936636e+2, 5.970691220840e+1, 1.243472620074e+2, 5.255446383760e+3, 1.045563267562e-8, -1.725915110312e+2, -4.871461433960e+0, -4.150754888640e+2, 1.075269335280e+2, -1.339182640444e+3, -2.520026819128e+2, -7.904812686860e+1, 1.045503715242e-8, 5.025219194680e+3, 1.095461232690e+1, -4.143625581340e+2, -1.260054684948e+3, -8.318280168320e+1, 3.034680577260e+0, -9.347295856760e+2, 4.762678432220e+2, -1.725915110312e+2, 1.095461232690e+1, 6.411989938480e+4, 3.172261366260e-7, -6.448165752780e+2, -1.172679285326e+0, -4.135056752260e+2, -4.292224714720e+2, -1.019900735322e+3, -4.871461433960e+0, -4.143625581340e+2, 3.172261720880e-7, 6.408010473300e+4, + 2.698549372188e+3, -1.368081060516e+3, -3.209415830440e+3, 8.738658365140e+2, 7.268039280880e+2, -2.513005676292e+2, -4.150754888640e+2, -1.260054684948e+3, -6.448165752780e+2, -1.368081060516e+3, 2.965586458180e+4, 5.268769597220e-8, -5.555628715240e+0, 4.972346413560e+2, -5.924916939780e+1, 1.075269335280e+2, -8.318280168320e+1, -1.172679285326e+0, -3.209415830440e+3, 5.268504922560e-8, 2.770155230160e+4, -1.159648313612e+3, -4.345682898960e+3, -1.237408936636e+2, -1.339182640444e+3, 3.034680577260e+0, -4.135056752260e+2, 8.738658365140e+2, -5.555628715240e+0, -1.159648313612e+3, 1.243175060816e+3, 1.278480055046e-8, 5.970691220840e+1, -2.520026819128e+2, -9.347295856760e+2, -4.292224714720e+2, 7.268039280880e+2, 4.972346413560e+2, -4.345682898960e+3, 1.278476746650e-8, 3.151792246900e+3, 1.243472620074e+2, -7.904812686860e+1, 4.762678432220e+2, -1.019900735322e+3, -2.513005676292e+2, -5.924916939780e+1, -1.237408936636e+2, 5.970691220840e+1, 1.243472620074e+2, 5.255446383760e+3, 1.045563267562e-8, -1.725915110312e+2, -4.871461433960e+0, -4.150754888640e+2, 1.075269335280e+2, -1.339182640444e+3, -2.520026819128e+2, -7.904812686860e+1, 1.045503715242e-8, 5.025219194680e+3, 1.095461232690e+1, -4.143625581340e+2, -1.260054684948e+3, -8.318280168320e+1, 3.034680577260e+0, -9.347295856760e+2, 4.762678432220e+2, -1.725915110312e+2, 1.095461232690e+1, 6.411989938480e+4, 3.172261366260e-7, -6.448165752780e+2, -1.172679285326e+0, -4.135056752260e+2, -4.292224714720e+2, -1.019900735322e+3, -4.871461433960e+0, -4.143625581340e+2, 3.172261720880e-7, 6.408010473300e+4, + 2.698549372188e+3, -1.368081060516e+3, -3.209415830440e+3, 8.738658365140e+2, 7.268039280880e+2, -2.513005676292e+2, -4.150754888640e+2, -1.260054684948e+3, -6.448165752780e+2, -1.368081060516e+3, 2.965586458180e+4, 5.268769597220e-8, -5.555628715240e+0, 4.972346413560e+2, -5.924916939780e+1, 1.075269335280e+2, -8.318280168320e+1, -1.172679285326e+0, -3.209415830440e+3, 5.268504922560e-8, 2.770155230160e+4, -1.159648313612e+3, -4.345682898960e+3, -1.237408936636e+2, -1.339182640444e+3, 3.034680577260e+0, -4.135056752260e+2, 8.738658365140e+2, -5.555628715240e+0, -1.159648313612e+3, 1.243175060816e+3, 1.278480055046e-8, 5.970691220840e+1, -2.520026819128e+2, -9.347295856760e+2, -4.292224714720e+2, 7.268039280880e+2, 4.972346413560e+2, -4.345682898960e+3, 1.278476746650e-8, 3.151792246900e+3, 1.243472620074e+2, -7.904812686860e+1, 4.762678432220e+2, -1.019900735322e+3, -2.513005676292e+2, -5.924916939780e+1, -1.237408936636e+2, 5.970691220840e+1, 1.243472620074e+2, 5.255446383760e+3, 1.045563267562e-8, -1.725915110312e+2, -4.871461433960e+0, -4.150754888640e+2, 1.075269335280e+2, -1.339182640444e+3, -2.520026819128e+2, -7.904812686860e+1, 1.045503715242e-8, 5.025219194680e+3, 1.095461232690e+1, -4.143625581340e+2, -1.260054684948e+3, -8.318280168320e+1, 3.034680577260e+0, -9.347295856760e+2, 4.762678432220e+2, -1.725915110312e+2, 1.095461232690e+1, 6.411989938480e+4, 3.172261366260e-7, -6.448165752780e+2, -1.172679285326e+0, -4.135056752260e+2, -4.292224714720e+2, -1.019900735322e+3, -4.871461433960e+0, -4.143625581340e+2, 3.172261720880e-7, 6.408010473300e+4, + 2.698549372188e+3, -1.368081060516e+3, -3.209415830440e+3, 8.738658365140e+2, 7.268039280880e+2, -2.513005676292e+2, -4.150754888640e+2, -1.260054684948e+3, -6.448165752780e+2, -1.368081060516e+3, 2.965586458180e+4, 5.268769597220e-8, -5.555628715240e+0, 4.972346413560e+2, -5.924916939780e+1, 1.075269335280e+2, -8.318280168320e+1, -1.172679285326e+0, -3.209415830440e+3, 5.268504922560e-8, 2.770155230160e+4, -1.159648313612e+3, -4.345682898960e+3, -1.237408936636e+2, -1.339182640444e+3, 3.034680577260e+0, -4.135056752260e+2, 8.738658365140e+2, -5.555628715240e+0, -1.159648313612e+3, 1.243175060816e+3, 1.278480055046e-8, 5.970691220840e+1, -2.520026819128e+2, -9.347295856760e+2, -4.292224714720e+2, 7.268039280880e+2, 4.972346413560e+2, -4.345682898960e+3, 1.278476746650e-8, 3.151792246900e+3, 1.243472620074e+2, -7.904812686860e+1, 4.762678432220e+2, -1.019900735322e+3, -2.513005676292e+2, -5.924916939780e+1, -1.237408936636e+2, 5.970691220840e+1, 1.243472620074e+2, 5.255446383760e+3, 1.045563267562e-8, -1.725915110312e+2, -4.871461433960e+0, -4.150754888640e+2, 1.075269335280e+2, -1.339182640444e+3, -2.520026819128e+2, -7.904812686860e+1, 1.045503715242e-8, 5.025219194680e+3, 1.095461232690e+1, -4.143625581340e+2, -1.260054684948e+3, -8.318280168320e+1, 3.034680577260e+0, -9.347295856760e+2, 4.762678432220e+2, -1.725915110312e+2, 1.095461232690e+1, 6.411989938480e+4, 3.172261366260e-7, -6.448165752780e+2, -1.172679285326e+0, -4.135056752260e+2, -4.292224714720e+2, -1.019900735322e+3, -4.871461433960e+0, -4.143625581340e+2, 3.172261720880e-7, 6.408010473300e+4 +] + + + + + 0.1 + 298 + +
diff --git a/tools/i-pi/examples/lammps/h2o-piglet.8/water_298K.pdb b/tools/i-pi/examples/lammps/h2o-piglet.8/water_298K.pdb new file mode 100644 index 000000000..e8509c868 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-piglet.8/water_298K.pdb @@ -0,0 +1,650 @@ +CRYST 35.233 35.233 35.233 90.00 90.00 90.00 P 1 1 +ATOM 1 O 1 1 3.846 5.672 1.323 0.00 0.00 0 +ATOM 2 H 1 1 2.979 7.054 0.857 0.00 0.00 0 +ATOM 3 H 1 1 5.525 5.697 0.451 0.00 0.00 0 +ATOM 4 O 1 1 34.557 34.341 3.078 0.00 0.00 0 +ATOM 5 H 1 1 33.722 34.689 4.840 0.00 0.00 0 +ATOM 6 H 1 1 36.029 33.220 3.711 0.00 0.00 0 +ATOM 7 O 1 1 5.591 1.963 13.477 0.00 0.00 0 +ATOM 8 H 1 1 7.265 1.864 13.851 0.00 0.00 0 +ATOM 9 H 1 1 5.009 3.555 13.916 0.00 0.00 0 +ATOM 10 O 1 1 1.060 2.061 21.718 0.00 0.00 0 +ATOM 11 H 1 1 0.757 0.261 21.820 0.00 0.00 0 +ATOM 12 H 1 1 0.213 3.013 23.047 0.00 0.00 0 +ATOM 13 O 1 1 1.200 1.337 29.006 0.00 0.00 0 +ATOM 14 H 1 1 0.818 1.884 30.732 0.00 0.00 0 +ATOM 15 H 1 1 2.883 1.825 29.011 0.00 0.00 0 +ATOM 16 O 1 1 1.331 1.386 34.306 0.00 0.00 0 +ATOM 17 H 1 1 2.392 2.898 34.846 0.00 0.00 0 +ATOM 18 H 1 1 0.814 0.532 35.836 0.00 0.00 0 +ATOM 19 O 1 1 31.451 10.201 0.726 0.00 0.00 0 +ATOM 20 H 1 1 32.282 10.877 -0.750 0.00 0.00 0 +ATOM 21 H 1 1 30.920 11.594 1.677 0.00 0.00 0 +ATOM 22 O 1 1 0.836 10.808 4.298 0.00 0.00 0 +ATOM 23 H 1 1 0.305 10.643 2.793 0.00 0.00 0 +ATOM 24 H 1 1 -0.356 10.334 5.524 0.00 0.00 0 +ATOM 25 O 1 1 34.381 5.979 9.194 0.00 0.00 0 +ATOM 26 H 1 1 33.616 7.673 8.857 0.00 0.00 0 +ATOM 27 H 1 1 35.115 5.260 7.618 0.00 0.00 0 +ATOM 28 O 1 1 33.212 6.480 24.278 0.00 0.00 0 +ATOM 29 H 1 1 31.624 6.908 23.521 0.00 0.00 0 +ATOM 30 H 1 1 32.544 4.990 24.982 0.00 0.00 0 +ATOM 31 O 1 1 1.992 9.002 26.863 0.00 0.00 0 +ATOM 32 H 1 1 1.856 10.175 25.579 0.00 0.00 0 +ATOM 33 H 1 1 0.519 8.099 26.386 0.00 0.00 0 +ATOM 34 O 1 1 2.054 8.660 32.515 0.00 0.00 0 +ATOM 35 H 1 1 2.167 8.727 30.494 0.00 0.00 0 +ATOM 36 H 1 1 2.374 10.513 33.038 0.00 0.00 0 +ATOM 37 O 1 1 3.402 16.639 3.008 0.00 0.00 0 +ATOM 38 H 1 1 4.127 15.872 4.446 0.00 0.00 0 +ATOM 39 H 1 1 2.905 18.339 3.160 0.00 0.00 0 +ATOM 40 O 1 1 4.222 15.444 8.072 0.00 0.00 0 +ATOM 41 H 1 1 5.211 16.756 8.299 0.00 0.00 0 +ATOM 42 H 1 1 2.560 15.492 8.860 0.00 0.00 0 +ATOM 43 O 1 1 2.831 9.246 16.488 0.00 0.00 0 +ATOM 44 H 1 1 2.869 8.023 18.050 0.00 0.00 0 +ATOM 45 H 1 1 3.960 8.467 15.154 0.00 0.00 0 +ATOM 46 O 1 1 5.563 6.003 20.907 0.00 0.00 0 +ATOM 47 H 1 1 4.653 4.638 21.480 0.00 0.00 0 +ATOM 48 H 1 1 6.405 6.208 22.529 0.00 0.00 0 +ATOM 49 O 1 1 2.087 13.370 22.913 0.00 0.00 0 +ATOM 50 H 1 1 2.832 14.804 23.422 0.00 0.00 0 +ATOM 51 H 1 1 1.434 13.509 21.196 0.00 0.00 0 +ATOM 52 O 1 1 3.369 17.886 25.109 0.00 0.00 0 +ATOM 53 H 1 1 3.655 17.200 26.766 0.00 0.00 0 +ATOM 54 H 1 1 4.772 18.977 24.500 0.00 0.00 0 +ATOM 55 O 1 1 34.764 20.803 0.948 0.00 0.00 0 +ATOM 56 H 1 1 35.210 21.267 2.816 0.00 0.00 0 +ATOM 57 H 1 1 35.962 21.726 0.131 0.00 0.00 0 +ATOM 58 O 1 1 2.836 24.178 15.229 0.00 0.00 0 +ATOM 59 H 1 1 2.795 22.346 14.876 0.00 0.00 0 +ATOM 60 H 1 1 2.414 24.115 17.130 0.00 0.00 0 +ATOM 61 O 1 1 33.000 24.481 15.230 0.00 0.00 0 +ATOM 62 H 1 1 34.640 24.804 15.013 0.00 0.00 0 +ATOM 63 H 1 1 32.401 25.764 14.295 0.00 0.00 0 +ATOM 64 O 1 1 0.404 26.779 23.400 0.00 0.00 0 +ATOM 65 H 1 1 1.353 27.248 24.987 0.00 0.00 0 +ATOM 66 H 1 1 1.546 28.050 22.317 0.00 0.00 0 +ATOM 67 O 1 1 34.222 21.380 25.418 0.00 0.00 0 +ATOM 68 H 1 1 35.669 20.151 25.317 0.00 0.00 0 +ATOM 69 H 1 1 32.960 21.180 23.992 0.00 0.00 0 +ATOM 70 O 1 1 33.259 17.438 32.480 0.00 0.00 0 +ATOM 71 H 1 1 33.314 18.782 33.883 0.00 0.00 0 +ATOM 72 H 1 1 32.743 18.181 30.871 0.00 0.00 0 +ATOM 73 O 1 1 4.463 21.979 3.936 0.00 0.00 0 +ATOM 74 H 1 1 5.856 23.084 3.400 0.00 0.00 0 +ATOM 75 H 1 1 3.986 22.180 5.602 0.00 0.00 0 +ATOM 76 O 1 1 6.258 25.851 8.520 0.00 0.00 0 +ATOM 77 H 1 1 5.767 27.693 8.476 0.00 0.00 0 +ATOM 78 H 1 1 7.202 25.506 10.186 0.00 0.00 0 +ATOM 79 O 1 1 0.601 29.737 12.747 0.00 0.00 0 +ATOM 80 H 1 1 -0.685 30.842 12.350 0.00 0.00 0 +ATOM 81 H 1 1 1.336 30.716 14.031 0.00 0.00 0 +ATOM 82 O 1 1 7.563 28.191 24.333 0.00 0.00 0 +ATOM 83 H 1 1 9.201 28.828 24.684 0.00 0.00 0 +ATOM 84 H 1 1 7.381 27.621 22.799 0.00 0.00 0 +ATOM 85 O 1 1 3.653 27.109 27.772 0.00 0.00 0 +ATOM 86 H 1 1 5.126 27.015 26.772 0.00 0.00 0 +ATOM 87 H 1 1 3.031 28.756 27.698 0.00 0.00 0 +ATOM 88 O 1 1 2.596 23.991 32.476 0.00 0.00 0 +ATOM 89 H 1 1 2.879 24.791 30.859 0.00 0.00 0 +ATOM 90 H 1 1 4.003 22.913 32.701 0.00 0.00 0 +ATOM 91 O 1 1 3.083 31.317 3.644 0.00 0.00 0 +ATOM 92 H 1 1 4.133 30.589 2.539 0.00 0.00 0 +ATOM 93 H 1 1 4.218 32.173 5.037 0.00 0.00 0 +ATOM 94 O 1 1 4.661 30.555 9.368 0.00 0.00 0 +ATOM 95 H 1 1 3.184 29.843 10.132 0.00 0.00 0 +ATOM 96 H 1 1 4.358 32.448 9.126 0.00 0.00 0 +ATOM 97 O 1 1 3.465 32.537 15.778 0.00 0.00 0 +ATOM 98 H 1 1 5.072 31.819 15.903 0.00 0.00 0 +ATOM 99 H 1 1 4.055 34.257 15.284 0.00 0.00 0 +ATOM 100 O 1 1 4.215 29.153 20.317 0.00 0.00 0 +ATOM 101 H 1 1 3.658 30.176 18.842 0.00 0.00 0 +ATOM 102 H 1 1 4.959 30.291 21.449 0.00 0.00 0 +ATOM 103 O 1 1 1.126 31.333 28.768 0.00 0.00 0 +ATOM 104 H 1 1 2.395 31.124 29.925 0.00 0.00 0 +ATOM 105 H 1 1 0.768 33.092 28.898 0.00 0.00 0 +ATOM 106 O 1 1 4.881 32.616 32.302 0.00 0.00 0 +ATOM 107 H 1 1 6.588 32.911 31.725 0.00 0.00 0 +ATOM 108 H 1 1 4.486 34.037 33.249 0.00 0.00 0 +ATOM 109 O 1 1 8.962 5.556 0.151 0.00 0.00 0 +ATOM 110 H 1 1 9.652 6.991 0.859 0.00 0.00 0 +ATOM 111 H 1 1 9.173 4.477 1.645 0.00 0.00 0 +ATOM 112 O 1 1 1.833 3.518 5.679 0.00 0.00 0 +ATOM 113 H 1 1 2.889 2.731 6.788 0.00 0.00 0 +ATOM 114 H 1 1 2.789 4.187 4.147 0.00 0.00 0 +ATOM 115 O 1 1 10.510 34.726 13.073 0.00 0.00 0 +ATOM 116 H 1 1 11.920 34.118 11.919 0.00 0.00 0 +ATOM 117 H 1 1 11.295 34.968 14.741 0.00 0.00 0 +ATOM 118 O 1 1 7.212 0.042 22.454 0.00 0.00 0 +ATOM 119 H 1 1 6.924 0.470 24.172 0.00 0.00 0 +ATOM 120 H 1 1 8.319 1.228 21.653 0.00 0.00 0 +ATOM 121 O 1 1 6.365 2.010 27.544 0.00 0.00 0 +ATOM 122 H 1 1 5.954 3.585 26.852 0.00 0.00 0 +ATOM 123 H 1 1 7.758 2.549 28.696 0.00 0.00 0 +ATOM 124 O 1 1 10.833 3.140 30.787 0.00 0.00 0 +ATOM 125 H 1 1 12.697 2.975 30.867 0.00 0.00 0 +ATOM 126 H 1 1 10.389 3.700 32.404 0.00 0.00 0 +ATOM 127 O 1 1 8.684 9.342 3.912 0.00 0.00 0 +ATOM 128 H 1 1 6.985 9.256 4.773 0.00 0.00 0 +ATOM 129 H 1 1 8.684 10.809 3.011 0.00 0.00 0 +ATOM 130 O 1 1 4.873 9.919 7.707 0.00 0.00 0 +ATOM 131 H 1 1 3.698 9.771 6.194 0.00 0.00 0 +ATOM 132 H 1 1 5.047 11.961 7.624 0.00 0.00 0 +ATOM 133 O 1 1 10.031 5.018 9.699 0.00 0.00 0 +ATOM 134 H 1 1 9.675 3.382 10.340 0.00 0.00 0 +ATOM 135 H 1 1 9.132 5.987 10.825 0.00 0.00 0 +ATOM 136 O 1 1 11.246 3.918 21.929 0.00 0.00 0 +ATOM 137 H 1 1 12.614 2.770 22.341 0.00 0.00 0 +ATOM 138 H 1 1 12.073 5.686 21.497 0.00 0.00 0 +ATOM 139 O 1 1 6.825 7.164 25.708 0.00 0.00 0 +ATOM 140 H 1 1 8.036 8.374 25.980 0.00 0.00 0 +ATOM 141 H 1 1 5.206 7.900 25.891 0.00 0.00 0 +ATOM 142 O 1 1 10.171 12.811 0.295 0.00 0.00 0 +ATOM 143 H 1 1 10.033 12.818 -1.609 0.00 0.00 0 +ATOM 144 H 1 1 9.880 14.492 0.480 0.00 0.00 0 +ATOM 145 O 1 1 8.190 17.402 1.253 0.00 0.00 0 +ATOM 146 H 1 1 9.472 18.531 1.253 0.00 0.00 0 +ATOM 147 H 1 1 6.351 17.817 1.568 0.00 0.00 0 +ATOM 148 O 1 1 11.233 16.188 8.299 0.00 0.00 0 +ATOM 149 H 1 1 10.291 17.689 8.166 0.00 0.00 0 +ATOM 150 H 1 1 12.768 17.123 8.733 0.00 0.00 0 +ATOM 151 O 1 1 6.386 8.002 12.846 0.00 0.00 0 +ATOM 152 H 1 1 7.701 8.896 13.655 0.00 0.00 0 +ATOM 153 H 1 1 5.591 8.877 11.519 0.00 0.00 0 +ATOM 154 O 1 1 8.184 10.419 18.848 0.00 0.00 0 +ATOM 155 H 1 1 9.498 9.434 19.905 0.00 0.00 0 +ATOM 156 H 1 1 6.882 9.027 18.948 0.00 0.00 0 +ATOM 157 O 1 1 10.806 14.431 21.328 0.00 0.00 0 +ATOM 158 H 1 1 9.177 13.531 20.670 0.00 0.00 0 +ATOM 159 H 1 1 11.344 15.696 20.448 0.00 0.00 0 +ATOM 160 O 1 1 9.237 13.928 30.341 0.00 0.00 0 +ATOM 161 H 1 1 10.779 14.839 30.522 0.00 0.00 0 +ATOM 162 H 1 1 9.965 13.192 28.899 0.00 0.00 0 +ATOM 163 O 1 1 10.918 21.707 1.864 0.00 0.00 0 +ATOM 164 H 1 1 10.280 23.449 2.279 0.00 0.00 0 +ATOM 165 H 1 1 12.708 21.456 1.749 0.00 0.00 0 +ATOM 166 O 1 1 9.353 16.125 13.927 0.00 0.00 0 +ATOM 167 H 1 1 9.938 17.594 14.618 0.00 0.00 0 +ATOM 168 H 1 1 9.518 16.360 12.244 0.00 0.00 0 +ATOM 169 O 1 1 10.371 11.107 14.268 0.00 0.00 0 +ATOM 170 H 1 1 9.644 10.406 15.859 0.00 0.00 0 +ATOM 171 H 1 1 9.434 12.523 14.117 0.00 0.00 0 +ATOM 172 O 1 1 3.351 22.769 20.196 0.00 0.00 0 +ATOM 173 H 1 1 2.055 23.686 21.503 0.00 0.00 0 +ATOM 174 H 1 1 2.452 21.401 19.413 0.00 0.00 0 +ATOM 175 O 1 1 6.836 21.329 23.199 0.00 0.00 0 +ATOM 176 H 1 1 8.249 20.848 22.320 0.00 0.00 0 +ATOM 177 H 1 1 5.668 21.841 21.886 0.00 0.00 0 +ATOM 178 O 1 1 4.604 15.649 30.043 0.00 0.00 0 +ATOM 179 H 1 1 6.453 15.217 30.207 0.00 0.00 0 +ATOM 180 H 1 1 3.822 14.762 31.562 0.00 0.00 0 +ATOM 181 O 1 1 7.125 19.976 9.421 0.00 0.00 0 +ATOM 182 H 1 1 5.918 20.453 10.730 0.00 0.00 0 +ATOM 183 H 1 1 8.099 21.496 9.491 0.00 0.00 0 +ATOM 184 O 1 1 9.063 25.912 13.186 0.00 0.00 0 +ATOM 185 H 1 1 10.350 26.572 12.367 0.00 0.00 0 +ATOM 186 H 1 1 9.680 24.367 13.697 0.00 0.00 0 +ATOM 187 O 1 1 8.022 22.343 17.042 0.00 0.00 0 +ATOM 188 H 1 1 9.144 23.367 18.074 0.00 0.00 0 +ATOM 189 H 1 1 6.562 23.462 16.852 0.00 0.00 0 +ATOM 190 O 1 1 10.762 26.285 19.963 0.00 0.00 0 +ATOM 191 H 1 1 11.036 27.966 20.538 0.00 0.00 0 +ATOM 192 H 1 1 11.078 25.401 21.456 0.00 0.00 0 +ATOM 193 O 1 1 9.158 22.902 28.391 0.00 0.00 0 +ATOM 194 H 1 1 8.219 23.528 27.085 0.00 0.00 0 +ATOM 195 H 1 1 8.089 21.760 29.509 0.00 0.00 0 +ATOM 196 O 1 1 6.219 20.158 31.921 0.00 0.00 0 +ATOM 197 H 1 1 5.635 18.511 31.161 0.00 0.00 0 +ATOM 198 H 1 1 7.530 19.624 33.071 0.00 0.00 0 +ATOM 199 O 1 1 11.191 31.509 2.617 0.00 0.00 0 +ATOM 200 H 1 1 10.460 32.214 4.108 0.00 0.00 0 +ATOM 201 H 1 1 13.176 31.751 2.577 0.00 0.00 0 +ATOM 202 O 1 1 4.748 0.055 8.605 0.00 0.00 0 +ATOM 203 H 1 1 5.380 0.517 10.183 0.00 0.00 0 +ATOM 204 H 1 1 6.050 -0.306 7.480 0.00 0.00 0 +ATOM 205 O 1 1 8.695 30.809 15.731 0.00 0.00 0 +ATOM 206 H 1 1 9.189 32.103 14.495 0.00 0.00 0 +ATOM 207 H 1 1 8.447 29.069 14.868 0.00 0.00 0 +ATOM 208 O 1 1 10.128 31.402 20.766 0.00 0.00 0 +ATOM 209 H 1 1 9.456 30.905 19.155 0.00 0.00 0 +ATOM 210 H 1 1 9.020 32.731 21.415 0.00 0.00 0 +ATOM 211 O 1 1 12.238 30.162 25.837 0.00 0.00 0 +ATOM 212 H 1 1 11.418 30.908 27.110 0.00 0.00 0 +ATOM 213 H 1 1 12.396 31.331 24.678 0.00 0.00 0 +ATOM 214 O 1 1 10.395 32.537 30.624 0.00 0.00 0 +ATOM 215 H 1 1 11.042 34.339 30.751 0.00 0.00 0 +ATOM 216 H 1 1 11.378 31.486 31.538 0.00 0.00 0 +ATOM 217 O 1 1 10.438 3.626 5.087 0.00 0.00 0 +ATOM 218 H 1 1 12.435 4.082 5.136 0.00 0.00 0 +ATOM 219 H 1 1 9.822 4.284 6.681 0.00 0.00 0 +ATOM 220 O 1 1 14.762 3.401 13.776 0.00 0.00 0 +ATOM 221 H 1 1 16.518 3.824 13.376 0.00 0.00 0 +ATOM 222 H 1 1 13.752 4.757 12.964 0.00 0.00 0 +ATOM 223 O 1 1 12.382 1.012 17.643 0.00 0.00 0 +ATOM 224 H 1 1 13.346 1.997 16.444 0.00 0.00 0 +ATOM 225 H 1 1 11.931 2.133 18.998 0.00 0.00 0 +ATOM 226 O 1 1 15.278 1.293 24.559 0.00 0.00 0 +ATOM 227 H 1 1 16.071 0.946 26.365 0.00 0.00 0 +ATOM 228 H 1 1 15.794 0.199 23.499 0.00 0.00 0 +ATOM 229 O 1 1 22.226 31.627 24.712 0.00 0.00 0 +ATOM 230 H 1 1 23.338 32.595 23.876 0.00 0.00 0 +ATOM 231 H 1 1 22.161 30.053 24.132 0.00 0.00 0 +ATOM 232 O 1 1 15.640 1.847 32.717 0.00 0.00 0 +ATOM 233 H 1 1 17.488 2.473 31.874 0.00 0.00 0 +ATOM 234 H 1 1 16.403 0.869 34.267 0.00 0.00 0 +ATOM 235 O 1 1 14.858 10.199 2.754 0.00 0.00 0 +ATOM 236 H 1 1 13.360 10.712 2.282 0.00 0.00 0 +ATOM 237 H 1 1 14.560 9.316 4.559 0.00 0.00 0 +ATOM 238 O 1 1 15.717 8.469 10.739 0.00 0.00 0 +ATOM 239 H 1 1 17.323 9.581 10.875 0.00 0.00 0 +ATOM 240 H 1 1 14.574 9.631 10.221 0.00 0.00 0 +ATOM 241 O 1 1 15.248 10.398 16.525 0.00 0.00 0 +ATOM 242 H 1 1 16.324 9.181 16.149 0.00 0.00 0 +ATOM 243 H 1 1 14.172 10.488 15.098 0.00 0.00 0 +ATOM 244 O 1 1 13.226 8.438 20.801 0.00 0.00 0 +ATOM 245 H 1 1 14.043 8.996 19.295 0.00 0.00 0 +ATOM 246 H 1 1 14.661 7.802 22.093 0.00 0.00 0 +ATOM 247 O 1 1 10.173 10.961 25.875 0.00 0.00 0 +ATOM 248 H 1 1 11.477 10.223 26.940 0.00 0.00 0 +ATOM 249 H 1 1 11.269 10.738 24.343 0.00 0.00 0 +ATOM 250 O 1 1 12.792 7.737 29.173 0.00 0.00 0 +ATOM 251 H 1 1 12.199 6.038 29.475 0.00 0.00 0 +ATOM 252 H 1 1 14.427 7.450 29.617 0.00 0.00 0 +ATOM 253 O 1 1 15.180 19.498 3.578 0.00 0.00 0 +ATOM 254 H 1 1 14.883 17.596 4.080 0.00 0.00 0 +ATOM 255 H 1 1 16.754 19.579 2.626 0.00 0.00 0 +ATOM 256 O 1 1 12.517 11.093 7.701 0.00 0.00 0 +ATOM 257 H 1 1 12.224 12.778 7.555 0.00 0.00 0 +ATOM 258 H 1 1 11.150 10.393 7.057 0.00 0.00 0 +ATOM 259 O 1 1 16.266 16.271 10.758 0.00 0.00 0 +ATOM 260 H 1 1 16.507 15.795 12.768 0.00 0.00 0 +ATOM 261 H 1 1 17.725 16.977 10.292 0.00 0.00 0 +ATOM 262 O 1 1 14.069 18.399 18.897 0.00 0.00 0 +ATOM 263 H 1 1 15.513 17.523 18.155 0.00 0.00 0 +ATOM 264 H 1 1 14.958 18.709 20.673 0.00 0.00 0 +ATOM 265 O 1 1 14.099 15.480 25.510 0.00 0.00 0 +ATOM 266 H 1 1 13.698 16.872 26.938 0.00 0.00 0 +ATOM 267 H 1 1 12.567 15.379 24.444 0.00 0.00 0 +ATOM 268 O 1 1 13.309 17.574 30.292 0.00 0.00 0 +ATOM 269 H 1 1 14.937 16.934 30.810 0.00 0.00 0 +ATOM 270 H 1 1 13.969 19.494 30.012 0.00 0.00 0 +ATOM 271 O 1 1 18.371 23.257 0.925 0.00 0.00 0 +ATOM 272 H 1 1 19.479 23.480 2.321 0.00 0.00 0 +ATOM 273 H 1 1 19.087 24.325 -0.369 0.00 0.00 0 +ATOM 274 O 1 1 12.100 21.730 11.355 0.00 0.00 0 +ATOM 275 H 1 1 13.141 22.287 12.743 0.00 0.00 0 +ATOM 276 H 1 1 13.467 22.236 10.244 0.00 0.00 0 +ATOM 277 O 1 1 12.163 23.290 23.597 0.00 0.00 0 +ATOM 278 H 1 1 11.324 22.736 24.949 0.00 0.00 0 +ATOM 279 H 1 1 13.882 22.872 23.840 0.00 0.00 0 +ATOM 280 O 1 1 20.173 26.761 22.628 0.00 0.00 0 +ATOM 281 H 1 1 20.206 26.532 20.792 0.00 0.00 0 +ATOM 282 H 1 1 21.556 25.742 23.389 0.00 0.00 0 +ATOM 283 O 1 1 16.701 21.165 22.605 0.00 0.00 0 +ATOM 284 H 1 1 18.028 20.686 23.848 0.00 0.00 0 +ATOM 285 H 1 1 17.104 22.866 21.949 0.00 0.00 0 +ATOM 286 O 1 1 11.391 26.461 33.705 0.00 0.00 0 +ATOM 287 H 1 1 9.841 27.192 34.048 0.00 0.00 0 +ATOM 288 H 1 1 11.776 25.540 35.243 0.00 0.00 0 +ATOM 289 O 1 1 9.898 25.989 4.553 0.00 0.00 0 +ATOM 290 H 1 1 8.902 26.131 6.039 0.00 0.00 0 +ATOM 291 H 1 1 10.287 27.806 4.376 0.00 0.00 0 +ATOM 292 O 1 1 14.308 26.960 10.877 0.00 0.00 0 +ATOM 293 H 1 1 15.302 27.405 12.173 0.00 0.00 0 +ATOM 294 H 1 1 15.463 26.151 9.633 0.00 0.00 0 +ATOM 295 O 1 1 13.433 22.960 16.904 0.00 0.00 0 +ATOM 296 H 1 1 13.409 24.131 18.132 0.00 0.00 0 +ATOM 297 H 1 1 13.624 21.191 17.520 0.00 0.00 0 +ATOM 298 O 1 1 16.409 26.768 26.875 0.00 0.00 0 +ATOM 299 H 1 1 17.590 26.987 25.431 0.00 0.00 0 +ATOM 300 H 1 1 14.751 27.703 26.230 0.00 0.00 0 +ATOM 301 O 1 1 14.405 22.733 29.892 0.00 0.00 0 +ATOM 302 H 1 1 15.423 23.079 28.494 0.00 0.00 0 +ATOM 303 H 1 1 12.826 23.259 29.416 0.00 0.00 0 +ATOM 304 O 1 1 6.905 29.408 0.749 0.00 0.00 0 +ATOM 305 H 1 1 8.428 30.483 1.567 0.00 0.00 0 +ATOM 306 H 1 1 6.353 30.814 -0.444 0.00 0.00 0 +ATOM 307 O 1 1 9.189 34.159 6.509 0.00 0.00 0 +ATOM 308 H 1 1 10.198 34.193 8.002 0.00 0.00 0 +ATOM 309 H 1 1 9.890 35.692 5.785 0.00 0.00 0 +ATOM 310 O 1 1 14.256 32.316 9.369 0.00 0.00 0 +ATOM 311 H 1 1 15.733 32.867 9.486 0.00 0.00 0 +ATOM 312 H 1 1 14.754 30.670 10.090 0.00 0.00 0 +ATOM 313 O 1 1 14.714 30.841 16.516 0.00 0.00 0 +ATOM 314 H 1 1 13.748 29.551 17.279 0.00 0.00 0 +ATOM 315 H 1 1 13.218 31.933 16.614 0.00 0.00 0 +ATOM 316 O 1 1 18.409 33.641 20.611 0.00 0.00 0 +ATOM 317 H 1 1 19.601 32.274 21.115 0.00 0.00 0 +ATOM 318 H 1 1 17.360 32.655 19.518 0.00 0.00 0 +ATOM 319 O 1 1 16.062 28.638 32.207 0.00 0.00 0 +ATOM 320 H 1 1 14.648 27.958 33.253 0.00 0.00 0 +ATOM 321 H 1 1 15.752 28.014 30.522 0.00 0.00 0 +ATOM 322 O 1 1 16.200 30.895 1.473 0.00 0.00 0 +ATOM 323 H 1 1 16.626 29.968 -0.130 0.00 0.00 0 +ATOM 324 H 1 1 17.167 29.833 2.927 0.00 0.00 0 +ATOM 325 O 1 1 20.278 3.529 6.048 0.00 0.00 0 +ATOM 326 H 1 1 20.977 3.611 4.575 0.00 0.00 0 +ATOM 327 H 1 1 21.312 4.513 7.251 0.00 0.00 0 +ATOM 328 O 1 1 23.079 5.778 10.408 0.00 0.00 0 +ATOM 329 H 1 1 24.650 6.259 10.838 0.00 0.00 0 +ATOM 330 H 1 1 22.342 7.609 10.178 0.00 0.00 0 +ATOM 331 O 1 1 19.581 2.031 12.110 0.00 0.00 0 +ATOM 332 H 1 1 19.039 1.082 10.440 0.00 0.00 0 +ATOM 333 H 1 1 21.141 2.991 11.851 0.00 0.00 0 +ATOM 334 O 1 1 22.005 3.223 23.178 0.00 0.00 0 +ATOM 335 H 1 1 21.429 4.090 24.554 0.00 0.00 0 +ATOM 336 H 1 1 20.654 1.791 22.711 0.00 0.00 0 +ATOM 337 O 1 1 16.630 6.422 23.792 0.00 0.00 0 +ATOM 338 H 1 1 16.219 4.804 24.406 0.00 0.00 0 +ATOM 339 H 1 1 17.066 7.128 25.282 0.00 0.00 0 +ATOM 340 O 1 1 21.676 5.564 28.158 0.00 0.00 0 +ATOM 341 H 1 1 20.658 6.717 29.185 0.00 0.00 0 +ATOM 342 H 1 1 23.413 5.828 28.996 0.00 0.00 0 +ATOM 343 O 1 1 15.257 5.265 5.626 0.00 0.00 0 +ATOM 344 H 1 1 16.914 4.519 5.490 0.00 0.00 0 +ATOM 345 H 1 1 15.144 6.150 6.972 0.00 0.00 0 +ATOM 346 O 1 1 20.137 11.082 10.437 0.00 0.00 0 +ATOM 347 H 1 1 20.021 10.947 8.733 0.00 0.00 0 +ATOM 348 H 1 1 21.025 12.555 10.853 0.00 0.00 0 +ATOM 349 O 1 1 23.089 14.627 12.437 0.00 0.00 0 +ATOM 350 H 1 1 24.716 15.254 12.736 0.00 0.00 0 +ATOM 351 H 1 1 23.284 13.228 13.653 0.00 0.00 0 +ATOM 352 O 1 1 24.083 12.649 22.566 0.00 0.00 0 +ATOM 353 H 1 1 22.397 12.663 23.042 0.00 0.00 0 +ATOM 354 H 1 1 24.901 13.851 23.565 0.00 0.00 0 +ATOM 355 O 1 1 17.865 7.909 30.036 0.00 0.00 0 +ATOM 356 H 1 1 17.509 8.045 31.982 0.00 0.00 0 +ATOM 357 H 1 1 18.078 9.582 29.318 0.00 0.00 0 +ATOM 358 O 1 1 18.824 8.486 0.104 0.00 0.00 0 +ATOM 359 H 1 1 19.997 10.191 -0.057 0.00 0.00 0 +ATOM 360 H 1 1 17.077 8.998 0.779 0.00 0.00 0 +ATOM 361 O 1 1 20.122 9.143 5.343 0.00 0.00 0 +ATOM 362 H 1 1 19.373 8.819 3.821 0.00 0.00 0 +ATOM 363 H 1 1 21.998 8.776 5.128 0.00 0.00 0 +ATOM 364 O 1 1 16.413 14.459 5.855 0.00 0.00 0 +ATOM 365 H 1 1 15.536 13.007 5.239 0.00 0.00 0 +ATOM 366 H 1 1 16.006 14.725 7.737 0.00 0.00 0 +ATOM 367 O 1 1 17.561 15.066 15.654 0.00 0.00 0 +ATOM 368 H 1 1 17.575 13.398 16.055 0.00 0.00 0 +ATOM 369 H 1 1 18.978 15.828 16.400 0.00 0.00 0 +ATOM 370 O 1 1 26.374 17.047 24.817 0.00 0.00 0 +ATOM 371 H 1 1 27.983 17.098 25.632 0.00 0.00 0 +ATOM 372 H 1 1 25.629 18.751 24.919 0.00 0.00 0 +ATOM 373 O 1 1 19.784 12.960 28.706 0.00 0.00 0 +ATOM 374 H 1 1 21.662 13.055 28.871 0.00 0.00 0 +ATOM 375 H 1 1 19.545 14.070 27.143 0.00 0.00 0 +ATOM 376 O 1 1 17.891 16.733 32.499 0.00 0.00 0 +ATOM 377 H 1 1 18.327 15.240 31.277 0.00 0.00 0 +ATOM 378 H 1 1 18.633 18.335 31.693 0.00 0.00 0 +ATOM 379 O 1 1 23.733 23.024 1.663 0.00 0.00 0 +ATOM 380 H 1 1 24.800 24.052 2.776 0.00 0.00 0 +ATOM 381 H 1 1 24.693 22.618 0.198 0.00 0.00 0 +ATOM 382 O 1 1 20.789 18.440 9.443 0.00 0.00 0 +ATOM 383 H 1 1 20.766 17.257 7.881 0.00 0.00 0 +ATOM 384 H 1 1 21.896 17.345 10.385 0.00 0.00 0 +ATOM 385 O 1 1 21.574 17.493 17.838 0.00 0.00 0 +ATOM 386 H 1 1 20.597 18.955 17.218 0.00 0.00 0 +ATOM 387 H 1 1 22.538 16.874 16.251 0.00 0.00 0 +ATOM 388 O 1 1 19.168 14.748 24.131 0.00 0.00 0 +ATOM 389 H 1 1 19.711 16.390 23.712 0.00 0.00 0 +ATOM 390 H 1 1 17.429 14.695 24.403 0.00 0.00 0 +ATOM 391 O 1 1 22.149 20.198 24.977 0.00 0.00 0 +ATOM 392 H 1 1 21.639 20.924 26.486 0.00 0.00 0 +ATOM 393 H 1 1 22.656 21.657 24.411 0.00 0.00 0 +ATOM 394 O 1 1 20.565 20.792 29.600 0.00 0.00 0 +ATOM 395 H 1 1 22.264 20.409 30.214 0.00 0.00 0 +ATOM 396 H 1 1 20.548 22.408 30.597 0.00 0.00 0 +ATOM 397 O 1 1 20.802 26.547 9.615 0.00 0.00 0 +ATOM 398 H 1 1 20.099 27.984 8.338 0.00 0.00 0 +ATOM 399 H 1 1 21.277 27.539 11.325 0.00 0.00 0 +ATOM 400 O 1 1 16.283 23.589 7.779 0.00 0.00 0 +ATOM 401 H 1 1 16.093 21.973 6.712 0.00 0.00 0 +ATOM 402 H 1 1 17.901 22.971 8.154 0.00 0.00 0 +ATOM 403 O 1 1 18.469 29.798 13.568 0.00 0.00 0 +ATOM 404 H 1 1 19.712 31.216 13.506 0.00 0.00 0 +ATOM 405 H 1 1 16.872 30.343 14.396 0.00 0.00 0 +ATOM 406 O 1 1 18.790 21.712 16.060 0.00 0.00 0 +ATOM 407 H 1 1 19.878 23.090 16.485 0.00 0.00 0 +ATOM 408 H 1 1 17.201 22.326 15.819 0.00 0.00 0 +ATOM 409 O 1 1 21.747 26.084 16.349 0.00 0.00 0 +ATOM 410 H 1 1 20.783 27.021 15.300 0.00 0.00 0 +ATOM 411 H 1 1 22.705 27.328 17.206 0.00 0.00 0 +ATOM 412 O 1 1 20.769 26.211 32.050 0.00 0.00 0 +ATOM 413 H 1 1 21.488 27.404 33.328 0.00 0.00 0 +ATOM 414 H 1 1 18.989 26.710 32.145 0.00 0.00 0 +ATOM 415 O 1 1 19.820 29.181 5.559 0.00 0.00 0 +ATOM 416 H 1 1 20.991 29.509 4.109 0.00 0.00 0 +ATOM 417 H 1 1 19.431 31.018 6.221 0.00 0.00 0 +ATOM 418 O 1 1 19.240 33.867 7.993 0.00 0.00 0 +ATOM 419 H 1 1 19.107 35.039 6.604 0.00 0.00 0 +ATOM 420 H 1 1 20.697 33.671 9.063 0.00 0.00 0 +ATOM 421 O 1 1 22.511 34.976 15.793 0.00 0.00 0 +ATOM 422 H 1 1 23.716 36.163 16.603 0.00 0.00 0 +ATOM 423 H 1 1 21.699 36.150 14.467 0.00 0.00 0 +ATOM 424 O 1 1 22.622 30.284 19.069 0.00 0.00 0 +ATOM 425 H 1 1 22.049 31.351 17.725 0.00 0.00 0 +ATOM 426 H 1 1 24.411 30.773 19.576 0.00 0.00 0 +ATOM 427 O 1 1 18.639 33.611 28.369 0.00 0.00 0 +ATOM 428 H 1 1 18.226 32.159 29.103 0.00 0.00 0 +ATOM 429 H 1 1 19.906 33.008 27.158 0.00 0.00 0 +ATOM 430 O 1 1 22.520 1.325 31.926 0.00 0.00 0 +ATOM 431 H 1 1 22.803 2.668 30.796 0.00 0.00 0 +ATOM 432 H 1 1 21.045 0.425 31.122 0.00 0.00 0 +ATOM 433 O 1 1 21.754 3.789 1.159 0.00 0.00 0 +ATOM 434 H 1 1 22.085 2.785 -0.180 0.00 0.00 0 +ATOM 435 H 1 1 20.850 5.175 0.610 0.00 0.00 0 +ATOM 436 O 1 1 28.457 5.539 12.133 0.00 0.00 0 +ATOM 437 H 1 1 29.489 4.390 11.182 0.00 0.00 0 +ATOM 438 H 1 1 29.161 7.131 12.587 0.00 0.00 0 +ATOM 439 O 1 1 22.495 5.966 17.324 0.00 0.00 0 +ATOM 440 H 1 1 24.377 5.379 17.393 0.00 0.00 0 +ATOM 441 H 1 1 21.906 5.491 18.857 0.00 0.00 0 +ATOM 442 O 1 1 28.128 3.304 22.287 0.00 0.00 0 +ATOM 443 H 1 1 28.123 2.999 20.491 0.00 0.00 0 +ATOM 444 H 1 1 26.533 3.355 22.876 0.00 0.00 0 +ATOM 445 O 1 1 28.378 10.455 27.266 0.00 0.00 0 +ATOM 446 H 1 1 30.019 10.292 28.051 0.00 0.00 0 +ATOM 447 H 1 1 28.635 10.039 25.463 0.00 0.00 0 +ATOM 448 O 1 1 27.031 8.353 34.806 0.00 0.00 0 +ATOM 449 H 1 1 26.116 9.984 34.571 0.00 0.00 0 +ATOM 450 H 1 1 28.685 8.951 34.739 0.00 0.00 0 +ATOM 451 O 1 1 24.951 8.160 4.454 0.00 0.00 0 +ATOM 452 H 1 1 25.930 9.616 5.160 0.00 0.00 0 +ATOM 453 H 1 1 25.947 7.994 2.724 0.00 0.00 0 +ATOM 454 O 1 1 26.937 12.436 6.869 0.00 0.00 0 +ATOM 455 H 1 1 25.492 13.284 6.708 0.00 0.00 0 +ATOM 456 H 1 1 27.689 13.332 8.266 0.00 0.00 0 +ATOM 457 O 1 1 23.365 11.214 16.933 0.00 0.00 0 +ATOM 458 H 1 1 22.247 9.744 16.789 0.00 0.00 0 +ATOM 459 H 1 1 23.264 12.035 18.539 0.00 0.00 0 +ATOM 460 O 1 1 28.321 8.759 22.158 0.00 0.00 0 +ATOM 461 H 1 1 27.662 6.895 22.482 0.00 0.00 0 +ATOM 462 H 1 1 26.971 9.710 21.902 0.00 0.00 0 +ATOM 463 O 1 1 27.071 6.109 29.555 0.00 0.00 0 +ATOM 464 H 1 1 27.591 7.663 28.857 0.00 0.00 0 +ATOM 465 H 1 1 27.304 6.320 31.261 0.00 0.00 0 +ATOM 466 O 1 1 22.474 11.704 34.640 0.00 0.00 0 +ATOM 467 H 1 1 22.752 13.304 35.584 0.00 0.00 0 +ATOM 468 H 1 1 22.840 12.090 33.030 0.00 0.00 0 +ATOM 469 O 1 1 21.656 14.971 5.615 0.00 0.00 0 +ATOM 470 H 1 1 21.690 15.860 3.977 0.00 0.00 0 +ATOM 471 H 1 1 19.964 14.225 5.774 0.00 0.00 0 +ATOM 472 O 1 1 28.539 21.492 9.820 0.00 0.00 0 +ATOM 473 H 1 1 27.288 22.181 8.688 0.00 0.00 0 +ATOM 474 H 1 1 28.065 22.420 11.602 0.00 0.00 0 +ATOM 475 O 1 1 28.364 16.020 11.109 0.00 0.00 0 +ATOM 476 H 1 1 30.033 16.649 12.089 0.00 0.00 0 +ATOM 477 H 1 1 28.456 17.440 10.082 0.00 0.00 0 +ATOM 478 O 1 1 0.054 13.686 18.103 0.00 0.00 0 +ATOM 479 H 1 1 -1.714 12.928 18.841 0.00 0.00 0 +ATOM 480 H 1 1 1.008 12.429 17.383 0.00 0.00 0 +ATOM 481 O 1 1 24.636 12.894 29.957 0.00 0.00 0 +ATOM 482 H 1 1 25.906 13.914 31.183 0.00 0.00 0 +ATOM 483 H 1 1 25.641 11.609 29.162 0.00 0.00 0 +ATOM 484 O 1 1 21.548 17.250 0.749 0.00 0.00 0 +ATOM 485 H 1 1 21.843 19.026 0.905 0.00 0.00 0 +ATOM 486 H 1 1 20.385 16.716 -0.697 0.00 0.00 0 +ATOM 487 O 1 1 26.095 27.274 4.520 0.00 0.00 0 +ATOM 488 H 1 1 27.889 26.458 4.505 0.00 0.00 0 +ATOM 489 H 1 1 25.648 26.970 6.165 0.00 0.00 0 +ATOM 490 O 1 1 23.610 22.515 8.008 0.00 0.00 0 +ATOM 491 H 1 1 22.653 21.187 8.739 0.00 0.00 0 +ATOM 492 H 1 1 22.286 24.095 8.444 0.00 0.00 0 +ATOM 493 O 1 1 27.355 18.929 18.180 0.00 0.00 0 +ATOM 494 H 1 1 27.200 20.349 17.155 0.00 0.00 0 +ATOM 495 H 1 1 25.579 18.322 18.770 0.00 0.00 0 +ATOM 496 O 1 1 26.765 23.633 14.444 0.00 0.00 0 +ATOM 497 H 1 1 27.441 25.298 13.651 0.00 0.00 0 +ATOM 498 H 1 1 25.086 24.256 14.749 0.00 0.00 0 +ATOM 499 O 1 1 31.478 20.769 20.986 0.00 0.00 0 +ATOM 500 H 1 1 30.440 22.509 21.135 0.00 0.00 0 +ATOM 501 H 1 1 30.567 19.656 20.043 0.00 0.00 0 +ATOM 502 O 1 1 24.812 20.412 32.668 0.00 0.00 0 +ATOM 503 H 1 1 26.242 21.478 31.874 0.00 0.00 0 +ATOM 504 H 1 1 25.787 19.023 33.158 0.00 0.00 0 +ATOM 505 O 1 1 22.105 29.076 0.928 0.00 0.00 0 +ATOM 506 H 1 1 23.296 27.923 1.739 0.00 0.00 0 +ATOM 507 H 1 1 22.623 30.994 0.882 0.00 0.00 0 +ATOM 508 O 1 1 29.572 31.256 8.626 0.00 0.00 0 +ATOM 509 H 1 1 30.795 30.203 7.736 0.00 0.00 0 +ATOM 510 H 1 1 28.277 31.519 7.260 0.00 0.00 0 +ATOM 511 O 1 1 31.817 34.843 18.283 0.00 0.00 0 +ATOM 512 H 1 1 32.438 34.389 16.474 0.00 0.00 0 +ATOM 513 H 1 1 32.743 36.422 18.341 0.00 0.00 0 +ATOM 514 O 1 1 27.915 25.601 19.033 0.00 0.00 0 +ATOM 515 H 1 1 29.358 26.561 19.190 0.00 0.00 0 +ATOM 516 H 1 1 28.148 24.429 17.530 0.00 0.00 0 +ATOM 517 O 1 1 24.548 24.654 24.025 0.00 0.00 0 +ATOM 518 H 1 1 25.528 25.635 22.824 0.00 0.00 0 +ATOM 519 H 1 1 25.300 25.200 25.645 0.00 0.00 0 +ATOM 520 O 1 1 28.540 22.922 30.370 0.00 0.00 0 +ATOM 521 H 1 1 27.414 24.096 29.781 0.00 0.00 0 +ATOM 522 H 1 1 29.674 23.914 31.873 0.00 0.00 0 +ATOM 523 O 1 1 24.969 33.623 1.014 0.00 0.00 0 +ATOM 524 H 1 1 26.521 33.058 1.518 0.00 0.00 0 +ATOM 525 H 1 1 24.990 34.322 -0.683 0.00 0.00 0 +ATOM 526 O 1 1 23.075 32.171 11.324 0.00 0.00 0 +ATOM 527 H 1 1 23.316 32.775 13.097 0.00 0.00 0 +ATOM 528 H 1 1 24.460 33.203 10.662 0.00 0.00 0 +ATOM 529 O 1 1 27.497 2.736 17.224 0.00 0.00 0 +ATOM 530 H 1 1 28.397 3.415 15.715 0.00 0.00 0 +ATOM 531 H 1 1 28.234 1.233 17.412 0.00 0.00 0 +ATOM 532 O 1 1 26.369 33.060 22.077 0.00 0.00 0 +ATOM 533 H 1 1 26.170 34.746 22.264 0.00 0.00 0 +ATOM 534 H 1 1 27.592 32.404 23.321 0.00 0.00 0 +ATOM 535 O 1 1 30.221 30.950 25.843 0.00 0.00 0 +ATOM 536 H 1 1 30.305 29.038 26.208 0.00 0.00 0 +ATOM 537 H 1 1 30.363 31.979 27.414 0.00 0.00 0 +ATOM 538 O 1 1 24.973 26.732 28.607 0.00 0.00 0 +ATOM 539 H 1 1 25.385 28.369 29.248 0.00 0.00 0 +ATOM 540 H 1 1 23.330 26.597 29.234 0.00 0.00 0 +ATOM 541 O 1 1 32.165 4.857 2.258 0.00 0.00 0 +ATOM 542 H 1 1 32.417 6.195 1.157 0.00 0.00 0 +ATOM 543 H 1 1 32.615 3.727 1.112 0.00 0.00 0 +ATOM 544 O 1 1 28.067 3.533 5.217 0.00 0.00 0 +ATOM 545 H 1 1 26.960 4.447 4.158 0.00 0.00 0 +ATOM 546 H 1 1 29.875 3.863 4.448 0.00 0.00 0 +ATOM 547 O 1 1 33.279 2.782 13.028 0.00 0.00 0 +ATOM 548 H 1 1 33.708 3.955 11.817 0.00 0.00 0 +ATOM 549 H 1 1 33.656 3.545 14.631 0.00 0.00 0 +ATOM 550 O 1 1 34.278 4.944 17.492 0.00 0.00 0 +ATOM 551 H 1 1 33.438 6.563 17.876 0.00 0.00 0 +ATOM 552 H 1 1 34.906 4.452 18.995 0.00 0.00 0 +ATOM 553 O 1 1 32.363 1.908 26.092 0.00 0.00 0 +ATOM 554 H 1 1 31.941 1.683 24.268 0.00 0.00 0 +ATOM 555 H 1 1 33.850 1.390 26.904 0.00 0.00 0 +ATOM 556 O 1 1 27.982 0.418 28.241 0.00 0.00 0 +ATOM 557 H 1 1 27.516 2.080 28.309 0.00 0.00 0 +ATOM 558 H 1 1 29.593 0.176 27.299 0.00 0.00 0 +ATOM 559 O 1 1 28.845 14.672 2.724 0.00 0.00 0 +ATOM 560 H 1 1 27.963 13.930 4.139 0.00 0.00 0 +ATOM 561 H 1 1 30.386 15.714 3.379 0.00 0.00 0 +ATOM 562 O 1 1 28.083 10.618 14.298 0.00 0.00 0 +ATOM 563 H 1 1 28.623 12.160 13.293 0.00 0.00 0 +ATOM 564 H 1 1 26.486 11.015 15.379 0.00 0.00 0 +ATOM 565 O 1 1 33.867 10.545 13.306 0.00 0.00 0 +ATOM 566 H 1 1 35.165 9.612 13.810 0.00 0.00 0 +ATOM 567 H 1 1 33.615 10.270 11.513 0.00 0.00 0 +ATOM 568 O 1 1 31.790 9.696 18.223 0.00 0.00 0 +ATOM 569 H 1 1 30.484 9.334 19.421 0.00 0.00 0 +ATOM 570 H 1 1 30.834 10.096 16.929 0.00 0.00 0 +ATOM 571 O 1 1 30.141 15.006 21.532 0.00 0.00 0 +ATOM 572 H 1 1 28.565 15.594 22.099 0.00 0.00 0 +ATOM 573 H 1 1 30.942 14.253 23.077 0.00 0.00 0 +ATOM 574 O 1 1 32.798 10.732 30.680 0.00 0.00 0 +ATOM 575 H 1 1 34.073 9.528 30.799 0.00 0.00 0 +ATOM 576 H 1 1 32.991 11.512 28.983 0.00 0.00 0 +ATOM 577 O 1 1 33.652 16.265 5.086 0.00 0.00 0 +ATOM 578 H 1 1 35.399 16.239 4.730 0.00 0.00 0 +ATOM 579 H 1 1 33.503 17.939 5.631 0.00 0.00 0 +ATOM 580 O 1 1 31.947 10.799 7.943 0.00 0.00 0 +ATOM 581 H 1 1 29.894 10.549 7.619 0.00 0.00 0 +ATOM 582 H 1 1 32.271 12.414 7.075 0.00 0.00 0 +ATOM 583 O 1 1 0.329 15.516 11.746 0.00 0.00 0 +ATOM 584 H 1 1 -0.446 14.249 12.939 0.00 0.00 0 +ATOM 585 H 1 1 -0.685 17.018 11.935 0.00 0.00 0 +ATOM 586 O 1 1 4.262 19.165 14.308 0.00 0.00 0 +ATOM 587 H 1 1 3.579 17.691 14.920 0.00 0.00 0 +ATOM 588 H 1 1 5.723 19.183 15.204 0.00 0.00 0 +ATOM 589 O 1 1 32.995 13.546 25.948 0.00 0.00 0 +ATOM 590 H 1 1 32.167 15.060 26.787 0.00 0.00 0 +ATOM 591 H 1 1 34.425 13.800 25.007 0.00 0.00 0 +ATOM 592 O 1 1 1.773 13.524 34.037 0.00 0.00 0 +ATOM 593 H 1 1 0.227 14.409 33.446 0.00 0.00 0 +ATOM 594 H 1 1 2.167 14.670 35.511 0.00 0.00 0 +ATOM 595 O 1 1 33.029 20.529 7.247 0.00 0.00 0 +ATOM 596 H 1 1 34.388 21.414 8.003 0.00 0.00 0 +ATOM 597 H 1 1 31.451 20.831 8.182 0.00 0.00 0 +ATOM 598 O 1 1 2.037 24.250 10.251 0.00 0.00 0 +ATOM 599 H 1 1 3.743 25.008 9.876 0.00 0.00 0 +ATOM 600 H 1 1 1.894 25.043 11.903 0.00 0.00 0 +ATOM 601 O 1 1 32.753 19.259 13.976 0.00 0.00 0 +ATOM 602 H 1 1 32.792 20.886 13.792 0.00 0.00 0 +ATOM 603 H 1 1 34.334 18.799 14.976 0.00 0.00 0 +ATOM 604 O 1 1 0.396 18.673 18.699 0.00 0.00 0 +ATOM 605 H 1 1 -1.211 18.950 19.127 0.00 0.00 0 +ATOM 606 H 1 1 0.469 16.977 18.436 0.00 0.00 0 +ATOM 607 O 1 1 30.855 18.370 27.959 0.00 0.00 0 +ATOM 608 H 1 1 29.759 19.681 28.690 0.00 0.00 0 +ATOM 609 H 1 1 32.103 19.477 26.763 0.00 0.00 0 +ATOM 610 O 1 1 27.723 15.992 33.091 0.00 0.00 0 +ATOM 611 H 1 1 29.390 16.423 32.192 0.00 0.00 0 +ATOM 612 H 1 1 27.801 15.859 34.804 0.00 0.00 0 +ATOM 613 O 1 1 31.068 27.895 3.348 0.00 0.00 0 +ATOM 614 H 1 1 32.517 27.825 4.610 0.00 0.00 0 +ATOM 615 H 1 1 31.529 29.459 2.324 0.00 0.00 0 +ATOM 616 O 1 1 35.039 28.008 6.663 0.00 0.00 0 +ATOM 617 H 1 1 35.966 26.934 7.683 0.00 0.00 0 +ATOM 618 H 1 1 36.055 28.336 5.336 0.00 0.00 0 +ATOM 619 O 1 1 29.356 28.196 13.025 0.00 0.00 0 +ATOM 620 H 1 1 29.210 29.335 14.589 0.00 0.00 0 +ATOM 621 H 1 1 28.874 29.629 11.867 0.00 0.00 0 +ATOM 622 O 1 1 32.386 28.434 18.961 0.00 0.00 0 +ATOM 623 H 1 1 33.368 28.574 20.411 0.00 0.00 0 +ATOM 624 H 1 1 33.410 27.406 17.949 0.00 0.00 0 +ATOM 625 O 1 1 30.898 25.390 25.799 0.00 0.00 0 +ATOM 626 H 1 1 32.369 25.913 24.580 0.00 0.00 0 +ATOM 627 H 1 1 31.317 24.075 27.029 0.00 0.00 0 +ATOM 628 O 1 1 32.259 25.611 33.104 0.00 0.00 0 +ATOM 629 H 1 1 32.238 25.736 34.806 0.00 0.00 0 +ATOM 630 H 1 1 33.920 25.042 32.775 0.00 0.00 0 +ATOM 631 O 1 1 30.290 32.645 1.341 0.00 0.00 0 +ATOM 632 H 1 1 29.949 32.793 -0.430 0.00 0.00 0 +ATOM 633 H 1 1 31.762 33.340 1.847 0.00 0.00 0 +ATOM 634 O 1 1 25.536 34.235 6.469 0.00 0.00 0 +ATOM 635 H 1 1 25.716 36.059 6.651 0.00 0.00 0 +ATOM 636 H 1 1 25.283 33.866 4.895 0.00 0.00 0 +ATOM 637 O 1 1 31.674 33.161 13.106 0.00 0.00 0 +ATOM 638 H 1 1 31.793 34.863 13.281 0.00 0.00 0 +ATOM 639 H 1 1 30.425 32.928 11.783 0.00 0.00 0 +ATOM 640 O 1 1 33.844 32.668 22.296 0.00 0.00 0 +ATOM 641 H 1 1 32.750 32.234 23.524 0.00 0.00 0 +ATOM 642 H 1 1 32.917 32.875 20.736 0.00 0.00 0 +ATOM 643 O 1 1 31.603 30.542 30.805 0.00 0.00 0 +ATOM 644 H 1 1 33.451 30.804 30.468 0.00 0.00 0 +ATOM 645 H 1 1 31.575 28.816 31.756 0.00 0.00 0 +ATOM 646 O 1 1 26.295 31.235 30.599 0.00 0.00 0 +ATOM 647 H 1 1 27.834 30.515 30.607 0.00 0.00 0 +ATOM 648 H 1 1 26.362 32.920 29.856 0.00 0.00 0 +END diff --git a/tools/i-pi/examples/lammps/h2o-pimd-rpc/data.water_longrange b/tools/i-pi/examples/lammps/h2o-pimd-rpc/data.water_longrange new file mode 100644 index 000000000..a08e2d741 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd-rpc/data.water_longrange @@ -0,0 +1,1331 @@ +LAMMPS Description + + 648 atoms + 432 bonds + 216 angles + + 2 atom types + 1 bond types + 1 angle types + + 0 35.233 xlo xhi + 0 35.233 ylo yhi + 0 35.233 zlo zhi + +Masses + + 1 15.9994 + 2 1.0080 + +Bond Coeffs + + 1 0 1.78 + +Angle Coeffs + + 1 0 107.400000 + +Atoms + + 1 1 1 -1.1128 3.84600000 5.67200001 1.32300000 + 2 1 2 0.5564 2.97900000 7.05400000 0.85700000 + 3 1 2 0.5564 5.52500001 5.69700001 0.45100000 + 4 2 1 -1.1128 34.55700001 34.34100000 3.07800000 + 5 2 2 0.5564 33.72200001 34.68900000 4.84000001 + 6 2 2 0.5564 36.02900000 33.22000001 3.71100001 + 7 3 1 -1.1128 5.59100000 1.96299999 13.47700000 + 8 3 2 0.5564 7.26500000 1.86400000 13.85100001 + 9 3 2 0.5564 5.00899999 3.55500000 13.91599999 + 10 4 1 -1.1128 1.06000000 2.06100000 21.71800001 + 11 4 2 0.5564 0.75700000 0.26100000 21.82000000 + 12 4 2 0.5564 0.21300001 3.01299999 23.04700000 + 13 5 1 -1.1128 1.20000000 1.33700000 29.00599999 + 14 5 2 0.5564 0.81800000 1.88399999 30.73200000 + 15 5 2 0.5564 2.88300001 1.82500000 29.01100000 + 16 6 1 -1.1128 1.33100001 1.38599999 34.30600001 + 17 6 2 0.5564 2.39200001 2.89799999 34.84600000 + 18 6 2 0.5564 0.81400000 0.53200001 35.83600000 + 19 7 1 -1.1128 31.45100000 10.20100000 0.72599999 + 20 7 2 0.5564 32.28199999 10.87699999 -0.75000000 + 21 7 2 0.5564 30.91999999 11.59399999 1.67700000 + 22 8 1 -1.1128 0.83600000 10.80800001 4.29800000 + 23 8 2 0.5564 0.30500000 10.64300001 2.79300000 + 24 8 2 0.5564 -0.35600001 10.33400000 5.52400000 + 25 9 1 -1.1128 34.38100001 5.97900000 9.19400000 + 26 9 2 0.5564 33.61600000 7.67300000 8.85700000 + 27 9 2 0.5564 35.11500000 5.25999999 7.61800001 + 28 10 1 -1.1128 33.21200000 6.48000000 24.27799999 + 29 10 2 0.5564 31.62400000 6.90800001 23.52100001 + 30 10 2 0.5564 32.54400000 4.99000000 24.98200000 + 31 11 1 -1.1128 1.99200000 9.00199999 26.86300000 + 32 11 2 0.5564 1.85600000 10.17500000 25.57899999 + 33 11 2 0.5564 0.51900000 8.09899999 26.38599999 + 34 12 1 -1.1128 2.05400000 8.66000000 32.51499999 + 35 12 2 0.5564 2.16699999 8.72700000 30.49400000 + 36 12 2 0.5564 2.37400001 10.51300000 33.03799999 + 37 13 1 -1.1128 3.40200000 16.63900001 3.00800000 + 38 13 2 0.5564 4.12700001 15.87200001 4.44600001 + 39 13 2 0.5564 2.90500001 18.33899999 3.15999999 + 40 14 1 -1.1128 4.22200000 15.44400000 8.07200000 + 41 14 2 0.5564 5.21100000 16.75600000 8.29900001 + 42 14 2 0.5564 2.56000000 15.49200001 8.86000000 + 43 15 1 -1.1128 2.83100000 9.24599999 16.48800000 + 44 15 2 0.5564 2.86900001 8.02300001 18.05000000 + 45 15 2 0.5564 3.96000000 8.46700001 15.15400000 + 46 16 1 -1.1128 5.56300000 6.00300000 20.90700000 + 47 16 2 0.5564 4.65300000 4.63800000 21.48000000 + 48 16 2 0.5564 6.40500000 6.20800000 22.52899999 + 49 17 1 -1.1128 2.08700001 13.37000000 22.91299999 + 50 17 2 0.5564 2.83200000 14.80400001 23.42200000 + 51 17 2 0.5564 1.43400000 13.50900000 21.19599999 + 52 18 1 -1.1128 3.36900000 17.88600000 25.10900001 + 53 18 2 0.5564 3.65500000 17.20000000 26.76599999 + 54 18 2 0.5564 4.77200001 18.97699999 24.49999999 + 55 19 1 -1.1128 34.76400000 20.80300000 0.94800001 + 56 19 2 0.5564 35.20999999 21.26700001 2.81599999 + 57 19 2 0.5564 35.96200001 21.72599999 0.13099999 + 58 20 1 -1.1128 2.83600000 24.17799999 15.22900000 + 59 20 2 0.5564 2.79500000 22.34599999 14.87600001 + 60 20 2 0.5564 2.41399999 24.11500000 17.13000001 + 61 21 1 -1.1128 33.00000000 24.48100000 15.23000000 + 62 21 2 0.5564 34.63999999 24.80400001 15.01299999 + 63 21 2 0.5564 32.40100000 25.76400000 14.29500001 + 64 22 1 -1.1128 0.40399999 26.77900001 23.39999999 + 65 22 2 0.5564 1.35300001 27.24800000 24.98700001 + 66 22 2 0.5564 1.54600001 28.05000000 22.31700001 + 67 23 1 -1.1128 34.22200000 21.38000000 25.41799999 + 68 23 2 0.5564 35.66899999 20.15100000 25.31700001 + 69 23 2 0.5564 32.96000000 21.18000000 23.99200000 + 70 24 1 -1.1128 33.25900000 17.43800000 32.48000000 + 71 24 2 0.5564 33.31399999 18.78200000 33.88300001 + 72 24 2 0.5564 32.74300001 18.18100001 30.87100000 + 73 25 1 -1.1128 4.46300000 21.97900000 3.93600000 + 74 25 2 0.5564 5.85600000 23.08400001 3.39999999 + 75 25 2 0.5564 3.98600000 22.18000000 5.60200000 + 76 26 1 -1.1128 6.25800000 25.85100001 8.52000000 + 77 26 2 0.5564 5.76700000 27.69300001 8.47600000 + 78 26 2 0.5564 7.20200001 25.50600000 10.18600000 + 79 27 1 -1.1128 0.60099999 29.73699999 12.74700001 + 80 27 2 0.5564 -0.68500000 30.84200000 12.34999999 + 81 27 2 0.5564 1.33600000 30.71600000 14.03099999 + 82 28 1 -1.1128 7.56300000 28.19100001 24.33300000 + 83 28 2 0.5564 9.20100000 28.82800000 24.68400000 + 84 28 2 0.5564 7.38100001 27.62100000 22.79900000 + 85 29 1 -1.1128 3.65300000 27.10900001 27.77200001 + 86 29 2 0.5564 5.12600000 27.01500000 26.77200001 + 87 29 2 0.5564 3.03099999 28.75600000 27.69800000 + 88 30 1 -1.1128 2.59600001 23.99100001 32.47600000 + 89 30 2 0.5564 2.87900000 24.79099999 30.85899999 + 90 30 2 0.5564 4.00300000 22.91299999 32.70099999 + 91 31 1 -1.1128 3.08300000 31.31700001 3.64399999 + 92 31 2 0.5564 4.13300000 30.58900001 2.53900001 + 93 31 2 0.5564 4.21800000 32.17300001 5.03700001 + 94 32 1 -1.1128 4.66100001 30.55500000 9.36799999 + 95 32 2 0.5564 3.18400001 29.84300000 10.13200000 + 96 32 2 0.5564 4.35800000 32.44800000 9.12600000 + 97 33 1 -1.1128 3.46499999 32.53700000 15.77800000 + 98 33 2 0.5564 5.07200000 31.81899999 15.90300000 + 99 33 2 0.5564 4.05500001 34.25699999 15.28400000 + 100 34 1 -1.1128 4.21500000 29.15299999 20.31700001 + 101 34 2 0.5564 3.65799999 30.17600000 18.84200000 + 102 34 2 0.5564 4.95899999 30.29100000 21.44900001 + 103 35 1 -1.1128 1.12600000 31.33300000 28.76800001 + 104 35 2 0.5564 2.39500000 31.12399999 29.92500000 + 105 35 2 0.5564 0.76800001 33.09199999 28.89799999 + 106 36 1 -1.1128 4.88100000 32.61600000 32.30200000 + 107 36 2 0.5564 6.58800000 32.91100000 31.72500001 + 108 36 2 0.5564 4.48599999 34.03700001 33.24900001 + 109 37 1 -1.1128 8.96200001 5.55600000 0.15100000 + 110 37 2 0.5564 9.65200000 6.99100001 0.85899999 + 111 37 2 0.5564 9.17300001 4.47700000 1.64500000 + 112 38 1 -1.1128 1.83300001 3.51799999 5.67900001 + 113 38 2 0.5564 2.88900000 2.73100000 6.78800000 + 114 38 2 0.5564 2.78900000 4.18700000 4.14700000 + 115 39 1 -1.1128 10.51000001 34.72599999 13.07300001 + 116 39 2 0.5564 11.91999999 34.11800000 11.91900001 + 117 39 2 0.5564 11.29500001 34.96800000 14.74100000 + 118 40 1 -1.1128 7.21200000 0.04199999 22.45399999 + 119 40 2 0.5564 6.92400000 0.47000000 24.17200000 + 120 40 2 0.5564 8.31900000 1.22799999 21.65300000 + 121 41 1 -1.1128 6.36500000 2.01000000 27.54400000 + 122 41 2 0.5564 5.95400000 3.58500000 26.85199999 + 123 41 2 0.5564 7.75800001 2.54900000 28.69600000 + 124 42 1 -1.1128 10.83300001 3.14000000 30.78699999 + 125 42 2 0.5564 12.69700001 2.97500000 30.86700000 + 126 42 2 0.5564 10.38899999 3.70000001 32.40399999 + 127 43 1 -1.1128 8.68400000 9.34200001 3.91200001 + 128 43 2 0.5564 6.98500000 9.25600001 4.77299999 + 129 43 2 0.5564 8.68400000 10.80899999 3.01100000 + 130 44 1 -1.1128 4.87299999 9.91900001 7.70700000 + 131 44 2 0.5564 3.69800000 9.77100000 6.19400000 + 132 44 2 0.5564 5.04700000 11.96100000 7.62400000 + 133 45 1 -1.1128 10.03099999 5.01800000 9.69900000 + 134 45 2 0.5564 9.67500001 3.38199999 10.34000000 + 135 45 2 0.5564 9.13200000 5.98700001 10.82500000 + 136 46 1 -1.1128 11.24599999 3.91800000 21.92900000 + 137 46 2 0.5564 12.61400001 2.77000000 22.34100000 + 138 46 2 0.5564 12.07300001 5.68600001 21.49699999 + 139 47 1 -1.1128 6.82500000 7.16400000 25.70799999 + 140 47 2 0.5564 8.03600000 8.37400001 25.98000001 + 141 47 2 0.5564 5.20600001 7.90000000 25.89099999 + 142 48 1 -1.1128 10.17099999 12.81100001 0.29500001 + 143 48 2 0.5564 10.03300000 12.81800000 -1.60900000 + 144 48 2 0.5564 9.87999999 14.49200001 0.48000000 + 145 49 1 -1.1128 8.19000000 17.40200000 1.25299999 + 146 49 2 0.5564 9.47199999 18.53100000 1.25299999 + 147 49 2 0.5564 6.35100000 17.81700000 1.56800001 + 148 50 1 -1.1128 11.23300000 16.18800001 8.29900001 + 149 50 2 0.5564 10.29100000 17.68900000 8.16600001 + 150 50 2 0.5564 12.76800001 17.12300001 8.73299999 + 151 51 1 -1.1128 6.38599999 8.00199999 12.84600000 + 152 51 2 0.5564 7.70099999 8.89600000 13.65500000 + 153 51 2 0.5564 5.59100000 8.87699999 11.51900000 + 154 52 1 -1.1128 8.18400001 10.41900000 18.84799999 + 155 52 2 0.5564 9.49800000 9.43400000 19.90500001 + 156 52 2 0.5564 6.88200000 9.02699999 18.94800001 + 157 53 1 -1.1128 10.80600000 14.43100000 21.32799999 + 158 53 2 0.5564 9.17700001 13.53100000 20.67000000 + 159 53 2 0.5564 11.34400000 15.69600000 20.44800000 + 160 54 1 -1.1128 9.23700000 13.92800000 30.34100000 + 161 54 2 0.5564 10.77900001 14.83900000 30.52199999 + 162 54 2 0.5564 9.96500000 13.19199999 28.89900000 + 163 55 1 -1.1128 10.91800000 21.70700000 1.86400000 + 164 55 2 0.5564 10.28000000 23.44900001 2.27900000 + 165 55 2 0.5564 12.70799999 21.45600000 1.74900000 + 166 56 1 -1.1128 9.35300001 16.12500000 13.92699999 + 167 56 2 0.5564 9.93799999 17.59399999 14.61800001 + 168 56 2 0.5564 9.51799999 16.36000001 12.24400000 + 169 57 1 -1.1128 10.37099999 11.10700000 14.26800000 + 170 57 2 0.5564 9.64399999 10.40600001 15.85899999 + 171 57 2 0.5564 9.43400000 12.52300000 14.11699999 + 172 58 1 -1.1128 3.35100000 22.76899999 20.19599999 + 173 58 2 0.5564 2.05500001 23.68600001 21.50300001 + 174 58 2 0.5564 2.45200000 21.40100000 19.41300000 + 175 59 1 -1.1128 6.83600000 21.32900000 23.19899999 + 176 59 2 0.5564 8.24900001 20.84799999 22.32000001 + 177 59 2 0.5564 5.66800001 21.84099999 21.88600000 + 178 60 1 -1.1128 4.60399999 15.64900000 30.04300000 + 179 60 2 0.5564 6.45300001 15.21699999 30.20700000 + 180 60 2 0.5564 3.82200001 14.76199999 31.56200000 + 181 61 1 -1.1128 7.12500000 19.97600001 9.42100001 + 182 61 2 0.5564 5.91800000 20.45300001 10.72999999 + 183 61 2 0.5564 8.09899999 21.49600001 9.49100000 + 184 62 1 -1.1128 9.06299999 25.91200001 13.18600000 + 185 62 2 0.5564 10.34999999 26.57199999 12.36700001 + 186 62 2 0.5564 9.67999999 24.36700001 13.69700001 + 187 63 1 -1.1128 8.02200000 22.34299999 17.04199999 + 188 63 2 0.5564 9.14400000 23.36700001 18.07399999 + 189 63 2 0.5564 6.56200000 23.46200000 16.85199999 + 190 64 1 -1.1128 10.76199999 26.28499999 19.96299999 + 191 64 2 0.5564 11.03600000 27.96599999 20.53800000 + 192 64 2 0.5564 11.07800000 25.40100000 21.45600000 + 193 65 1 -1.1128 9.15800000 22.90199999 28.39100000 + 194 65 2 0.5564 8.21900000 23.52800001 27.08499999 + 195 65 2 0.5564 8.08900000 21.76000000 29.50900000 + 196 66 1 -1.1128 6.21900000 20.15800000 31.92100000 + 197 66 2 0.5564 5.63500000 18.51099999 31.16100000 + 198 66 2 0.5564 7.53000000 19.62400000 33.07100000 + 199 67 1 -1.1128 11.19100001 31.50900000 2.61700000 + 200 67 2 0.5564 10.46000001 32.21399999 4.10800000 + 201 67 2 0.5564 13.17600000 31.75099999 2.57700000 + 202 68 1 -1.1128 4.74799999 0.05500001 8.60500000 + 203 68 2 0.5564 5.38000000 0.51700000 10.18300000 + 204 68 2 0.5564 6.05000000 -0.30600001 7.48000000 + 205 69 1 -1.1128 8.69500000 30.80899999 15.73100000 + 206 69 2 0.5564 9.18899999 32.10300000 14.49500000 + 207 69 2 0.5564 8.44699999 29.06900000 14.86800000 + 208 70 1 -1.1128 10.12799999 31.40200000 20.76599999 + 209 70 2 0.5564 9.45600000 30.90500001 19.15500000 + 210 70 2 0.5564 9.01999999 32.73100000 21.41500000 + 211 71 1 -1.1128 12.23800001 30.16200000 25.83699999 + 212 71 2 0.5564 11.41799999 30.90800001 27.10999999 + 213 71 2 0.5564 12.39600001 31.33100001 24.67800000 + 214 72 1 -1.1128 10.39500000 32.53700000 30.62400000 + 215 72 2 0.5564 11.04199999 34.33899999 30.75099999 + 216 72 2 0.5564 11.37800001 31.48599999 31.53800000 + 217 73 1 -1.1128 10.43800000 3.62599999 5.08700001 + 218 73 2 0.5564 12.43500001 4.08200000 5.13600000 + 219 73 2 0.5564 9.82200001 4.28400000 6.68100000 + 220 74 1 -1.1128 14.76199999 3.40100000 13.77599999 + 221 74 2 0.5564 16.51799999 3.82400000 13.37600000 + 222 74 2 0.5564 13.75200000 4.75700000 12.96400000 + 223 75 1 -1.1128 12.38199999 1.01200001 17.64300001 + 224 75 2 0.5564 13.34599999 1.99700000 16.44400000 + 225 75 2 0.5564 11.93100000 2.13300000 18.99800001 + 226 76 1 -1.1128 15.27799999 1.29300000 24.55900000 + 227 76 2 0.5564 16.07100000 0.94600000 26.36500000 + 228 76 2 0.5564 15.79399999 0.19899999 23.49900000 + 229 77 1 -1.1128 22.22600000 31.62700000 24.71199999 + 230 77 2 0.5564 23.33800001 32.59500000 23.87600001 + 231 77 2 0.5564 22.16100000 30.05300000 24.13200000 + 232 78 1 -1.1128 15.63999999 1.84700001 32.71700000 + 233 78 2 0.5564 17.48800000 2.47300000 31.87400000 + 234 78 2 0.5564 16.40300001 0.86900001 34.26700001 + 235 79 1 -1.1128 14.85800001 10.19899999 2.75400001 + 236 79 2 0.5564 13.36000001 10.71199999 2.28199999 + 237 79 2 0.5564 14.56000000 9.31600000 4.55900000 + 238 80 1 -1.1128 15.71700000 8.46900000 10.73900000 + 239 80 2 0.5564 17.32300000 9.58100000 10.87500000 + 240 80 2 0.5564 14.57400000 9.63100000 10.22099999 + 241 81 1 -1.1128 15.24800000 10.39800000 16.52500001 + 242 81 2 0.5564 16.32400001 9.18100001 16.14899999 + 243 81 2 0.5564 14.17200000 10.48800000 15.09800001 + 244 82 1 -1.1128 13.22600000 8.43800000 20.80100001 + 245 82 2 0.5564 14.04300000 8.99600000 19.29500001 + 246 82 2 0.5564 14.66100001 7.80200000 22.09300000 + 247 83 1 -1.1128 10.17300001 10.96100000 25.87500000 + 248 83 2 0.5564 11.47700000 10.22300000 26.94000000 + 249 83 2 0.5564 11.26900000 10.73800000 24.34299999 + 250 84 1 -1.1128 12.79200000 7.73699999 29.17300001 + 251 84 2 0.5564 12.19899999 6.03799999 29.47499999 + 252 84 2 0.5564 14.42700000 7.44999999 29.61700000 + 253 85 1 -1.1128 15.18000000 19.49800000 3.57800000 + 254 85 2 0.5564 14.88300001 17.59600001 4.08000001 + 255 85 2 0.5564 16.75400001 19.57899999 2.62599999 + 256 86 1 -1.1128 12.51700000 11.09300000 7.70099999 + 257 86 2 0.5564 12.22400001 12.77800000 7.55500000 + 258 86 2 0.5564 11.15000000 10.39299999 7.05700000 + 259 87 1 -1.1128 16.26600000 16.27099999 10.75800001 + 260 87 2 0.5564 16.50700001 15.79500000 12.76800001 + 261 87 2 0.5564 17.72500001 16.97699999 10.29200001 + 262 88 1 -1.1128 14.06900000 18.39900001 18.89700000 + 263 88 2 0.5564 15.51300000 17.52300000 18.15500000 + 264 88 2 0.5564 14.95800001 18.70900000 20.67300000 + 265 89 1 -1.1128 14.09899999 15.48000000 25.51000001 + 266 89 2 0.5564 13.69800000 16.87200001 26.93799999 + 267 89 2 0.5564 12.56700000 15.37900000 24.44400000 + 268 90 1 -1.1128 13.30900000 17.57400000 30.29200001 + 269 90 2 0.5564 14.93700001 16.93399999 30.81000000 + 270 90 2 0.5564 13.96900001 19.49400000 30.01200001 + 271 91 1 -1.1128 18.37099999 23.25699999 0.92500000 + 272 91 2 0.5564 19.47899999 23.48000000 2.32099999 + 273 91 2 0.5564 19.08700001 24.32499999 -0.36900000 + 274 92 1 -1.1128 12.10000000 21.72999999 11.35500000 + 275 92 2 0.5564 13.14100001 22.28700000 12.74300001 + 276 92 2 0.5564 13.46700001 22.23600000 10.24400000 + 277 93 1 -1.1128 12.16300001 23.29000000 23.59699999 + 278 93 2 0.5564 11.32400001 22.73600001 24.94900000 + 279 93 2 0.5564 13.88200000 22.87200001 23.84000001 + 280 94 1 -1.1128 20.17300001 26.76100001 22.62800000 + 281 94 2 0.5564 20.20600001 26.53200001 20.79200000 + 282 94 2 0.5564 21.55600000 25.74200000 23.38899999 + 283 95 1 -1.1128 16.70099999 21.16500000 22.60500000 + 284 95 2 0.5564 18.02800000 20.68600001 23.84799999 + 285 95 2 0.5564 17.10400000 22.86599999 21.94900000 + 286 96 1 -1.1128 11.39100000 26.46099999 33.70499999 + 287 96 2 0.5564 9.84099999 27.19199999 34.04800001 + 288 96 2 0.5564 11.77599999 25.53999999 35.24300000 + 289 97 1 -1.1128 9.89799999 25.98900000 4.55300001 + 290 97 2 0.5564 8.90199999 26.13099999 6.03900000 + 291 97 2 0.5564 10.28700000 27.80600000 4.37600000 + 292 98 1 -1.1128 14.30800000 26.96000000 10.87699999 + 293 98 2 0.5564 15.30200000 27.40500000 12.17300001 + 294 98 2 0.5564 15.46300000 26.15100000 9.63299999 + 295 99 1 -1.1128 13.43300000 22.96000000 16.90400000 + 296 99 2 0.5564 13.40900000 24.13099999 18.13200000 + 297 99 2 0.5564 13.62400000 21.19100001 17.52000000 + 298 100 1 -1.1128 16.40900000 26.76800001 26.87500000 + 299 100 2 0.5564 17.58999999 26.98700001 25.43100000 + 300 100 2 0.5564 14.75099999 27.70300000 26.23000000 + 301 101 1 -1.1128 14.40500000 22.73299999 29.89200000 + 302 101 2 0.5564 15.42300000 23.07900000 28.49400000 + 303 101 2 0.5564 12.82600001 23.25900000 29.41600000 + 304 102 1 -1.1128 6.90500001 29.40800000 0.74900000 + 305 102 2 0.5564 8.42800001 30.48300000 1.56700000 + 306 102 2 0.5564 6.35300001 30.81400000 -0.44400000 + 307 103 1 -1.1128 9.18899999 34.15900001 6.50900000 + 308 103 2 0.5564 10.19800000 34.19300000 8.00199999 + 309 103 2 0.5564 9.89000001 35.69200000 5.78500000 + 310 104 1 -1.1128 14.25600001 32.31600000 9.36900000 + 311 104 2 0.5564 15.73299999 32.86700000 9.48599999 + 312 104 2 0.5564 14.75400001 30.67000000 10.09000000 + 313 105 1 -1.1128 14.71400000 30.84099999 16.51600000 + 314 105 2 0.5564 13.74799999 29.55099999 17.27900000 + 315 105 2 0.5564 13.21800000 31.93300001 16.61400001 + 316 106 1 -1.1128 18.40900000 33.64100000 20.61100001 + 317 106 2 0.5564 19.60099999 32.27400001 21.11500000 + 318 106 2 0.5564 17.36000001 32.65500000 19.51799999 + 319 107 1 -1.1128 16.06200001 28.63800000 32.20700000 + 320 107 2 0.5564 14.64800000 27.95800001 33.25299999 + 321 107 2 0.5564 15.75200000 28.01400000 30.52199999 + 322 108 1 -1.1128 16.20000000 30.89499999 1.47300000 + 323 108 2 0.5564 16.62599999 29.96800000 -0.13000001 + 324 108 2 0.5564 17.16699999 29.83300001 2.92699999 + 325 109 1 -1.1128 20.27799999 3.52899999 6.04800001 + 326 109 2 0.5564 20.97699999 3.61100001 4.57500001 + 327 109 2 0.5564 21.31200000 4.51300000 7.25100000 + 328 110 1 -1.1128 23.07900000 5.77800000 10.40800000 + 329 110 2 0.5564 24.65000001 6.25900000 10.83800000 + 330 110 2 0.5564 22.34200001 7.60900000 10.17799999 + 331 111 1 -1.1128 19.58100000 2.03099999 12.10999999 + 332 111 2 0.5564 19.03900000 1.08200000 10.44000000 + 333 111 2 0.5564 21.14100001 2.99100001 11.85100001 + 334 112 1 -1.1128 22.00500001 3.22300000 23.17799999 + 335 112 2 0.5564 21.42899999 4.09000000 24.55399999 + 336 112 2 0.5564 20.65400001 1.79099999 22.71100001 + 337 113 1 -1.1128 16.63000000 6.42200000 23.79200000 + 338 113 2 0.5564 16.21900000 4.80400001 24.40600001 + 339 113 2 0.5564 17.06600001 7.12799999 25.28199999 + 340 114 1 -1.1128 21.67599999 5.56400001 28.15800000 + 341 114 2 0.5564 20.65799999 6.71700000 29.18499999 + 342 114 2 0.5564 23.41300000 5.82800000 28.99600000 + 343 115 1 -1.1128 15.25699999 5.26500000 5.62599999 + 344 115 2 0.5564 16.91400000 4.51900000 5.48999999 + 345 115 2 0.5564 15.14400000 6.15000000 6.97200000 + 346 116 1 -1.1128 20.13700000 11.08200000 10.43700000 + 347 116 2 0.5564 20.02100000 10.94700000 8.73299999 + 348 116 2 0.5564 21.02500000 12.55500000 10.85300000 + 349 117 1 -1.1128 23.08900000 14.62700000 12.43700000 + 350 117 2 0.5564 24.71600000 15.25400000 12.73600001 + 351 117 2 0.5564 23.28400000 13.22799999 13.65300000 + 352 118 1 -1.1128 24.08300000 12.64900000 22.56600000 + 353 118 2 0.5564 22.39700000 12.66300000 23.04199999 + 354 118 2 0.5564 24.90100001 13.85100001 23.56499999 + 355 119 1 -1.1128 17.86500001 7.90899999 30.03600000 + 356 119 2 0.5564 17.50900000 8.04499999 31.98200000 + 357 119 2 0.5564 18.07800000 9.58200001 29.31799999 + 358 120 1 -1.1128 18.82400000 8.48599999 0.10400000 + 359 120 2 0.5564 19.99700000 10.19100001 -0.05700000 + 360 120 2 0.5564 17.07700001 8.99800001 0.77900001 + 361 121 1 -1.1128 20.12200000 9.14300000 5.34299999 + 362 121 2 0.5564 19.37300000 8.81899999 3.82100000 + 363 121 2 0.5564 21.99800001 8.77599999 5.12799999 + 364 122 1 -1.1128 16.41300000 14.45900000 5.85499999 + 365 122 2 0.5564 15.53599999 13.00700000 5.23899999 + 366 122 2 0.5564 16.00599999 14.72500001 7.73699999 + 367 123 1 -1.1128 17.56099999 15.06600001 15.65400001 + 368 123 2 0.5564 17.57500001 13.39800000 16.05500001 + 369 123 2 0.5564 18.97800000 15.82800000 16.39999999 + 370 124 1 -1.1128 26.37400001 17.04700000 24.81700000 + 371 124 2 0.5564 27.98300000 17.09800001 25.63200001 + 372 124 2 0.5564 25.62900001 18.75099999 24.91900001 + 373 125 1 -1.1128 19.78400000 12.96000000 28.70600000 + 374 125 2 0.5564 21.66199999 13.05500001 28.87100000 + 375 125 2 0.5564 19.54500000 14.06999999 27.14300000 + 376 126 1 -1.1128 17.89099999 16.73299999 32.49900000 + 377 126 2 0.5564 18.32700000 15.24000000 31.27700001 + 378 126 2 0.5564 18.63299999 18.33500001 31.69300001 + 379 127 1 -1.1128 23.73299999 23.02399999 1.66300000 + 380 127 2 0.5564 24.80000000 24.05199999 2.77599999 + 381 127 2 0.5564 24.69300001 22.61800001 0.19800000 + 382 128 1 -1.1128 20.78900000 18.44000000 9.44299999 + 383 128 2 0.5564 20.76599999 17.25699999 7.88100000 + 384 128 2 0.5564 21.89600000 17.34500000 10.38500001 + 385 129 1 -1.1128 21.57400000 17.49299999 17.83800000 + 386 129 2 0.5564 20.59699999 18.95500001 17.21800000 + 387 129 2 0.5564 22.53800000 16.87400000 16.25100000 + 388 130 1 -1.1128 19.16800000 14.74799999 24.13099999 + 389 130 2 0.5564 19.71100001 16.39000000 23.71199999 + 390 130 2 0.5564 17.42899999 14.69500000 24.40300001 + 391 131 1 -1.1128 22.14899999 20.19800000 24.97699999 + 392 131 2 0.5564 21.63900001 20.92400000 26.48599999 + 393 131 2 0.5564 22.65600000 21.65700001 24.41099999 + 394 132 1 -1.1128 20.56499999 20.79200000 29.60000001 + 395 132 2 0.5564 22.26399999 20.40900000 30.21399999 + 396 132 2 0.5564 20.54800000 22.40800000 30.59699999 + 397 133 1 -1.1128 20.80200000 26.54699999 9.61499999 + 398 133 2 0.5564 20.09899999 27.98399999 8.33800001 + 399 133 2 0.5564 21.27700001 27.53900001 11.32499999 + 400 134 1 -1.1128 16.28300000 23.58900001 7.77900001 + 401 134 2 0.5564 16.09300000 21.97300001 6.71199999 + 402 134 2 0.5564 17.90100001 22.97100000 8.15400000 + 403 135 1 -1.1128 18.46900000 29.79799999 13.56800001 + 404 135 2 0.5564 19.71199999 31.21600000 13.50600000 + 405 135 2 0.5564 16.87200001 30.34299999 14.39600001 + 406 136 1 -1.1128 18.79000001 21.71199999 16.06000000 + 407 136 2 0.5564 19.87800000 23.09000000 16.48500001 + 408 136 2 0.5564 17.20100000 22.32600000 15.81899999 + 409 137 1 -1.1128 21.74700001 26.08400001 16.34900001 + 410 137 2 0.5564 20.78300001 27.02100000 15.29999999 + 411 137 2 0.5564 22.70499999 27.32799999 17.20600001 + 412 138 1 -1.1128 20.76899999 26.21100000 32.05000000 + 413 138 2 0.5564 21.48800000 27.40399999 33.32799999 + 414 138 2 0.5564 18.98900000 26.71000000 32.14500001 + 415 139 1 -1.1128 19.82000000 29.18100001 5.55900000 + 416 139 2 0.5564 20.99100001 29.50900000 4.10900001 + 417 139 2 0.5564 19.43100000 31.01800000 6.22099999 + 418 140 1 -1.1128 19.24000000 33.86700000 7.99300000 + 419 140 2 0.5564 19.10700000 35.03900000 6.60399999 + 420 140 2 0.5564 20.69700001 33.67100000 9.06299999 + 421 141 1 -1.1128 22.51099999 34.97600001 15.79300000 + 422 141 2 0.5564 23.71600000 36.16300001 16.60300000 + 423 141 2 0.5564 21.69900000 36.15000000 14.46700001 + 424 142 1 -1.1128 22.62199999 30.28400000 19.06900000 + 425 142 2 0.5564 22.04899999 31.35100000 17.72500001 + 426 142 2 0.5564 24.41099999 30.77299999 19.57599999 + 427 143 1 -1.1128 18.63900001 33.61100001 28.36900000 + 428 143 2 0.5564 18.22600000 32.15900001 29.10300000 + 429 143 2 0.5564 19.90600000 33.00800000 27.15800000 + 430 144 1 -1.1128 22.52000000 1.32499999 31.92600001 + 431 144 2 0.5564 22.80300000 2.66800001 30.79600000 + 432 144 2 0.5564 21.04499999 0.42499999 31.12200000 + 433 145 1 -1.1128 21.75400001 3.78900000 1.15900001 + 434 145 2 0.5564 22.08499999 2.78500000 -0.18000000 + 435 145 2 0.5564 20.85000000 5.17500000 0.61000000 + 436 146 1 -1.1128 28.45699999 5.53900001 12.13300000 + 437 146 2 0.5564 29.48900001 4.39000000 11.18200000 + 438 146 2 0.5564 29.16100000 7.13099999 12.58700000 + 439 147 1 -1.1128 22.49500000 5.96599999 17.32400001 + 440 147 2 0.5564 24.37700000 5.37900000 17.39299999 + 441 147 2 0.5564 21.90600000 5.49100000 18.85700000 + 442 148 1 -1.1128 28.12799999 3.30400000 22.28700000 + 443 148 2 0.5564 28.12300001 2.99899999 20.49100000 + 444 148 2 0.5564 26.53299999 3.35500000 22.87600001 + 445 149 1 -1.1128 28.37800001 10.45500000 27.26600000 + 446 149 2 0.5564 30.01900001 10.29200001 28.05100000 + 447 149 2 0.5564 28.63500000 10.03900000 25.46300000 + 448 150 1 -1.1128 27.03099999 8.35300001 34.80600000 + 449 150 2 0.5564 26.11600001 9.98399999 34.57100001 + 450 150 2 0.5564 28.68500000 8.95100001 34.73900000 + 451 151 1 -1.1128 24.95100001 8.15999999 4.45399999 + 452 151 2 0.5564 25.93000001 9.61600000 5.15999999 + 453 151 2 0.5564 25.94700000 7.99400001 2.72400000 + 454 152 1 -1.1128 26.93700001 12.43599999 6.86900001 + 455 152 2 0.5564 25.49200001 13.28400000 6.70799999 + 456 152 2 0.5564 27.68900000 13.33199999 8.26600000 + 457 153 1 -1.1128 23.36500000 11.21399999 16.93300001 + 458 153 2 0.5564 22.24700000 9.74399999 16.78900000 + 459 153 2 0.5564 23.26399999 12.03500000 18.53900001 + 460 154 1 -1.1128 28.32099999 8.75900000 22.15800000 + 461 154 2 0.5564 27.66199999 6.89499999 22.48200001 + 462 154 2 0.5564 26.97100000 9.71000000 21.90199999 + 463 155 1 -1.1128 27.07100000 6.10900001 29.55500000 + 464 155 2 0.5564 27.59100000 7.66300000 28.85700000 + 465 155 2 0.5564 27.30400000 6.32000001 31.26100000 + 466 156 1 -1.1128 22.47400000 11.70400001 34.63999999 + 467 156 2 0.5564 22.75200000 13.30400000 35.58400000 + 468 156 2 0.5564 22.84000001 12.09000000 33.03000001 + 469 157 1 -1.1128 21.65600000 14.97100000 5.61499999 + 470 157 2 0.5564 21.68999999 15.86000000 3.97699999 + 471 157 2 0.5564 19.96400000 14.22500000 5.77400000 + 472 158 1 -1.1128 28.53900001 21.49200001 9.82000000 + 473 158 2 0.5564 27.28800001 22.18100001 8.68800000 + 474 158 2 0.5564 28.06500000 22.42000000 11.60200000 + 475 159 1 -1.1128 28.36399999 16.01999999 11.10900001 + 476 159 2 0.5564 30.03300000 16.64900000 12.08900000 + 477 159 2 0.5564 28.45600000 17.44000000 10.08200000 + 478 160 1 -1.1128 0.05400000 13.68600001 18.10300000 + 479 160 2 0.5564 -1.71400000 12.92800000 18.84099999 + 480 160 2 0.5564 1.00800000 12.42899999 17.38300000 + 481 161 1 -1.1128 24.63600001 12.89400001 29.95700000 + 482 161 2 0.5564 25.90600000 13.91400000 31.18300000 + 483 161 2 0.5564 25.64100000 11.60900000 29.16200000 + 484 162 1 -1.1128 21.54800000 17.25000000 0.74900000 + 485 162 2 0.5564 21.84300000 19.02600000 0.90500001 + 486 162 2 0.5564 20.38500001 16.71600000 -0.69700001 + 487 163 1 -1.1128 26.09499999 27.27400001 4.52000000 + 488 163 2 0.5564 27.88900000 26.45800000 4.50500000 + 489 163 2 0.5564 25.64800000 26.96999999 6.16500000 + 490 164 1 -1.1128 23.61000000 22.51499999 8.00800000 + 491 164 2 0.5564 22.65300000 21.18700000 8.73900000 + 492 164 2 0.5564 22.28600000 24.09499999 8.44400000 + 493 165 1 -1.1128 27.35500000 18.92900000 18.18000000 + 494 165 2 0.5564 27.20000000 20.34900001 17.15500000 + 495 165 2 0.5564 25.57899999 18.32200000 18.77000000 + 496 166 1 -1.1128 26.76500001 23.63299999 14.44400000 + 497 166 2 0.5564 27.44100000 25.29800000 13.65099999 + 498 166 2 0.5564 25.08600000 24.25600001 14.74900000 + 499 167 1 -1.1128 31.47800001 20.76899999 20.98600000 + 500 167 2 0.5564 30.44000000 22.50900000 21.13499999 + 501 167 2 0.5564 30.56700000 19.65600000 20.04300000 + 502 168 1 -1.1128 24.81199999 20.41200000 32.66800001 + 503 168 2 0.5564 26.24199999 21.47800001 31.87400000 + 504 168 2 0.5564 25.78699999 19.02300001 33.15800000 + 505 169 1 -1.1128 22.10500001 29.07600000 0.92800000 + 506 169 2 0.5564 23.29599999 27.92299999 1.73900000 + 507 169 2 0.5564 22.62300000 30.99400001 0.88200000 + 508 170 1 -1.1128 29.57199999 31.25600001 8.62599999 + 509 170 2 0.5564 30.79500000 30.20299999 7.73600001 + 510 170 2 0.5564 28.27700001 31.51900000 7.25999999 + 511 171 1 -1.1128 31.81700000 34.84300000 18.28300000 + 512 171 2 0.5564 32.43800000 34.38899999 16.47400000 + 513 171 2 0.5564 32.74300001 36.42200000 18.34100000 + 514 172 1 -1.1128 27.91500001 25.60099999 19.03300000 + 515 172 2 0.5564 29.35800000 26.56099999 19.19000000 + 516 172 2 0.5564 28.14800001 24.42899999 17.53000000 + 517 173 1 -1.1128 24.54800000 24.65400001 24.02500000 + 518 173 2 0.5564 25.52800001 25.63500000 22.82400000 + 519 173 2 0.5564 25.29999999 25.20000000 25.64500000 + 520 174 1 -1.1128 28.53999999 22.92200000 30.37000000 + 521 174 2 0.5564 27.41399999 24.09600000 29.78100000 + 522 174 2 0.5564 29.67400000 23.91400000 31.87299999 + 523 175 1 -1.1128 24.96900001 33.62300000 1.01400000 + 524 175 2 0.5564 26.52100001 33.05800000 1.51799999 + 525 175 2 0.5564 24.99000000 34.32200000 -0.68299999 + 526 176 1 -1.1128 23.07500000 32.17099999 11.32400001 + 527 176 2 0.5564 23.31600000 32.77500000 13.09700000 + 528 176 2 0.5564 24.46000001 33.20299999 10.66199999 + 529 177 1 -1.1128 27.49699999 2.73600001 17.22400001 + 530 177 2 0.5564 28.39700000 3.41500000 15.71500001 + 531 177 2 0.5564 28.23400001 1.23300000 17.41200000 + 532 178 1 -1.1128 26.36900000 33.06000000 22.07700001 + 533 178 2 0.5564 26.17000001 34.74600000 22.26399999 + 534 178 2 0.5564 27.59200000 32.40399999 23.32099999 + 535 179 1 -1.1128 30.22099999 30.95000000 25.84300000 + 536 179 2 0.5564 30.30500000 29.03799999 26.20800000 + 537 179 2 0.5564 30.36300001 31.97900000 27.41399999 + 538 180 1 -1.1128 24.97300001 26.73200000 28.60700001 + 539 180 2 0.5564 25.38500001 28.36900000 29.24800000 + 540 180 2 0.5564 23.33000000 26.59699999 29.23400001 + 541 181 1 -1.1128 32.16500000 4.85700000 2.25800000 + 542 181 2 0.5564 32.41700001 6.19500001 1.15700000 + 543 181 2 0.5564 32.61499999 3.72700000 1.11200000 + 544 182 1 -1.1128 28.06699999 3.53299999 5.21699999 + 545 182 2 0.5564 26.96000000 4.44699999 4.15800000 + 546 182 2 0.5564 29.87500000 3.86300000 4.44800000 + 547 183 1 -1.1128 33.27900000 2.78200000 13.02800000 + 548 183 2 0.5564 33.70799999 3.95500001 11.81700000 + 549 183 2 0.5564 33.65600000 3.54500000 14.63100000 + 550 184 1 -1.1128 34.27799999 4.94400001 17.49200001 + 551 184 2 0.5564 33.43800000 6.56300000 17.87600001 + 552 184 2 0.5564 34.90600000 4.45200000 18.99499999 + 553 185 1 -1.1128 32.36300001 1.90800001 26.09199999 + 554 185 2 0.5564 31.94099999 1.68299999 24.26800000 + 555 185 2 0.5564 33.85000000 1.39000000 26.90400000 + 556 186 1 -1.1128 27.98200000 0.41799999 28.24100000 + 557 186 2 0.5564 27.51600000 2.08000001 28.30900000 + 558 186 2 0.5564 29.59300001 0.17600000 27.29900001 + 559 187 1 -1.1128 28.84500000 14.67200001 2.72400000 + 560 187 2 0.5564 27.96299999 13.93000001 4.13900000 + 561 187 2 0.5564 30.38599999 15.71400000 3.37900000 + 562 188 1 -1.1128 28.08300000 10.61800001 14.29800000 + 563 188 2 0.5564 28.62300000 12.15999999 13.29300000 + 564 188 2 0.5564 26.48599999 11.01500000 15.37900000 + 565 189 1 -1.1128 33.86700000 10.54500000 13.30600001 + 566 189 2 0.5564 35.16500000 9.61200000 13.81000000 + 567 189 2 0.5564 33.61499999 10.27000001 11.51300000 + 568 190 1 -1.1128 31.79000001 9.69600000 18.22300000 + 569 190 2 0.5564 30.48400000 9.33400000 19.42100001 + 570 190 2 0.5564 30.83399999 10.09600000 16.92900000 + 571 191 1 -1.1128 30.14100001 15.00599999 21.53200001 + 572 191 2 0.5564 28.56499999 15.59399999 22.09899999 + 573 191 2 0.5564 30.94200000 14.25299999 23.07700001 + 574 192 1 -1.1128 32.79799999 10.73200000 30.67999999 + 575 192 2 0.5564 34.07300001 9.52800001 30.79900000 + 576 192 2 0.5564 32.99100001 11.51200000 28.98300000 + 577 193 1 -1.1128 33.65200000 16.26500000 5.08600000 + 578 193 2 0.5564 35.39900001 16.23899999 4.72999999 + 579 193 2 0.5564 33.50300001 17.93900000 5.63100000 + 580 194 1 -1.1128 31.94700000 10.79900000 7.94300000 + 581 194 2 0.5564 29.89400001 10.54900000 7.61899999 + 582 194 2 0.5564 32.27099999 12.41399999 7.07500000 + 583 195 1 -1.1128 0.32900000 15.51600000 11.74600000 + 584 195 2 0.5564 -0.44600001 14.24900001 12.93900000 + 585 195 2 0.5564 -0.68500000 17.01800000 11.93500000 + 586 196 1 -1.1128 4.26200000 19.16500000 14.30800000 + 587 196 2 0.5564 3.57899999 17.69100000 14.91999999 + 588 196 2 0.5564 5.72299999 19.18300000 15.20400000 + 589 197 1 -1.1128 32.99499999 13.54600001 25.94800001 + 590 197 2 0.5564 32.16699999 15.06000000 26.78699999 + 591 197 2 0.5564 34.42499999 13.80000000 25.00700000 + 592 198 1 -1.1128 1.77299999 13.52400000 34.03700001 + 593 198 2 0.5564 0.22700001 14.40900000 33.44600001 + 594 198 2 0.5564 2.16699999 14.67000000 35.51099999 + 595 199 1 -1.1128 33.02900000 20.52899999 7.24700000 + 596 199 2 0.5564 34.38800000 21.41399999 8.00300000 + 597 199 2 0.5564 31.45100000 20.83100000 8.18200000 + 598 200 1 -1.1128 2.03700001 24.25000000 10.25100000 + 599 200 2 0.5564 3.74300001 25.00800000 9.87600001 + 600 200 2 0.5564 1.89400001 25.04300000 11.90300000 + 601 201 1 -1.1128 32.75300000 19.25900000 13.97600001 + 602 201 2 0.5564 32.79200000 20.88600000 13.79200000 + 603 201 2 0.5564 34.33400000 18.79900000 14.97600001 + 604 202 1 -1.1128 0.39600001 18.67300000 18.69900000 + 605 202 2 0.5564 -1.21100000 18.95000000 19.12700001 + 606 202 2 0.5564 0.46900000 16.97699999 18.43599999 + 607 203 1 -1.1128 30.85499999 18.37000000 27.95899999 + 608 203 2 0.5564 29.75900000 19.68100000 28.68999999 + 609 203 2 0.5564 32.10300000 19.47700000 26.76300000 + 610 204 1 -1.1128 27.72299999 15.99200000 33.09100001 + 611 204 2 0.5564 29.39000000 16.42300000 32.19199999 + 612 204 2 0.5564 27.80100001 15.85899999 34.80400001 + 613 205 1 -1.1128 31.06800000 27.89499999 3.34800000 + 614 205 2 0.5564 32.51700000 27.82500000 4.61000000 + 615 205 2 0.5564 31.52899999 29.45900000 2.32400001 + 616 206 1 -1.1128 35.03900000 28.00800000 6.66300000 + 617 206 2 0.5564 35.96599999 26.93399999 7.68299999 + 618 206 2 0.5564 36.05500001 28.33600000 5.33600000 + 619 207 1 -1.1128 29.35600001 28.19599999 13.02500000 + 620 207 2 0.5564 29.20999999 29.33500001 14.58900001 + 621 207 2 0.5564 28.87400000 29.62900001 11.86700000 + 622 208 1 -1.1128 32.38599999 28.43400000 18.96100000 + 623 208 2 0.5564 33.36799999 28.57400000 20.41099999 + 624 208 2 0.5564 33.41000001 27.40600001 17.94900000 + 625 209 1 -1.1128 30.89799999 25.39000000 25.79900000 + 626 209 2 0.5564 32.36900000 25.91299999 24.58000000 + 627 209 2 0.5564 31.31700001 24.07500000 27.02900000 + 628 210 1 -1.1128 32.25900000 25.61100001 33.10400000 + 629 210 2 0.5564 32.23800001 25.73600001 34.80600000 + 630 210 2 0.5564 33.91999999 25.04199999 32.77500000 + 631 211 1 -1.1128 30.29000000 32.64500000 1.34100000 + 632 211 2 0.5564 29.94900000 32.79300000 -0.43000000 + 633 211 2 0.5564 31.76199999 33.34000000 1.84700001 + 634 212 1 -1.1128 25.53599999 34.23499999 6.46900000 + 635 212 2 0.5564 25.71600000 36.05900001 6.65099999 + 636 212 2 0.5564 25.28300000 33.86599999 4.89499999 + 637 213 1 -1.1128 31.67400000 33.16100000 13.10599999 + 638 213 2 0.5564 31.79300000 34.86300000 13.28100001 + 639 213 2 0.5564 30.42499999 32.92800000 11.78300001 + 640 214 1 -1.1128 33.84400001 32.66800001 22.29599999 + 641 214 2 0.5564 32.75000000 32.23400001 23.52400000 + 642 214 2 0.5564 32.91700000 32.87500000 20.73600001 + 643 215 1 -1.1128 31.60300000 30.54200000 30.80499999 + 644 215 2 0.5564 33.45100000 30.80400001 30.46799999 + 645 215 2 0.5564 31.57500001 28.81599999 31.75600000 + 646 216 1 -1.1128 26.29500001 31.23499999 30.59900000 + 647 216 2 0.5564 27.83399999 30.51499999 30.60700001 + 648 216 2 0.5564 26.36200000 32.91999999 29.85600000 + +Bonds + + 1 1 1 2 + 2 1 1 3 + 3 1 4 5 + 4 1 4 6 + 5 1 7 8 + 6 1 7 9 + 7 1 10 11 + 8 1 10 12 + 9 1 13 14 + 10 1 13 15 + 11 1 16 17 + 12 1 16 18 + 13 1 19 20 + 14 1 19 21 + 15 1 22 23 + 16 1 22 24 + 17 1 25 26 + 18 1 25 27 + 19 1 28 29 + 20 1 28 30 + 21 1 31 32 + 22 1 31 33 + 23 1 34 35 + 24 1 34 36 + 25 1 37 38 + 26 1 37 39 + 27 1 40 41 + 28 1 40 42 + 29 1 43 44 + 30 1 43 45 + 31 1 46 47 + 32 1 46 48 + 33 1 49 50 + 34 1 49 51 + 35 1 52 53 + 36 1 52 54 + 37 1 55 56 + 38 1 55 57 + 39 1 58 59 + 40 1 58 60 + 41 1 61 62 + 42 1 61 63 + 43 1 64 65 + 44 1 64 66 + 45 1 67 68 + 46 1 67 69 + 47 1 70 71 + 48 1 70 72 + 49 1 73 74 + 50 1 73 75 + 51 1 76 77 + 52 1 76 78 + 53 1 79 80 + 54 1 79 81 + 55 1 82 83 + 56 1 82 84 + 57 1 85 86 + 58 1 85 87 + 59 1 88 89 + 60 1 88 90 + 61 1 91 92 + 62 1 91 93 + 63 1 94 95 + 64 1 94 96 + 65 1 97 98 + 66 1 97 99 + 67 1 100 101 + 68 1 100 102 + 69 1 103 104 + 70 1 103 105 + 71 1 106 107 + 72 1 106 108 + 73 1 109 110 + 74 1 109 111 + 75 1 112 113 + 76 1 112 114 + 77 1 115 116 + 78 1 115 117 + 79 1 118 119 + 80 1 118 120 + 81 1 121 122 + 82 1 121 123 + 83 1 124 125 + 84 1 124 126 + 85 1 127 128 + 86 1 127 129 + 87 1 130 131 + 88 1 130 132 + 89 1 133 134 + 90 1 133 135 + 91 1 136 137 + 92 1 136 138 + 93 1 139 140 + 94 1 139 141 + 95 1 142 143 + 96 1 142 144 + 97 1 145 146 + 98 1 145 147 + 99 1 148 149 + 100 1 148 150 + 101 1 151 152 + 102 1 151 153 + 103 1 154 155 + 104 1 154 156 + 105 1 157 158 + 106 1 157 159 + 107 1 160 161 + 108 1 160 162 + 109 1 163 164 + 110 1 163 165 + 111 1 166 167 + 112 1 166 168 + 113 1 169 170 + 114 1 169 171 + 115 1 172 173 + 116 1 172 174 + 117 1 175 176 + 118 1 175 177 + 119 1 178 179 + 120 1 178 180 + 121 1 181 182 + 122 1 181 183 + 123 1 184 185 + 124 1 184 186 + 125 1 187 188 + 126 1 187 189 + 127 1 190 191 + 128 1 190 192 + 129 1 193 194 + 130 1 193 195 + 131 1 196 197 + 132 1 196 198 + 133 1 199 200 + 134 1 199 201 + 135 1 202 203 + 136 1 202 204 + 137 1 205 206 + 138 1 205 207 + 139 1 208 209 + 140 1 208 210 + 141 1 211 212 + 142 1 211 213 + 143 1 214 215 + 144 1 214 216 + 145 1 217 218 + 146 1 217 219 + 147 1 220 221 + 148 1 220 222 + 149 1 223 224 + 150 1 223 225 + 151 1 226 227 + 152 1 226 228 + 153 1 229 230 + 154 1 229 231 + 155 1 232 233 + 156 1 232 234 + 157 1 235 236 + 158 1 235 237 + 159 1 238 239 + 160 1 238 240 + 161 1 241 242 + 162 1 241 243 + 163 1 244 245 + 164 1 244 246 + 165 1 247 248 + 166 1 247 249 + 167 1 250 251 + 168 1 250 252 + 169 1 253 254 + 170 1 253 255 + 171 1 256 257 + 172 1 256 258 + 173 1 259 260 + 174 1 259 261 + 175 1 262 263 + 176 1 262 264 + 177 1 265 266 + 178 1 265 267 + 179 1 268 269 + 180 1 268 270 + 181 1 271 272 + 182 1 271 273 + 183 1 274 275 + 184 1 274 276 + 185 1 277 278 + 186 1 277 279 + 187 1 280 281 + 188 1 280 282 + 189 1 283 284 + 190 1 283 285 + 191 1 286 287 + 192 1 286 288 + 193 1 289 290 + 194 1 289 291 + 195 1 292 293 + 196 1 292 294 + 197 1 295 296 + 198 1 295 297 + 199 1 298 299 + 200 1 298 300 + 201 1 301 302 + 202 1 301 303 + 203 1 304 305 + 204 1 304 306 + 205 1 307 308 + 206 1 307 309 + 207 1 310 311 + 208 1 310 312 + 209 1 313 314 + 210 1 313 315 + 211 1 316 317 + 212 1 316 318 + 213 1 319 320 + 214 1 319 321 + 215 1 322 323 + 216 1 322 324 + 217 1 325 326 + 218 1 325 327 + 219 1 328 329 + 220 1 328 330 + 221 1 331 332 + 222 1 331 333 + 223 1 334 335 + 224 1 334 336 + 225 1 337 338 + 226 1 337 339 + 227 1 340 341 + 228 1 340 342 + 229 1 343 344 + 230 1 343 345 + 231 1 346 347 + 232 1 346 348 + 233 1 349 350 + 234 1 349 351 + 235 1 352 353 + 236 1 352 354 + 237 1 355 356 + 238 1 355 357 + 239 1 358 359 + 240 1 358 360 + 241 1 361 362 + 242 1 361 363 + 243 1 364 365 + 244 1 364 366 + 245 1 367 368 + 246 1 367 369 + 247 1 370 371 + 248 1 370 372 + 249 1 373 374 + 250 1 373 375 + 251 1 376 377 + 252 1 376 378 + 253 1 379 380 + 254 1 379 381 + 255 1 382 383 + 256 1 382 384 + 257 1 385 386 + 258 1 385 387 + 259 1 388 389 + 260 1 388 390 + 261 1 391 392 + 262 1 391 393 + 263 1 394 395 + 264 1 394 396 + 265 1 397 398 + 266 1 397 399 + 267 1 400 401 + 268 1 400 402 + 269 1 403 404 + 270 1 403 405 + 271 1 406 407 + 272 1 406 408 + 273 1 409 410 + 274 1 409 411 + 275 1 412 413 + 276 1 412 414 + 277 1 415 416 + 278 1 415 417 + 279 1 418 419 + 280 1 418 420 + 281 1 421 422 + 282 1 421 423 + 283 1 424 425 + 284 1 424 426 + 285 1 427 428 + 286 1 427 429 + 287 1 430 431 + 288 1 430 432 + 289 1 433 434 + 290 1 433 435 + 291 1 436 437 + 292 1 436 438 + 293 1 439 440 + 294 1 439 441 + 295 1 442 443 + 296 1 442 444 + 297 1 445 446 + 298 1 445 447 + 299 1 448 449 + 300 1 448 450 + 301 1 451 452 + 302 1 451 453 + 303 1 454 455 + 304 1 454 456 + 305 1 457 458 + 306 1 457 459 + 307 1 460 461 + 308 1 460 462 + 309 1 463 464 + 310 1 463 465 + 311 1 466 467 + 312 1 466 468 + 313 1 469 470 + 314 1 469 471 + 315 1 472 473 + 316 1 472 474 + 317 1 475 476 + 318 1 475 477 + 319 1 478 479 + 320 1 478 480 + 321 1 481 482 + 322 1 481 483 + 323 1 484 485 + 324 1 484 486 + 325 1 487 488 + 326 1 487 489 + 327 1 490 491 + 328 1 490 492 + 329 1 493 494 + 330 1 493 495 + 331 1 496 497 + 332 1 496 498 + 333 1 499 500 + 334 1 499 501 + 335 1 502 503 + 336 1 502 504 + 337 1 505 506 + 338 1 505 507 + 339 1 508 509 + 340 1 508 510 + 341 1 511 512 + 342 1 511 513 + 343 1 514 515 + 344 1 514 516 + 345 1 517 518 + 346 1 517 519 + 347 1 520 521 + 348 1 520 522 + 349 1 523 524 + 350 1 523 525 + 351 1 526 527 + 352 1 526 528 + 353 1 529 530 + 354 1 529 531 + 355 1 532 533 + 356 1 532 534 + 357 1 535 536 + 358 1 535 537 + 359 1 538 539 + 360 1 538 540 + 361 1 541 542 + 362 1 541 543 + 363 1 544 545 + 364 1 544 546 + 365 1 547 548 + 366 1 547 549 + 367 1 550 551 + 368 1 550 552 + 369 1 553 554 + 370 1 553 555 + 371 1 556 557 + 372 1 556 558 + 373 1 559 560 + 374 1 559 561 + 375 1 562 563 + 376 1 562 564 + 377 1 565 566 + 378 1 565 567 + 379 1 568 569 + 380 1 568 570 + 381 1 571 572 + 382 1 571 573 + 383 1 574 575 + 384 1 574 576 + 385 1 577 578 + 386 1 577 579 + 387 1 580 581 + 388 1 580 582 + 389 1 583 584 + 390 1 583 585 + 391 1 586 587 + 392 1 586 588 + 393 1 589 590 + 394 1 589 591 + 395 1 592 593 + 396 1 592 594 + 397 1 595 596 + 398 1 595 597 + 399 1 598 599 + 400 1 598 600 + 401 1 601 602 + 402 1 601 603 + 403 1 604 605 + 404 1 604 606 + 405 1 607 608 + 406 1 607 609 + 407 1 610 611 + 408 1 610 612 + 409 1 613 614 + 410 1 613 615 + 411 1 616 617 + 412 1 616 618 + 413 1 619 620 + 414 1 619 621 + 415 1 622 623 + 416 1 622 624 + 417 1 625 626 + 418 1 625 627 + 419 1 628 629 + 420 1 628 630 + 421 1 631 632 + 422 1 631 633 + 423 1 634 635 + 424 1 634 636 + 425 1 637 638 + 426 1 637 639 + 427 1 640 641 + 428 1 640 642 + 429 1 643 644 + 430 1 643 645 + 431 1 646 647 + 432 1 646 648 + +Angles + + 1 1 2 1 3 + 2 1 5 4 6 + 3 1 8 7 9 + 4 1 11 10 12 + 5 1 14 13 15 + 6 1 17 16 18 + 7 1 20 19 21 + 8 1 23 22 24 + 9 1 26 25 27 + 10 1 29 28 30 + 11 1 32 31 33 + 12 1 35 34 36 + 13 1 38 37 39 + 14 1 41 40 42 + 15 1 44 43 45 + 16 1 47 46 48 + 17 1 50 49 51 + 18 1 53 52 54 + 19 1 56 55 57 + 20 1 59 58 60 + 21 1 62 61 63 + 22 1 65 64 66 + 23 1 68 67 69 + 24 1 71 70 72 + 25 1 74 73 75 + 26 1 77 76 78 + 27 1 80 79 81 + 28 1 83 82 84 + 29 1 86 85 87 + 30 1 89 88 90 + 31 1 92 91 93 + 32 1 95 94 96 + 33 1 98 97 99 + 34 1 101 100 102 + 35 1 104 103 105 + 36 1 107 106 108 + 37 1 110 109 111 + 38 1 113 112 114 + 39 1 116 115 117 + 40 1 119 118 120 + 41 1 122 121 123 + 42 1 125 124 126 + 43 1 128 127 129 + 44 1 131 130 132 + 45 1 134 133 135 + 46 1 137 136 138 + 47 1 140 139 141 + 48 1 143 142 144 + 49 1 146 145 147 + 50 1 149 148 150 + 51 1 152 151 153 + 52 1 155 154 156 + 53 1 158 157 159 + 54 1 161 160 162 + 55 1 164 163 165 + 56 1 167 166 168 + 57 1 170 169 171 + 58 1 173 172 174 + 59 1 176 175 177 + 60 1 179 178 180 + 61 1 182 181 183 + 62 1 185 184 186 + 63 1 188 187 189 + 64 1 191 190 192 + 65 1 194 193 195 + 66 1 197 196 198 + 67 1 200 199 201 + 68 1 203 202 204 + 69 1 206 205 207 + 70 1 209 208 210 + 71 1 212 211 213 + 72 1 215 214 216 + 73 1 218 217 219 + 74 1 221 220 222 + 75 1 224 223 225 + 76 1 227 226 228 + 77 1 230 229 231 + 78 1 233 232 234 + 79 1 236 235 237 + 80 1 239 238 240 + 81 1 242 241 243 + 82 1 245 244 246 + 83 1 248 247 249 + 84 1 251 250 252 + 85 1 254 253 255 + 86 1 257 256 258 + 87 1 260 259 261 + 88 1 263 262 264 + 89 1 266 265 267 + 90 1 269 268 270 + 91 1 272 271 273 + 92 1 275 274 276 + 93 1 278 277 279 + 94 1 281 280 282 + 95 1 284 283 285 + 96 1 287 286 288 + 97 1 290 289 291 + 98 1 293 292 294 + 99 1 296 295 297 + 100 1 299 298 300 + 101 1 302 301 303 + 102 1 305 304 306 + 103 1 308 307 309 + 104 1 311 310 312 + 105 1 314 313 315 + 106 1 317 316 318 + 107 1 320 319 321 + 108 1 323 322 324 + 109 1 326 325 327 + 110 1 329 328 330 + 111 1 332 331 333 + 112 1 335 334 336 + 113 1 338 337 339 + 114 1 341 340 342 + 115 1 344 343 345 + 116 1 347 346 348 + 117 1 350 349 351 + 118 1 353 352 354 + 119 1 356 355 357 + 120 1 359 358 360 + 121 1 362 361 363 + 122 1 365 364 366 + 123 1 368 367 369 + 124 1 371 370 372 + 125 1 374 373 375 + 126 1 377 376 378 + 127 1 380 379 381 + 128 1 383 382 384 + 129 1 386 385 387 + 130 1 389 388 390 + 131 1 392 391 393 + 132 1 395 394 396 + 133 1 398 397 399 + 134 1 401 400 402 + 135 1 404 403 405 + 136 1 407 406 408 + 137 1 410 409 411 + 138 1 413 412 414 + 139 1 416 415 417 + 140 1 419 418 420 + 141 1 422 421 423 + 142 1 425 424 426 + 143 1 428 427 429 + 144 1 431 430 432 + 145 1 434 433 435 + 146 1 437 436 438 + 147 1 440 439 441 + 148 1 443 442 444 + 149 1 446 445 447 + 150 1 449 448 450 + 151 1 452 451 453 + 152 1 455 454 456 + 153 1 458 457 459 + 154 1 461 460 462 + 155 1 464 463 465 + 156 1 467 466 468 + 157 1 470 469 471 + 158 1 473 472 474 + 159 1 476 475 477 + 160 1 479 478 480 + 161 1 482 481 483 + 162 1 485 484 486 + 163 1 488 487 489 + 164 1 491 490 492 + 165 1 494 493 495 + 166 1 497 496 498 + 167 1 500 499 501 + 168 1 503 502 504 + 169 1 506 505 507 + 170 1 509 508 510 + 171 1 512 511 513 + 172 1 515 514 516 + 173 1 518 517 519 + 174 1 521 520 522 + 175 1 524 523 525 + 176 1 527 526 528 + 177 1 530 529 531 + 178 1 533 532 534 + 179 1 536 535 537 + 180 1 539 538 540 + 181 1 542 541 543 + 182 1 545 544 546 + 183 1 548 547 549 + 184 1 551 550 552 + 185 1 554 553 555 + 186 1 557 556 558 + 187 1 560 559 561 + 188 1 563 562 564 + 189 1 566 565 567 + 190 1 569 568 570 + 191 1 572 571 573 + 192 1 575 574 576 + 193 1 578 577 579 + 194 1 581 580 582 + 195 1 584 583 585 + 196 1 587 586 588 + 197 1 590 589 591 + 198 1 593 592 594 + 199 1 596 595 597 + 200 1 599 598 600 + 201 1 602 601 603 + 202 1 605 604 606 + 203 1 608 607 609 + 204 1 611 610 612 + 205 1 614 613 615 + 206 1 617 616 618 + 207 1 620 619 621 + 208 1 623 622 624 + 209 1 626 625 627 + 210 1 629 628 630 + 211 1 632 631 633 + 212 1 635 634 636 + 213 1 638 637 639 + 214 1 641 640 642 + 215 1 644 643 645 + 216 1 647 646 648 diff --git a/tools/i-pi/examples/lammps/h2o-pimd-rpc/data.water_shortrange b/tools/i-pi/examples/lammps/h2o-pimd-rpc/data.water_shortrange new file mode 100644 index 000000000..13c75e993 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd-rpc/data.water_shortrange @@ -0,0 +1,1331 @@ +LAMMPS Description + + 648 atoms + 432 bonds + 216 angles + + 2 atom types + 1 bond types + 1 angle types + + 0 35.233 xlo xhi + 0 35.233 ylo yhi + 0 35.233 zlo zhi + +Masses + + 1 15.9994 + 2 1.0080 + +Bond Coeffs + + 1 1.78 0.2708585 -0.327738785 0.231328959 + +Angle Coeffs + + 1 0.0700 107.400000 + +Atoms + + 1 1 1 -1.1128 3.84600000 5.67200001 1.32300000 + 2 1 2 0.5564 2.97900000 7.05400000 0.85700000 + 3 1 2 0.5564 5.52500001 5.69700001 0.45100000 + 4 2 1 -1.1128 34.55700001 34.34100000 3.07800000 + 5 2 2 0.5564 33.72200001 34.68900000 4.84000001 + 6 2 2 0.5564 36.02900000 33.22000001 3.71100001 + 7 3 1 -1.1128 5.59100000 1.96299999 13.47700000 + 8 3 2 0.5564 7.26500000 1.86400000 13.85100001 + 9 3 2 0.5564 5.00899999 3.55500000 13.91599999 + 10 4 1 -1.1128 1.06000000 2.06100000 21.71800001 + 11 4 2 0.5564 0.75700000 0.26100000 21.82000000 + 12 4 2 0.5564 0.21300001 3.01299999 23.04700000 + 13 5 1 -1.1128 1.20000000 1.33700000 29.00599999 + 14 5 2 0.5564 0.81800000 1.88399999 30.73200000 + 15 5 2 0.5564 2.88300001 1.82500000 29.01100000 + 16 6 1 -1.1128 1.33100001 1.38599999 34.30600001 + 17 6 2 0.5564 2.39200001 2.89799999 34.84600000 + 18 6 2 0.5564 0.81400000 0.53200001 35.83600000 + 19 7 1 -1.1128 31.45100000 10.20100000 0.72599999 + 20 7 2 0.5564 32.28199999 10.87699999 -0.75000000 + 21 7 2 0.5564 30.91999999 11.59399999 1.67700000 + 22 8 1 -1.1128 0.83600000 10.80800001 4.29800000 + 23 8 2 0.5564 0.30500000 10.64300001 2.79300000 + 24 8 2 0.5564 -0.35600001 10.33400000 5.52400000 + 25 9 1 -1.1128 34.38100001 5.97900000 9.19400000 + 26 9 2 0.5564 33.61600000 7.67300000 8.85700000 + 27 9 2 0.5564 35.11500000 5.25999999 7.61800001 + 28 10 1 -1.1128 33.21200000 6.48000000 24.27799999 + 29 10 2 0.5564 31.62400000 6.90800001 23.52100001 + 30 10 2 0.5564 32.54400000 4.99000000 24.98200000 + 31 11 1 -1.1128 1.99200000 9.00199999 26.86300000 + 32 11 2 0.5564 1.85600000 10.17500000 25.57899999 + 33 11 2 0.5564 0.51900000 8.09899999 26.38599999 + 34 12 1 -1.1128 2.05400000 8.66000000 32.51499999 + 35 12 2 0.5564 2.16699999 8.72700000 30.49400000 + 36 12 2 0.5564 2.37400001 10.51300000 33.03799999 + 37 13 1 -1.1128 3.40200000 16.63900001 3.00800000 + 38 13 2 0.5564 4.12700001 15.87200001 4.44600001 + 39 13 2 0.5564 2.90500001 18.33899999 3.15999999 + 40 14 1 -1.1128 4.22200000 15.44400000 8.07200000 + 41 14 2 0.5564 5.21100000 16.75600000 8.29900001 + 42 14 2 0.5564 2.56000000 15.49200001 8.86000000 + 43 15 1 -1.1128 2.83100000 9.24599999 16.48800000 + 44 15 2 0.5564 2.86900001 8.02300001 18.05000000 + 45 15 2 0.5564 3.96000000 8.46700001 15.15400000 + 46 16 1 -1.1128 5.56300000 6.00300000 20.90700000 + 47 16 2 0.5564 4.65300000 4.63800000 21.48000000 + 48 16 2 0.5564 6.40500000 6.20800000 22.52899999 + 49 17 1 -1.1128 2.08700001 13.37000000 22.91299999 + 50 17 2 0.5564 2.83200000 14.80400001 23.42200000 + 51 17 2 0.5564 1.43400000 13.50900000 21.19599999 + 52 18 1 -1.1128 3.36900000 17.88600000 25.10900001 + 53 18 2 0.5564 3.65500000 17.20000000 26.76599999 + 54 18 2 0.5564 4.77200001 18.97699999 24.49999999 + 55 19 1 -1.1128 34.76400000 20.80300000 0.94800001 + 56 19 2 0.5564 35.20999999 21.26700001 2.81599999 + 57 19 2 0.5564 35.96200001 21.72599999 0.13099999 + 58 20 1 -1.1128 2.83600000 24.17799999 15.22900000 + 59 20 2 0.5564 2.79500000 22.34599999 14.87600001 + 60 20 2 0.5564 2.41399999 24.11500000 17.13000001 + 61 21 1 -1.1128 33.00000000 24.48100000 15.23000000 + 62 21 2 0.5564 34.63999999 24.80400001 15.01299999 + 63 21 2 0.5564 32.40100000 25.76400000 14.29500001 + 64 22 1 -1.1128 0.40399999 26.77900001 23.39999999 + 65 22 2 0.5564 1.35300001 27.24800000 24.98700001 + 66 22 2 0.5564 1.54600001 28.05000000 22.31700001 + 67 23 1 -1.1128 34.22200000 21.38000000 25.41799999 + 68 23 2 0.5564 35.66899999 20.15100000 25.31700001 + 69 23 2 0.5564 32.96000000 21.18000000 23.99200000 + 70 24 1 -1.1128 33.25900000 17.43800000 32.48000000 + 71 24 2 0.5564 33.31399999 18.78200000 33.88300001 + 72 24 2 0.5564 32.74300001 18.18100001 30.87100000 + 73 25 1 -1.1128 4.46300000 21.97900000 3.93600000 + 74 25 2 0.5564 5.85600000 23.08400001 3.39999999 + 75 25 2 0.5564 3.98600000 22.18000000 5.60200000 + 76 26 1 -1.1128 6.25800000 25.85100001 8.52000000 + 77 26 2 0.5564 5.76700000 27.69300001 8.47600000 + 78 26 2 0.5564 7.20200001 25.50600000 10.18600000 + 79 27 1 -1.1128 0.60099999 29.73699999 12.74700001 + 80 27 2 0.5564 -0.68500000 30.84200000 12.34999999 + 81 27 2 0.5564 1.33600000 30.71600000 14.03099999 + 82 28 1 -1.1128 7.56300000 28.19100001 24.33300000 + 83 28 2 0.5564 9.20100000 28.82800000 24.68400000 + 84 28 2 0.5564 7.38100001 27.62100000 22.79900000 + 85 29 1 -1.1128 3.65300000 27.10900001 27.77200001 + 86 29 2 0.5564 5.12600000 27.01500000 26.77200001 + 87 29 2 0.5564 3.03099999 28.75600000 27.69800000 + 88 30 1 -1.1128 2.59600001 23.99100001 32.47600000 + 89 30 2 0.5564 2.87900000 24.79099999 30.85899999 + 90 30 2 0.5564 4.00300000 22.91299999 32.70099999 + 91 31 1 -1.1128 3.08300000 31.31700001 3.64399999 + 92 31 2 0.5564 4.13300000 30.58900001 2.53900001 + 93 31 2 0.5564 4.21800000 32.17300001 5.03700001 + 94 32 1 -1.1128 4.66100001 30.55500000 9.36799999 + 95 32 2 0.5564 3.18400001 29.84300000 10.13200000 + 96 32 2 0.5564 4.35800000 32.44800000 9.12600000 + 97 33 1 -1.1128 3.46499999 32.53700000 15.77800000 + 98 33 2 0.5564 5.07200000 31.81899999 15.90300000 + 99 33 2 0.5564 4.05500001 34.25699999 15.28400000 + 100 34 1 -1.1128 4.21500000 29.15299999 20.31700001 + 101 34 2 0.5564 3.65799999 30.17600000 18.84200000 + 102 34 2 0.5564 4.95899999 30.29100000 21.44900001 + 103 35 1 -1.1128 1.12600000 31.33300000 28.76800001 + 104 35 2 0.5564 2.39500000 31.12399999 29.92500000 + 105 35 2 0.5564 0.76800001 33.09199999 28.89799999 + 106 36 1 -1.1128 4.88100000 32.61600000 32.30200000 + 107 36 2 0.5564 6.58800000 32.91100000 31.72500001 + 108 36 2 0.5564 4.48599999 34.03700001 33.24900001 + 109 37 1 -1.1128 8.96200001 5.55600000 0.15100000 + 110 37 2 0.5564 9.65200000 6.99100001 0.85899999 + 111 37 2 0.5564 9.17300001 4.47700000 1.64500000 + 112 38 1 -1.1128 1.83300001 3.51799999 5.67900001 + 113 38 2 0.5564 2.88900000 2.73100000 6.78800000 + 114 38 2 0.5564 2.78900000 4.18700000 4.14700000 + 115 39 1 -1.1128 10.51000001 34.72599999 13.07300001 + 116 39 2 0.5564 11.91999999 34.11800000 11.91900001 + 117 39 2 0.5564 11.29500001 34.96800000 14.74100000 + 118 40 1 -1.1128 7.21200000 0.04199999 22.45399999 + 119 40 2 0.5564 6.92400000 0.47000000 24.17200000 + 120 40 2 0.5564 8.31900000 1.22799999 21.65300000 + 121 41 1 -1.1128 6.36500000 2.01000000 27.54400000 + 122 41 2 0.5564 5.95400000 3.58500000 26.85199999 + 123 41 2 0.5564 7.75800001 2.54900000 28.69600000 + 124 42 1 -1.1128 10.83300001 3.14000000 30.78699999 + 125 42 2 0.5564 12.69700001 2.97500000 30.86700000 + 126 42 2 0.5564 10.38899999 3.70000001 32.40399999 + 127 43 1 -1.1128 8.68400000 9.34200001 3.91200001 + 128 43 2 0.5564 6.98500000 9.25600001 4.77299999 + 129 43 2 0.5564 8.68400000 10.80899999 3.01100000 + 130 44 1 -1.1128 4.87299999 9.91900001 7.70700000 + 131 44 2 0.5564 3.69800000 9.77100000 6.19400000 + 132 44 2 0.5564 5.04700000 11.96100000 7.62400000 + 133 45 1 -1.1128 10.03099999 5.01800000 9.69900000 + 134 45 2 0.5564 9.67500001 3.38199999 10.34000000 + 135 45 2 0.5564 9.13200000 5.98700001 10.82500000 + 136 46 1 -1.1128 11.24599999 3.91800000 21.92900000 + 137 46 2 0.5564 12.61400001 2.77000000 22.34100000 + 138 46 2 0.5564 12.07300001 5.68600001 21.49699999 + 139 47 1 -1.1128 6.82500000 7.16400000 25.70799999 + 140 47 2 0.5564 8.03600000 8.37400001 25.98000001 + 141 47 2 0.5564 5.20600001 7.90000000 25.89099999 + 142 48 1 -1.1128 10.17099999 12.81100001 0.29500001 + 143 48 2 0.5564 10.03300000 12.81800000 -1.60900000 + 144 48 2 0.5564 9.87999999 14.49200001 0.48000000 + 145 49 1 -1.1128 8.19000000 17.40200000 1.25299999 + 146 49 2 0.5564 9.47199999 18.53100000 1.25299999 + 147 49 2 0.5564 6.35100000 17.81700000 1.56800001 + 148 50 1 -1.1128 11.23300000 16.18800001 8.29900001 + 149 50 2 0.5564 10.29100000 17.68900000 8.16600001 + 150 50 2 0.5564 12.76800001 17.12300001 8.73299999 + 151 51 1 -1.1128 6.38599999 8.00199999 12.84600000 + 152 51 2 0.5564 7.70099999 8.89600000 13.65500000 + 153 51 2 0.5564 5.59100000 8.87699999 11.51900000 + 154 52 1 -1.1128 8.18400001 10.41900000 18.84799999 + 155 52 2 0.5564 9.49800000 9.43400000 19.90500001 + 156 52 2 0.5564 6.88200000 9.02699999 18.94800001 + 157 53 1 -1.1128 10.80600000 14.43100000 21.32799999 + 158 53 2 0.5564 9.17700001 13.53100000 20.67000000 + 159 53 2 0.5564 11.34400000 15.69600000 20.44800000 + 160 54 1 -1.1128 9.23700000 13.92800000 30.34100000 + 161 54 2 0.5564 10.77900001 14.83900000 30.52199999 + 162 54 2 0.5564 9.96500000 13.19199999 28.89900000 + 163 55 1 -1.1128 10.91800000 21.70700000 1.86400000 + 164 55 2 0.5564 10.28000000 23.44900001 2.27900000 + 165 55 2 0.5564 12.70799999 21.45600000 1.74900000 + 166 56 1 -1.1128 9.35300001 16.12500000 13.92699999 + 167 56 2 0.5564 9.93799999 17.59399999 14.61800001 + 168 56 2 0.5564 9.51799999 16.36000001 12.24400000 + 169 57 1 -1.1128 10.37099999 11.10700000 14.26800000 + 170 57 2 0.5564 9.64399999 10.40600001 15.85899999 + 171 57 2 0.5564 9.43400000 12.52300000 14.11699999 + 172 58 1 -1.1128 3.35100000 22.76899999 20.19599999 + 173 58 2 0.5564 2.05500001 23.68600001 21.50300001 + 174 58 2 0.5564 2.45200000 21.40100000 19.41300000 + 175 59 1 -1.1128 6.83600000 21.32900000 23.19899999 + 176 59 2 0.5564 8.24900001 20.84799999 22.32000001 + 177 59 2 0.5564 5.66800001 21.84099999 21.88600000 + 178 60 1 -1.1128 4.60399999 15.64900000 30.04300000 + 179 60 2 0.5564 6.45300001 15.21699999 30.20700000 + 180 60 2 0.5564 3.82200001 14.76199999 31.56200000 + 181 61 1 -1.1128 7.12500000 19.97600001 9.42100001 + 182 61 2 0.5564 5.91800000 20.45300001 10.72999999 + 183 61 2 0.5564 8.09899999 21.49600001 9.49100000 + 184 62 1 -1.1128 9.06299999 25.91200001 13.18600000 + 185 62 2 0.5564 10.34999999 26.57199999 12.36700001 + 186 62 2 0.5564 9.67999999 24.36700001 13.69700001 + 187 63 1 -1.1128 8.02200000 22.34299999 17.04199999 + 188 63 2 0.5564 9.14400000 23.36700001 18.07399999 + 189 63 2 0.5564 6.56200000 23.46200000 16.85199999 + 190 64 1 -1.1128 10.76199999 26.28499999 19.96299999 + 191 64 2 0.5564 11.03600000 27.96599999 20.53800000 + 192 64 2 0.5564 11.07800000 25.40100000 21.45600000 + 193 65 1 -1.1128 9.15800000 22.90199999 28.39100000 + 194 65 2 0.5564 8.21900000 23.52800001 27.08499999 + 195 65 2 0.5564 8.08900000 21.76000000 29.50900000 + 196 66 1 -1.1128 6.21900000 20.15800000 31.92100000 + 197 66 2 0.5564 5.63500000 18.51099999 31.16100000 + 198 66 2 0.5564 7.53000000 19.62400000 33.07100000 + 199 67 1 -1.1128 11.19100001 31.50900000 2.61700000 + 200 67 2 0.5564 10.46000001 32.21399999 4.10800000 + 201 67 2 0.5564 13.17600000 31.75099999 2.57700000 + 202 68 1 -1.1128 4.74799999 0.05500001 8.60500000 + 203 68 2 0.5564 5.38000000 0.51700000 10.18300000 + 204 68 2 0.5564 6.05000000 -0.30600001 7.48000000 + 205 69 1 -1.1128 8.69500000 30.80899999 15.73100000 + 206 69 2 0.5564 9.18899999 32.10300000 14.49500000 + 207 69 2 0.5564 8.44699999 29.06900000 14.86800000 + 208 70 1 -1.1128 10.12799999 31.40200000 20.76599999 + 209 70 2 0.5564 9.45600000 30.90500001 19.15500000 + 210 70 2 0.5564 9.01999999 32.73100000 21.41500000 + 211 71 1 -1.1128 12.23800001 30.16200000 25.83699999 + 212 71 2 0.5564 11.41799999 30.90800001 27.10999999 + 213 71 2 0.5564 12.39600001 31.33100001 24.67800000 + 214 72 1 -1.1128 10.39500000 32.53700000 30.62400000 + 215 72 2 0.5564 11.04199999 34.33899999 30.75099999 + 216 72 2 0.5564 11.37800001 31.48599999 31.53800000 + 217 73 1 -1.1128 10.43800000 3.62599999 5.08700001 + 218 73 2 0.5564 12.43500001 4.08200000 5.13600000 + 219 73 2 0.5564 9.82200001 4.28400000 6.68100000 + 220 74 1 -1.1128 14.76199999 3.40100000 13.77599999 + 221 74 2 0.5564 16.51799999 3.82400000 13.37600000 + 222 74 2 0.5564 13.75200000 4.75700000 12.96400000 + 223 75 1 -1.1128 12.38199999 1.01200001 17.64300001 + 224 75 2 0.5564 13.34599999 1.99700000 16.44400000 + 225 75 2 0.5564 11.93100000 2.13300000 18.99800001 + 226 76 1 -1.1128 15.27799999 1.29300000 24.55900000 + 227 76 2 0.5564 16.07100000 0.94600000 26.36500000 + 228 76 2 0.5564 15.79399999 0.19899999 23.49900000 + 229 77 1 -1.1128 22.22600000 31.62700000 24.71199999 + 230 77 2 0.5564 23.33800001 32.59500000 23.87600001 + 231 77 2 0.5564 22.16100000 30.05300000 24.13200000 + 232 78 1 -1.1128 15.63999999 1.84700001 32.71700000 + 233 78 2 0.5564 17.48800000 2.47300000 31.87400000 + 234 78 2 0.5564 16.40300001 0.86900001 34.26700001 + 235 79 1 -1.1128 14.85800001 10.19899999 2.75400001 + 236 79 2 0.5564 13.36000001 10.71199999 2.28199999 + 237 79 2 0.5564 14.56000000 9.31600000 4.55900000 + 238 80 1 -1.1128 15.71700000 8.46900000 10.73900000 + 239 80 2 0.5564 17.32300000 9.58100000 10.87500000 + 240 80 2 0.5564 14.57400000 9.63100000 10.22099999 + 241 81 1 -1.1128 15.24800000 10.39800000 16.52500001 + 242 81 2 0.5564 16.32400001 9.18100001 16.14899999 + 243 81 2 0.5564 14.17200000 10.48800000 15.09800001 + 244 82 1 -1.1128 13.22600000 8.43800000 20.80100001 + 245 82 2 0.5564 14.04300000 8.99600000 19.29500001 + 246 82 2 0.5564 14.66100001 7.80200000 22.09300000 + 247 83 1 -1.1128 10.17300001 10.96100000 25.87500000 + 248 83 2 0.5564 11.47700000 10.22300000 26.94000000 + 249 83 2 0.5564 11.26900000 10.73800000 24.34299999 + 250 84 1 -1.1128 12.79200000 7.73699999 29.17300001 + 251 84 2 0.5564 12.19899999 6.03799999 29.47499999 + 252 84 2 0.5564 14.42700000 7.44999999 29.61700000 + 253 85 1 -1.1128 15.18000000 19.49800000 3.57800000 + 254 85 2 0.5564 14.88300001 17.59600001 4.08000001 + 255 85 2 0.5564 16.75400001 19.57899999 2.62599999 + 256 86 1 -1.1128 12.51700000 11.09300000 7.70099999 + 257 86 2 0.5564 12.22400001 12.77800000 7.55500000 + 258 86 2 0.5564 11.15000000 10.39299999 7.05700000 + 259 87 1 -1.1128 16.26600000 16.27099999 10.75800001 + 260 87 2 0.5564 16.50700001 15.79500000 12.76800001 + 261 87 2 0.5564 17.72500001 16.97699999 10.29200001 + 262 88 1 -1.1128 14.06900000 18.39900001 18.89700000 + 263 88 2 0.5564 15.51300000 17.52300000 18.15500000 + 264 88 2 0.5564 14.95800001 18.70900000 20.67300000 + 265 89 1 -1.1128 14.09899999 15.48000000 25.51000001 + 266 89 2 0.5564 13.69800000 16.87200001 26.93799999 + 267 89 2 0.5564 12.56700000 15.37900000 24.44400000 + 268 90 1 -1.1128 13.30900000 17.57400000 30.29200001 + 269 90 2 0.5564 14.93700001 16.93399999 30.81000000 + 270 90 2 0.5564 13.96900001 19.49400000 30.01200001 + 271 91 1 -1.1128 18.37099999 23.25699999 0.92500000 + 272 91 2 0.5564 19.47899999 23.48000000 2.32099999 + 273 91 2 0.5564 19.08700001 24.32499999 -0.36900000 + 274 92 1 -1.1128 12.10000000 21.72999999 11.35500000 + 275 92 2 0.5564 13.14100001 22.28700000 12.74300001 + 276 92 2 0.5564 13.46700001 22.23600000 10.24400000 + 277 93 1 -1.1128 12.16300001 23.29000000 23.59699999 + 278 93 2 0.5564 11.32400001 22.73600001 24.94900000 + 279 93 2 0.5564 13.88200000 22.87200001 23.84000001 + 280 94 1 -1.1128 20.17300001 26.76100001 22.62800000 + 281 94 2 0.5564 20.20600001 26.53200001 20.79200000 + 282 94 2 0.5564 21.55600000 25.74200000 23.38899999 + 283 95 1 -1.1128 16.70099999 21.16500000 22.60500000 + 284 95 2 0.5564 18.02800000 20.68600001 23.84799999 + 285 95 2 0.5564 17.10400000 22.86599999 21.94900000 + 286 96 1 -1.1128 11.39100000 26.46099999 33.70499999 + 287 96 2 0.5564 9.84099999 27.19199999 34.04800001 + 288 96 2 0.5564 11.77599999 25.53999999 35.24300000 + 289 97 1 -1.1128 9.89799999 25.98900000 4.55300001 + 290 97 2 0.5564 8.90199999 26.13099999 6.03900000 + 291 97 2 0.5564 10.28700000 27.80600000 4.37600000 + 292 98 1 -1.1128 14.30800000 26.96000000 10.87699999 + 293 98 2 0.5564 15.30200000 27.40500000 12.17300001 + 294 98 2 0.5564 15.46300000 26.15100000 9.63299999 + 295 99 1 -1.1128 13.43300000 22.96000000 16.90400000 + 296 99 2 0.5564 13.40900000 24.13099999 18.13200000 + 297 99 2 0.5564 13.62400000 21.19100001 17.52000000 + 298 100 1 -1.1128 16.40900000 26.76800001 26.87500000 + 299 100 2 0.5564 17.58999999 26.98700001 25.43100000 + 300 100 2 0.5564 14.75099999 27.70300000 26.23000000 + 301 101 1 -1.1128 14.40500000 22.73299999 29.89200000 + 302 101 2 0.5564 15.42300000 23.07900000 28.49400000 + 303 101 2 0.5564 12.82600001 23.25900000 29.41600000 + 304 102 1 -1.1128 6.90500001 29.40800000 0.74900000 + 305 102 2 0.5564 8.42800001 30.48300000 1.56700000 + 306 102 2 0.5564 6.35300001 30.81400000 -0.44400000 + 307 103 1 -1.1128 9.18899999 34.15900001 6.50900000 + 308 103 2 0.5564 10.19800000 34.19300000 8.00199999 + 309 103 2 0.5564 9.89000001 35.69200000 5.78500000 + 310 104 1 -1.1128 14.25600001 32.31600000 9.36900000 + 311 104 2 0.5564 15.73299999 32.86700000 9.48599999 + 312 104 2 0.5564 14.75400001 30.67000000 10.09000000 + 313 105 1 -1.1128 14.71400000 30.84099999 16.51600000 + 314 105 2 0.5564 13.74799999 29.55099999 17.27900000 + 315 105 2 0.5564 13.21800000 31.93300001 16.61400001 + 316 106 1 -1.1128 18.40900000 33.64100000 20.61100001 + 317 106 2 0.5564 19.60099999 32.27400001 21.11500000 + 318 106 2 0.5564 17.36000001 32.65500000 19.51799999 + 319 107 1 -1.1128 16.06200001 28.63800000 32.20700000 + 320 107 2 0.5564 14.64800000 27.95800001 33.25299999 + 321 107 2 0.5564 15.75200000 28.01400000 30.52199999 + 322 108 1 -1.1128 16.20000000 30.89499999 1.47300000 + 323 108 2 0.5564 16.62599999 29.96800000 -0.13000001 + 324 108 2 0.5564 17.16699999 29.83300001 2.92699999 + 325 109 1 -1.1128 20.27799999 3.52899999 6.04800001 + 326 109 2 0.5564 20.97699999 3.61100001 4.57500001 + 327 109 2 0.5564 21.31200000 4.51300000 7.25100000 + 328 110 1 -1.1128 23.07900000 5.77800000 10.40800000 + 329 110 2 0.5564 24.65000001 6.25900000 10.83800000 + 330 110 2 0.5564 22.34200001 7.60900000 10.17799999 + 331 111 1 -1.1128 19.58100000 2.03099999 12.10999999 + 332 111 2 0.5564 19.03900000 1.08200000 10.44000000 + 333 111 2 0.5564 21.14100001 2.99100001 11.85100001 + 334 112 1 -1.1128 22.00500001 3.22300000 23.17799999 + 335 112 2 0.5564 21.42899999 4.09000000 24.55399999 + 336 112 2 0.5564 20.65400001 1.79099999 22.71100001 + 337 113 1 -1.1128 16.63000000 6.42200000 23.79200000 + 338 113 2 0.5564 16.21900000 4.80400001 24.40600001 + 339 113 2 0.5564 17.06600001 7.12799999 25.28199999 + 340 114 1 -1.1128 21.67599999 5.56400001 28.15800000 + 341 114 2 0.5564 20.65799999 6.71700000 29.18499999 + 342 114 2 0.5564 23.41300000 5.82800000 28.99600000 + 343 115 1 -1.1128 15.25699999 5.26500000 5.62599999 + 344 115 2 0.5564 16.91400000 4.51900000 5.48999999 + 345 115 2 0.5564 15.14400000 6.15000000 6.97200000 + 346 116 1 -1.1128 20.13700000 11.08200000 10.43700000 + 347 116 2 0.5564 20.02100000 10.94700000 8.73299999 + 348 116 2 0.5564 21.02500000 12.55500000 10.85300000 + 349 117 1 -1.1128 23.08900000 14.62700000 12.43700000 + 350 117 2 0.5564 24.71600000 15.25400000 12.73600001 + 351 117 2 0.5564 23.28400000 13.22799999 13.65300000 + 352 118 1 -1.1128 24.08300000 12.64900000 22.56600000 + 353 118 2 0.5564 22.39700000 12.66300000 23.04199999 + 354 118 2 0.5564 24.90100001 13.85100001 23.56499999 + 355 119 1 -1.1128 17.86500001 7.90899999 30.03600000 + 356 119 2 0.5564 17.50900000 8.04499999 31.98200000 + 357 119 2 0.5564 18.07800000 9.58200001 29.31799999 + 358 120 1 -1.1128 18.82400000 8.48599999 0.10400000 + 359 120 2 0.5564 19.99700000 10.19100001 -0.05700000 + 360 120 2 0.5564 17.07700001 8.99800001 0.77900001 + 361 121 1 -1.1128 20.12200000 9.14300000 5.34299999 + 362 121 2 0.5564 19.37300000 8.81899999 3.82100000 + 363 121 2 0.5564 21.99800001 8.77599999 5.12799999 + 364 122 1 -1.1128 16.41300000 14.45900000 5.85499999 + 365 122 2 0.5564 15.53599999 13.00700000 5.23899999 + 366 122 2 0.5564 16.00599999 14.72500001 7.73699999 + 367 123 1 -1.1128 17.56099999 15.06600001 15.65400001 + 368 123 2 0.5564 17.57500001 13.39800000 16.05500001 + 369 123 2 0.5564 18.97800000 15.82800000 16.39999999 + 370 124 1 -1.1128 26.37400001 17.04700000 24.81700000 + 371 124 2 0.5564 27.98300000 17.09800001 25.63200001 + 372 124 2 0.5564 25.62900001 18.75099999 24.91900001 + 373 125 1 -1.1128 19.78400000 12.96000000 28.70600000 + 374 125 2 0.5564 21.66199999 13.05500001 28.87100000 + 375 125 2 0.5564 19.54500000 14.06999999 27.14300000 + 376 126 1 -1.1128 17.89099999 16.73299999 32.49900000 + 377 126 2 0.5564 18.32700000 15.24000000 31.27700001 + 378 126 2 0.5564 18.63299999 18.33500001 31.69300001 + 379 127 1 -1.1128 23.73299999 23.02399999 1.66300000 + 380 127 2 0.5564 24.80000000 24.05199999 2.77599999 + 381 127 2 0.5564 24.69300001 22.61800001 0.19800000 + 382 128 1 -1.1128 20.78900000 18.44000000 9.44299999 + 383 128 2 0.5564 20.76599999 17.25699999 7.88100000 + 384 128 2 0.5564 21.89600000 17.34500000 10.38500001 + 385 129 1 -1.1128 21.57400000 17.49299999 17.83800000 + 386 129 2 0.5564 20.59699999 18.95500001 17.21800000 + 387 129 2 0.5564 22.53800000 16.87400000 16.25100000 + 388 130 1 -1.1128 19.16800000 14.74799999 24.13099999 + 389 130 2 0.5564 19.71100001 16.39000000 23.71199999 + 390 130 2 0.5564 17.42899999 14.69500000 24.40300001 + 391 131 1 -1.1128 22.14899999 20.19800000 24.97699999 + 392 131 2 0.5564 21.63900001 20.92400000 26.48599999 + 393 131 2 0.5564 22.65600000 21.65700001 24.41099999 + 394 132 1 -1.1128 20.56499999 20.79200000 29.60000001 + 395 132 2 0.5564 22.26399999 20.40900000 30.21399999 + 396 132 2 0.5564 20.54800000 22.40800000 30.59699999 + 397 133 1 -1.1128 20.80200000 26.54699999 9.61499999 + 398 133 2 0.5564 20.09899999 27.98399999 8.33800001 + 399 133 2 0.5564 21.27700001 27.53900001 11.32499999 + 400 134 1 -1.1128 16.28300000 23.58900001 7.77900001 + 401 134 2 0.5564 16.09300000 21.97300001 6.71199999 + 402 134 2 0.5564 17.90100001 22.97100000 8.15400000 + 403 135 1 -1.1128 18.46900000 29.79799999 13.56800001 + 404 135 2 0.5564 19.71199999 31.21600000 13.50600000 + 405 135 2 0.5564 16.87200001 30.34299999 14.39600001 + 406 136 1 -1.1128 18.79000001 21.71199999 16.06000000 + 407 136 2 0.5564 19.87800000 23.09000000 16.48500001 + 408 136 2 0.5564 17.20100000 22.32600000 15.81899999 + 409 137 1 -1.1128 21.74700001 26.08400001 16.34900001 + 410 137 2 0.5564 20.78300001 27.02100000 15.29999999 + 411 137 2 0.5564 22.70499999 27.32799999 17.20600001 + 412 138 1 -1.1128 20.76899999 26.21100000 32.05000000 + 413 138 2 0.5564 21.48800000 27.40399999 33.32799999 + 414 138 2 0.5564 18.98900000 26.71000000 32.14500001 + 415 139 1 -1.1128 19.82000000 29.18100001 5.55900000 + 416 139 2 0.5564 20.99100001 29.50900000 4.10900001 + 417 139 2 0.5564 19.43100000 31.01800000 6.22099999 + 418 140 1 -1.1128 19.24000000 33.86700000 7.99300000 + 419 140 2 0.5564 19.10700000 35.03900000 6.60399999 + 420 140 2 0.5564 20.69700001 33.67100000 9.06299999 + 421 141 1 -1.1128 22.51099999 34.97600001 15.79300000 + 422 141 2 0.5564 23.71600000 36.16300001 16.60300000 + 423 141 2 0.5564 21.69900000 36.15000000 14.46700001 + 424 142 1 -1.1128 22.62199999 30.28400000 19.06900000 + 425 142 2 0.5564 22.04899999 31.35100000 17.72500001 + 426 142 2 0.5564 24.41099999 30.77299999 19.57599999 + 427 143 1 -1.1128 18.63900001 33.61100001 28.36900000 + 428 143 2 0.5564 18.22600000 32.15900001 29.10300000 + 429 143 2 0.5564 19.90600000 33.00800000 27.15800000 + 430 144 1 -1.1128 22.52000000 1.32499999 31.92600001 + 431 144 2 0.5564 22.80300000 2.66800001 30.79600000 + 432 144 2 0.5564 21.04499999 0.42499999 31.12200000 + 433 145 1 -1.1128 21.75400001 3.78900000 1.15900001 + 434 145 2 0.5564 22.08499999 2.78500000 -0.18000000 + 435 145 2 0.5564 20.85000000 5.17500000 0.61000000 + 436 146 1 -1.1128 28.45699999 5.53900001 12.13300000 + 437 146 2 0.5564 29.48900001 4.39000000 11.18200000 + 438 146 2 0.5564 29.16100000 7.13099999 12.58700000 + 439 147 1 -1.1128 22.49500000 5.96599999 17.32400001 + 440 147 2 0.5564 24.37700000 5.37900000 17.39299999 + 441 147 2 0.5564 21.90600000 5.49100000 18.85700000 + 442 148 1 -1.1128 28.12799999 3.30400000 22.28700000 + 443 148 2 0.5564 28.12300001 2.99899999 20.49100000 + 444 148 2 0.5564 26.53299999 3.35500000 22.87600001 + 445 149 1 -1.1128 28.37800001 10.45500000 27.26600000 + 446 149 2 0.5564 30.01900001 10.29200001 28.05100000 + 447 149 2 0.5564 28.63500000 10.03900000 25.46300000 + 448 150 1 -1.1128 27.03099999 8.35300001 34.80600000 + 449 150 2 0.5564 26.11600001 9.98399999 34.57100001 + 450 150 2 0.5564 28.68500000 8.95100001 34.73900000 + 451 151 1 -1.1128 24.95100001 8.15999999 4.45399999 + 452 151 2 0.5564 25.93000001 9.61600000 5.15999999 + 453 151 2 0.5564 25.94700000 7.99400001 2.72400000 + 454 152 1 -1.1128 26.93700001 12.43599999 6.86900001 + 455 152 2 0.5564 25.49200001 13.28400000 6.70799999 + 456 152 2 0.5564 27.68900000 13.33199999 8.26600000 + 457 153 1 -1.1128 23.36500000 11.21399999 16.93300001 + 458 153 2 0.5564 22.24700000 9.74399999 16.78900000 + 459 153 2 0.5564 23.26399999 12.03500000 18.53900001 + 460 154 1 -1.1128 28.32099999 8.75900000 22.15800000 + 461 154 2 0.5564 27.66199999 6.89499999 22.48200001 + 462 154 2 0.5564 26.97100000 9.71000000 21.90199999 + 463 155 1 -1.1128 27.07100000 6.10900001 29.55500000 + 464 155 2 0.5564 27.59100000 7.66300000 28.85700000 + 465 155 2 0.5564 27.30400000 6.32000001 31.26100000 + 466 156 1 -1.1128 22.47400000 11.70400001 34.63999999 + 467 156 2 0.5564 22.75200000 13.30400000 35.58400000 + 468 156 2 0.5564 22.84000001 12.09000000 33.03000001 + 469 157 1 -1.1128 21.65600000 14.97100000 5.61499999 + 470 157 2 0.5564 21.68999999 15.86000000 3.97699999 + 471 157 2 0.5564 19.96400000 14.22500000 5.77400000 + 472 158 1 -1.1128 28.53900001 21.49200001 9.82000000 + 473 158 2 0.5564 27.28800001 22.18100001 8.68800000 + 474 158 2 0.5564 28.06500000 22.42000000 11.60200000 + 475 159 1 -1.1128 28.36399999 16.01999999 11.10900001 + 476 159 2 0.5564 30.03300000 16.64900000 12.08900000 + 477 159 2 0.5564 28.45600000 17.44000000 10.08200000 + 478 160 1 -1.1128 0.05400000 13.68600001 18.10300000 + 479 160 2 0.5564 -1.71400000 12.92800000 18.84099999 + 480 160 2 0.5564 1.00800000 12.42899999 17.38300000 + 481 161 1 -1.1128 24.63600001 12.89400001 29.95700000 + 482 161 2 0.5564 25.90600000 13.91400000 31.18300000 + 483 161 2 0.5564 25.64100000 11.60900000 29.16200000 + 484 162 1 -1.1128 21.54800000 17.25000000 0.74900000 + 485 162 2 0.5564 21.84300000 19.02600000 0.90500001 + 486 162 2 0.5564 20.38500001 16.71600000 -0.69700001 + 487 163 1 -1.1128 26.09499999 27.27400001 4.52000000 + 488 163 2 0.5564 27.88900000 26.45800000 4.50500000 + 489 163 2 0.5564 25.64800000 26.96999999 6.16500000 + 490 164 1 -1.1128 23.61000000 22.51499999 8.00800000 + 491 164 2 0.5564 22.65300000 21.18700000 8.73900000 + 492 164 2 0.5564 22.28600000 24.09499999 8.44400000 + 493 165 1 -1.1128 27.35500000 18.92900000 18.18000000 + 494 165 2 0.5564 27.20000000 20.34900001 17.15500000 + 495 165 2 0.5564 25.57899999 18.32200000 18.77000000 + 496 166 1 -1.1128 26.76500001 23.63299999 14.44400000 + 497 166 2 0.5564 27.44100000 25.29800000 13.65099999 + 498 166 2 0.5564 25.08600000 24.25600001 14.74900000 + 499 167 1 -1.1128 31.47800001 20.76899999 20.98600000 + 500 167 2 0.5564 30.44000000 22.50900000 21.13499999 + 501 167 2 0.5564 30.56700000 19.65600000 20.04300000 + 502 168 1 -1.1128 24.81199999 20.41200000 32.66800001 + 503 168 2 0.5564 26.24199999 21.47800001 31.87400000 + 504 168 2 0.5564 25.78699999 19.02300001 33.15800000 + 505 169 1 -1.1128 22.10500001 29.07600000 0.92800000 + 506 169 2 0.5564 23.29599999 27.92299999 1.73900000 + 507 169 2 0.5564 22.62300000 30.99400001 0.88200000 + 508 170 1 -1.1128 29.57199999 31.25600001 8.62599999 + 509 170 2 0.5564 30.79500000 30.20299999 7.73600001 + 510 170 2 0.5564 28.27700001 31.51900000 7.25999999 + 511 171 1 -1.1128 31.81700000 34.84300000 18.28300000 + 512 171 2 0.5564 32.43800000 34.38899999 16.47400000 + 513 171 2 0.5564 32.74300001 36.42200000 18.34100000 + 514 172 1 -1.1128 27.91500001 25.60099999 19.03300000 + 515 172 2 0.5564 29.35800000 26.56099999 19.19000000 + 516 172 2 0.5564 28.14800001 24.42899999 17.53000000 + 517 173 1 -1.1128 24.54800000 24.65400001 24.02500000 + 518 173 2 0.5564 25.52800001 25.63500000 22.82400000 + 519 173 2 0.5564 25.29999999 25.20000000 25.64500000 + 520 174 1 -1.1128 28.53999999 22.92200000 30.37000000 + 521 174 2 0.5564 27.41399999 24.09600000 29.78100000 + 522 174 2 0.5564 29.67400000 23.91400000 31.87299999 + 523 175 1 -1.1128 24.96900001 33.62300000 1.01400000 + 524 175 2 0.5564 26.52100001 33.05800000 1.51799999 + 525 175 2 0.5564 24.99000000 34.32200000 -0.68299999 + 526 176 1 -1.1128 23.07500000 32.17099999 11.32400001 + 527 176 2 0.5564 23.31600000 32.77500000 13.09700000 + 528 176 2 0.5564 24.46000001 33.20299999 10.66199999 + 529 177 1 -1.1128 27.49699999 2.73600001 17.22400001 + 530 177 2 0.5564 28.39700000 3.41500000 15.71500001 + 531 177 2 0.5564 28.23400001 1.23300000 17.41200000 + 532 178 1 -1.1128 26.36900000 33.06000000 22.07700001 + 533 178 2 0.5564 26.17000001 34.74600000 22.26399999 + 534 178 2 0.5564 27.59200000 32.40399999 23.32099999 + 535 179 1 -1.1128 30.22099999 30.95000000 25.84300000 + 536 179 2 0.5564 30.30500000 29.03799999 26.20800000 + 537 179 2 0.5564 30.36300001 31.97900000 27.41399999 + 538 180 1 -1.1128 24.97300001 26.73200000 28.60700001 + 539 180 2 0.5564 25.38500001 28.36900000 29.24800000 + 540 180 2 0.5564 23.33000000 26.59699999 29.23400001 + 541 181 1 -1.1128 32.16500000 4.85700000 2.25800000 + 542 181 2 0.5564 32.41700001 6.19500001 1.15700000 + 543 181 2 0.5564 32.61499999 3.72700000 1.11200000 + 544 182 1 -1.1128 28.06699999 3.53299999 5.21699999 + 545 182 2 0.5564 26.96000000 4.44699999 4.15800000 + 546 182 2 0.5564 29.87500000 3.86300000 4.44800000 + 547 183 1 -1.1128 33.27900000 2.78200000 13.02800000 + 548 183 2 0.5564 33.70799999 3.95500001 11.81700000 + 549 183 2 0.5564 33.65600000 3.54500000 14.63100000 + 550 184 1 -1.1128 34.27799999 4.94400001 17.49200001 + 551 184 2 0.5564 33.43800000 6.56300000 17.87600001 + 552 184 2 0.5564 34.90600000 4.45200000 18.99499999 + 553 185 1 -1.1128 32.36300001 1.90800001 26.09199999 + 554 185 2 0.5564 31.94099999 1.68299999 24.26800000 + 555 185 2 0.5564 33.85000000 1.39000000 26.90400000 + 556 186 1 -1.1128 27.98200000 0.41799999 28.24100000 + 557 186 2 0.5564 27.51600000 2.08000001 28.30900000 + 558 186 2 0.5564 29.59300001 0.17600000 27.29900001 + 559 187 1 -1.1128 28.84500000 14.67200001 2.72400000 + 560 187 2 0.5564 27.96299999 13.93000001 4.13900000 + 561 187 2 0.5564 30.38599999 15.71400000 3.37900000 + 562 188 1 -1.1128 28.08300000 10.61800001 14.29800000 + 563 188 2 0.5564 28.62300000 12.15999999 13.29300000 + 564 188 2 0.5564 26.48599999 11.01500000 15.37900000 + 565 189 1 -1.1128 33.86700000 10.54500000 13.30600001 + 566 189 2 0.5564 35.16500000 9.61200000 13.81000000 + 567 189 2 0.5564 33.61499999 10.27000001 11.51300000 + 568 190 1 -1.1128 31.79000001 9.69600000 18.22300000 + 569 190 2 0.5564 30.48400000 9.33400000 19.42100001 + 570 190 2 0.5564 30.83399999 10.09600000 16.92900000 + 571 191 1 -1.1128 30.14100001 15.00599999 21.53200001 + 572 191 2 0.5564 28.56499999 15.59399999 22.09899999 + 573 191 2 0.5564 30.94200000 14.25299999 23.07700001 + 574 192 1 -1.1128 32.79799999 10.73200000 30.67999999 + 575 192 2 0.5564 34.07300001 9.52800001 30.79900000 + 576 192 2 0.5564 32.99100001 11.51200000 28.98300000 + 577 193 1 -1.1128 33.65200000 16.26500000 5.08600000 + 578 193 2 0.5564 35.39900001 16.23899999 4.72999999 + 579 193 2 0.5564 33.50300001 17.93900000 5.63100000 + 580 194 1 -1.1128 31.94700000 10.79900000 7.94300000 + 581 194 2 0.5564 29.89400001 10.54900000 7.61899999 + 582 194 2 0.5564 32.27099999 12.41399999 7.07500000 + 583 195 1 -1.1128 0.32900000 15.51600000 11.74600000 + 584 195 2 0.5564 -0.44600001 14.24900001 12.93900000 + 585 195 2 0.5564 -0.68500000 17.01800000 11.93500000 + 586 196 1 -1.1128 4.26200000 19.16500000 14.30800000 + 587 196 2 0.5564 3.57899999 17.69100000 14.91999999 + 588 196 2 0.5564 5.72299999 19.18300000 15.20400000 + 589 197 1 -1.1128 32.99499999 13.54600001 25.94800001 + 590 197 2 0.5564 32.16699999 15.06000000 26.78699999 + 591 197 2 0.5564 34.42499999 13.80000000 25.00700000 + 592 198 1 -1.1128 1.77299999 13.52400000 34.03700001 + 593 198 2 0.5564 0.22700001 14.40900000 33.44600001 + 594 198 2 0.5564 2.16699999 14.67000000 35.51099999 + 595 199 1 -1.1128 33.02900000 20.52899999 7.24700000 + 596 199 2 0.5564 34.38800000 21.41399999 8.00300000 + 597 199 2 0.5564 31.45100000 20.83100000 8.18200000 + 598 200 1 -1.1128 2.03700001 24.25000000 10.25100000 + 599 200 2 0.5564 3.74300001 25.00800000 9.87600001 + 600 200 2 0.5564 1.89400001 25.04300000 11.90300000 + 601 201 1 -1.1128 32.75300000 19.25900000 13.97600001 + 602 201 2 0.5564 32.79200000 20.88600000 13.79200000 + 603 201 2 0.5564 34.33400000 18.79900000 14.97600001 + 604 202 1 -1.1128 0.39600001 18.67300000 18.69900000 + 605 202 2 0.5564 -1.21100000 18.95000000 19.12700001 + 606 202 2 0.5564 0.46900000 16.97699999 18.43599999 + 607 203 1 -1.1128 30.85499999 18.37000000 27.95899999 + 608 203 2 0.5564 29.75900000 19.68100000 28.68999999 + 609 203 2 0.5564 32.10300000 19.47700000 26.76300000 + 610 204 1 -1.1128 27.72299999 15.99200000 33.09100001 + 611 204 2 0.5564 29.39000000 16.42300000 32.19199999 + 612 204 2 0.5564 27.80100001 15.85899999 34.80400001 + 613 205 1 -1.1128 31.06800000 27.89499999 3.34800000 + 614 205 2 0.5564 32.51700000 27.82500000 4.61000000 + 615 205 2 0.5564 31.52899999 29.45900000 2.32400001 + 616 206 1 -1.1128 35.03900000 28.00800000 6.66300000 + 617 206 2 0.5564 35.96599999 26.93399999 7.68299999 + 618 206 2 0.5564 36.05500001 28.33600000 5.33600000 + 619 207 1 -1.1128 29.35600001 28.19599999 13.02500000 + 620 207 2 0.5564 29.20999999 29.33500001 14.58900001 + 621 207 2 0.5564 28.87400000 29.62900001 11.86700000 + 622 208 1 -1.1128 32.38599999 28.43400000 18.96100000 + 623 208 2 0.5564 33.36799999 28.57400000 20.41099999 + 624 208 2 0.5564 33.41000001 27.40600001 17.94900000 + 625 209 1 -1.1128 30.89799999 25.39000000 25.79900000 + 626 209 2 0.5564 32.36900000 25.91299999 24.58000000 + 627 209 2 0.5564 31.31700001 24.07500000 27.02900000 + 628 210 1 -1.1128 32.25900000 25.61100001 33.10400000 + 629 210 2 0.5564 32.23800001 25.73600001 34.80600000 + 630 210 2 0.5564 33.91999999 25.04199999 32.77500000 + 631 211 1 -1.1128 30.29000000 32.64500000 1.34100000 + 632 211 2 0.5564 29.94900000 32.79300000 -0.43000000 + 633 211 2 0.5564 31.76199999 33.34000000 1.84700001 + 634 212 1 -1.1128 25.53599999 34.23499999 6.46900000 + 635 212 2 0.5564 25.71600000 36.05900001 6.65099999 + 636 212 2 0.5564 25.28300000 33.86599999 4.89499999 + 637 213 1 -1.1128 31.67400000 33.16100000 13.10599999 + 638 213 2 0.5564 31.79300000 34.86300000 13.28100001 + 639 213 2 0.5564 30.42499999 32.92800000 11.78300001 + 640 214 1 -1.1128 33.84400001 32.66800001 22.29599999 + 641 214 2 0.5564 32.75000000 32.23400001 23.52400000 + 642 214 2 0.5564 32.91700000 32.87500000 20.73600001 + 643 215 1 -1.1128 31.60300000 30.54200000 30.80499999 + 644 215 2 0.5564 33.45100000 30.80400001 30.46799999 + 645 215 2 0.5564 31.57500001 28.81599999 31.75600000 + 646 216 1 -1.1128 26.29500001 31.23499999 30.59900000 + 647 216 2 0.5564 27.83399999 30.51499999 30.60700001 + 648 216 2 0.5564 26.36200000 32.91999999 29.85600000 + +Bonds + + 1 1 1 2 + 2 1 1 3 + 3 1 4 5 + 4 1 4 6 + 5 1 7 8 + 6 1 7 9 + 7 1 10 11 + 8 1 10 12 + 9 1 13 14 + 10 1 13 15 + 11 1 16 17 + 12 1 16 18 + 13 1 19 20 + 14 1 19 21 + 15 1 22 23 + 16 1 22 24 + 17 1 25 26 + 18 1 25 27 + 19 1 28 29 + 20 1 28 30 + 21 1 31 32 + 22 1 31 33 + 23 1 34 35 + 24 1 34 36 + 25 1 37 38 + 26 1 37 39 + 27 1 40 41 + 28 1 40 42 + 29 1 43 44 + 30 1 43 45 + 31 1 46 47 + 32 1 46 48 + 33 1 49 50 + 34 1 49 51 + 35 1 52 53 + 36 1 52 54 + 37 1 55 56 + 38 1 55 57 + 39 1 58 59 + 40 1 58 60 + 41 1 61 62 + 42 1 61 63 + 43 1 64 65 + 44 1 64 66 + 45 1 67 68 + 46 1 67 69 + 47 1 70 71 + 48 1 70 72 + 49 1 73 74 + 50 1 73 75 + 51 1 76 77 + 52 1 76 78 + 53 1 79 80 + 54 1 79 81 + 55 1 82 83 + 56 1 82 84 + 57 1 85 86 + 58 1 85 87 + 59 1 88 89 + 60 1 88 90 + 61 1 91 92 + 62 1 91 93 + 63 1 94 95 + 64 1 94 96 + 65 1 97 98 + 66 1 97 99 + 67 1 100 101 + 68 1 100 102 + 69 1 103 104 + 70 1 103 105 + 71 1 106 107 + 72 1 106 108 + 73 1 109 110 + 74 1 109 111 + 75 1 112 113 + 76 1 112 114 + 77 1 115 116 + 78 1 115 117 + 79 1 118 119 + 80 1 118 120 + 81 1 121 122 + 82 1 121 123 + 83 1 124 125 + 84 1 124 126 + 85 1 127 128 + 86 1 127 129 + 87 1 130 131 + 88 1 130 132 + 89 1 133 134 + 90 1 133 135 + 91 1 136 137 + 92 1 136 138 + 93 1 139 140 + 94 1 139 141 + 95 1 142 143 + 96 1 142 144 + 97 1 145 146 + 98 1 145 147 + 99 1 148 149 + 100 1 148 150 + 101 1 151 152 + 102 1 151 153 + 103 1 154 155 + 104 1 154 156 + 105 1 157 158 + 106 1 157 159 + 107 1 160 161 + 108 1 160 162 + 109 1 163 164 + 110 1 163 165 + 111 1 166 167 + 112 1 166 168 + 113 1 169 170 + 114 1 169 171 + 115 1 172 173 + 116 1 172 174 + 117 1 175 176 + 118 1 175 177 + 119 1 178 179 + 120 1 178 180 + 121 1 181 182 + 122 1 181 183 + 123 1 184 185 + 124 1 184 186 + 125 1 187 188 + 126 1 187 189 + 127 1 190 191 + 128 1 190 192 + 129 1 193 194 + 130 1 193 195 + 131 1 196 197 + 132 1 196 198 + 133 1 199 200 + 134 1 199 201 + 135 1 202 203 + 136 1 202 204 + 137 1 205 206 + 138 1 205 207 + 139 1 208 209 + 140 1 208 210 + 141 1 211 212 + 142 1 211 213 + 143 1 214 215 + 144 1 214 216 + 145 1 217 218 + 146 1 217 219 + 147 1 220 221 + 148 1 220 222 + 149 1 223 224 + 150 1 223 225 + 151 1 226 227 + 152 1 226 228 + 153 1 229 230 + 154 1 229 231 + 155 1 232 233 + 156 1 232 234 + 157 1 235 236 + 158 1 235 237 + 159 1 238 239 + 160 1 238 240 + 161 1 241 242 + 162 1 241 243 + 163 1 244 245 + 164 1 244 246 + 165 1 247 248 + 166 1 247 249 + 167 1 250 251 + 168 1 250 252 + 169 1 253 254 + 170 1 253 255 + 171 1 256 257 + 172 1 256 258 + 173 1 259 260 + 174 1 259 261 + 175 1 262 263 + 176 1 262 264 + 177 1 265 266 + 178 1 265 267 + 179 1 268 269 + 180 1 268 270 + 181 1 271 272 + 182 1 271 273 + 183 1 274 275 + 184 1 274 276 + 185 1 277 278 + 186 1 277 279 + 187 1 280 281 + 188 1 280 282 + 189 1 283 284 + 190 1 283 285 + 191 1 286 287 + 192 1 286 288 + 193 1 289 290 + 194 1 289 291 + 195 1 292 293 + 196 1 292 294 + 197 1 295 296 + 198 1 295 297 + 199 1 298 299 + 200 1 298 300 + 201 1 301 302 + 202 1 301 303 + 203 1 304 305 + 204 1 304 306 + 205 1 307 308 + 206 1 307 309 + 207 1 310 311 + 208 1 310 312 + 209 1 313 314 + 210 1 313 315 + 211 1 316 317 + 212 1 316 318 + 213 1 319 320 + 214 1 319 321 + 215 1 322 323 + 216 1 322 324 + 217 1 325 326 + 218 1 325 327 + 219 1 328 329 + 220 1 328 330 + 221 1 331 332 + 222 1 331 333 + 223 1 334 335 + 224 1 334 336 + 225 1 337 338 + 226 1 337 339 + 227 1 340 341 + 228 1 340 342 + 229 1 343 344 + 230 1 343 345 + 231 1 346 347 + 232 1 346 348 + 233 1 349 350 + 234 1 349 351 + 235 1 352 353 + 236 1 352 354 + 237 1 355 356 + 238 1 355 357 + 239 1 358 359 + 240 1 358 360 + 241 1 361 362 + 242 1 361 363 + 243 1 364 365 + 244 1 364 366 + 245 1 367 368 + 246 1 367 369 + 247 1 370 371 + 248 1 370 372 + 249 1 373 374 + 250 1 373 375 + 251 1 376 377 + 252 1 376 378 + 253 1 379 380 + 254 1 379 381 + 255 1 382 383 + 256 1 382 384 + 257 1 385 386 + 258 1 385 387 + 259 1 388 389 + 260 1 388 390 + 261 1 391 392 + 262 1 391 393 + 263 1 394 395 + 264 1 394 396 + 265 1 397 398 + 266 1 397 399 + 267 1 400 401 + 268 1 400 402 + 269 1 403 404 + 270 1 403 405 + 271 1 406 407 + 272 1 406 408 + 273 1 409 410 + 274 1 409 411 + 275 1 412 413 + 276 1 412 414 + 277 1 415 416 + 278 1 415 417 + 279 1 418 419 + 280 1 418 420 + 281 1 421 422 + 282 1 421 423 + 283 1 424 425 + 284 1 424 426 + 285 1 427 428 + 286 1 427 429 + 287 1 430 431 + 288 1 430 432 + 289 1 433 434 + 290 1 433 435 + 291 1 436 437 + 292 1 436 438 + 293 1 439 440 + 294 1 439 441 + 295 1 442 443 + 296 1 442 444 + 297 1 445 446 + 298 1 445 447 + 299 1 448 449 + 300 1 448 450 + 301 1 451 452 + 302 1 451 453 + 303 1 454 455 + 304 1 454 456 + 305 1 457 458 + 306 1 457 459 + 307 1 460 461 + 308 1 460 462 + 309 1 463 464 + 310 1 463 465 + 311 1 466 467 + 312 1 466 468 + 313 1 469 470 + 314 1 469 471 + 315 1 472 473 + 316 1 472 474 + 317 1 475 476 + 318 1 475 477 + 319 1 478 479 + 320 1 478 480 + 321 1 481 482 + 322 1 481 483 + 323 1 484 485 + 324 1 484 486 + 325 1 487 488 + 326 1 487 489 + 327 1 490 491 + 328 1 490 492 + 329 1 493 494 + 330 1 493 495 + 331 1 496 497 + 332 1 496 498 + 333 1 499 500 + 334 1 499 501 + 335 1 502 503 + 336 1 502 504 + 337 1 505 506 + 338 1 505 507 + 339 1 508 509 + 340 1 508 510 + 341 1 511 512 + 342 1 511 513 + 343 1 514 515 + 344 1 514 516 + 345 1 517 518 + 346 1 517 519 + 347 1 520 521 + 348 1 520 522 + 349 1 523 524 + 350 1 523 525 + 351 1 526 527 + 352 1 526 528 + 353 1 529 530 + 354 1 529 531 + 355 1 532 533 + 356 1 532 534 + 357 1 535 536 + 358 1 535 537 + 359 1 538 539 + 360 1 538 540 + 361 1 541 542 + 362 1 541 543 + 363 1 544 545 + 364 1 544 546 + 365 1 547 548 + 366 1 547 549 + 367 1 550 551 + 368 1 550 552 + 369 1 553 554 + 370 1 553 555 + 371 1 556 557 + 372 1 556 558 + 373 1 559 560 + 374 1 559 561 + 375 1 562 563 + 376 1 562 564 + 377 1 565 566 + 378 1 565 567 + 379 1 568 569 + 380 1 568 570 + 381 1 571 572 + 382 1 571 573 + 383 1 574 575 + 384 1 574 576 + 385 1 577 578 + 386 1 577 579 + 387 1 580 581 + 388 1 580 582 + 389 1 583 584 + 390 1 583 585 + 391 1 586 587 + 392 1 586 588 + 393 1 589 590 + 394 1 589 591 + 395 1 592 593 + 396 1 592 594 + 397 1 595 596 + 398 1 595 597 + 399 1 598 599 + 400 1 598 600 + 401 1 601 602 + 402 1 601 603 + 403 1 604 605 + 404 1 604 606 + 405 1 607 608 + 406 1 607 609 + 407 1 610 611 + 408 1 610 612 + 409 1 613 614 + 410 1 613 615 + 411 1 616 617 + 412 1 616 618 + 413 1 619 620 + 414 1 619 621 + 415 1 622 623 + 416 1 622 624 + 417 1 625 626 + 418 1 625 627 + 419 1 628 629 + 420 1 628 630 + 421 1 631 632 + 422 1 631 633 + 423 1 634 635 + 424 1 634 636 + 425 1 637 638 + 426 1 637 639 + 427 1 640 641 + 428 1 640 642 + 429 1 643 644 + 430 1 643 645 + 431 1 646 647 + 432 1 646 648 + +Angles + + 1 1 2 1 3 + 2 1 5 4 6 + 3 1 8 7 9 + 4 1 11 10 12 + 5 1 14 13 15 + 6 1 17 16 18 + 7 1 20 19 21 + 8 1 23 22 24 + 9 1 26 25 27 + 10 1 29 28 30 + 11 1 32 31 33 + 12 1 35 34 36 + 13 1 38 37 39 + 14 1 41 40 42 + 15 1 44 43 45 + 16 1 47 46 48 + 17 1 50 49 51 + 18 1 53 52 54 + 19 1 56 55 57 + 20 1 59 58 60 + 21 1 62 61 63 + 22 1 65 64 66 + 23 1 68 67 69 + 24 1 71 70 72 + 25 1 74 73 75 + 26 1 77 76 78 + 27 1 80 79 81 + 28 1 83 82 84 + 29 1 86 85 87 + 30 1 89 88 90 + 31 1 92 91 93 + 32 1 95 94 96 + 33 1 98 97 99 + 34 1 101 100 102 + 35 1 104 103 105 + 36 1 107 106 108 + 37 1 110 109 111 + 38 1 113 112 114 + 39 1 116 115 117 + 40 1 119 118 120 + 41 1 122 121 123 + 42 1 125 124 126 + 43 1 128 127 129 + 44 1 131 130 132 + 45 1 134 133 135 + 46 1 137 136 138 + 47 1 140 139 141 + 48 1 143 142 144 + 49 1 146 145 147 + 50 1 149 148 150 + 51 1 152 151 153 + 52 1 155 154 156 + 53 1 158 157 159 + 54 1 161 160 162 + 55 1 164 163 165 + 56 1 167 166 168 + 57 1 170 169 171 + 58 1 173 172 174 + 59 1 176 175 177 + 60 1 179 178 180 + 61 1 182 181 183 + 62 1 185 184 186 + 63 1 188 187 189 + 64 1 191 190 192 + 65 1 194 193 195 + 66 1 197 196 198 + 67 1 200 199 201 + 68 1 203 202 204 + 69 1 206 205 207 + 70 1 209 208 210 + 71 1 212 211 213 + 72 1 215 214 216 + 73 1 218 217 219 + 74 1 221 220 222 + 75 1 224 223 225 + 76 1 227 226 228 + 77 1 230 229 231 + 78 1 233 232 234 + 79 1 236 235 237 + 80 1 239 238 240 + 81 1 242 241 243 + 82 1 245 244 246 + 83 1 248 247 249 + 84 1 251 250 252 + 85 1 254 253 255 + 86 1 257 256 258 + 87 1 260 259 261 + 88 1 263 262 264 + 89 1 266 265 267 + 90 1 269 268 270 + 91 1 272 271 273 + 92 1 275 274 276 + 93 1 278 277 279 + 94 1 281 280 282 + 95 1 284 283 285 + 96 1 287 286 288 + 97 1 290 289 291 + 98 1 293 292 294 + 99 1 296 295 297 + 100 1 299 298 300 + 101 1 302 301 303 + 102 1 305 304 306 + 103 1 308 307 309 + 104 1 311 310 312 + 105 1 314 313 315 + 106 1 317 316 318 + 107 1 320 319 321 + 108 1 323 322 324 + 109 1 326 325 327 + 110 1 329 328 330 + 111 1 332 331 333 + 112 1 335 334 336 + 113 1 338 337 339 + 114 1 341 340 342 + 115 1 344 343 345 + 116 1 347 346 348 + 117 1 350 349 351 + 118 1 353 352 354 + 119 1 356 355 357 + 120 1 359 358 360 + 121 1 362 361 363 + 122 1 365 364 366 + 123 1 368 367 369 + 124 1 371 370 372 + 125 1 374 373 375 + 126 1 377 376 378 + 127 1 380 379 381 + 128 1 383 382 384 + 129 1 386 385 387 + 130 1 389 388 390 + 131 1 392 391 393 + 132 1 395 394 396 + 133 1 398 397 399 + 134 1 401 400 402 + 135 1 404 403 405 + 136 1 407 406 408 + 137 1 410 409 411 + 138 1 413 412 414 + 139 1 416 415 417 + 140 1 419 418 420 + 141 1 422 421 423 + 142 1 425 424 426 + 143 1 428 427 429 + 144 1 431 430 432 + 145 1 434 433 435 + 146 1 437 436 438 + 147 1 440 439 441 + 148 1 443 442 444 + 149 1 446 445 447 + 150 1 449 448 450 + 151 1 452 451 453 + 152 1 455 454 456 + 153 1 458 457 459 + 154 1 461 460 462 + 155 1 464 463 465 + 156 1 467 466 468 + 157 1 470 469 471 + 158 1 473 472 474 + 159 1 476 475 477 + 160 1 479 478 480 + 161 1 482 481 483 + 162 1 485 484 486 + 163 1 488 487 489 + 164 1 491 490 492 + 165 1 494 493 495 + 166 1 497 496 498 + 167 1 500 499 501 + 168 1 503 502 504 + 169 1 506 505 507 + 170 1 509 508 510 + 171 1 512 511 513 + 172 1 515 514 516 + 173 1 518 517 519 + 174 1 521 520 522 + 175 1 524 523 525 + 176 1 527 526 528 + 177 1 530 529 531 + 178 1 533 532 534 + 179 1 536 535 537 + 180 1 539 538 540 + 181 1 542 541 543 + 182 1 545 544 546 + 183 1 548 547 549 + 184 1 551 550 552 + 185 1 554 553 555 + 186 1 557 556 558 + 187 1 560 559 561 + 188 1 563 562 564 + 189 1 566 565 567 + 190 1 569 568 570 + 191 1 572 571 573 + 192 1 575 574 576 + 193 1 578 577 579 + 194 1 581 580 582 + 195 1 584 583 585 + 196 1 587 586 588 + 197 1 590 589 591 + 198 1 593 592 594 + 199 1 596 595 597 + 200 1 599 598 600 + 201 1 602 601 603 + 202 1 605 604 606 + 203 1 608 607 609 + 204 1 611 610 612 + 205 1 614 613 615 + 206 1 617 616 618 + 207 1 620 619 621 + 208 1 623 622 624 + 209 1 626 625 627 + 210 1 629 628 630 + 211 1 632 631 633 + 212 1 635 634 636 + 213 1 638 637 639 + 214 1 641 640 642 + 215 1 644 643 645 + 216 1 647 646 648 diff --git a/tools/i-pi/examples/lammps/h2o-pimd-rpc/in.water_longrange b/tools/i-pi/examples/lammps/h2o-pimd-rpc/in.water_longrange new file mode 100644 index 000000000..0e0e09a5b --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd-rpc/in.water_longrange @@ -0,0 +1,33 @@ +units electron +atom_style full + +#pair_style lj/cut/coul/long 17.01 +pair_style lj/cut/tip4p/long 1 2 1 1 0.278072379 17.007 +bond_style harmonic +#bond_style class2 +angle_style harmonic +#kspace_style pppm 0.0001 +kspace_style pppm/tip4p 0.0001 + +read_data data.water_longrange +pair_coeff * * 0 0 +pair_coeff 1 1 0.000295147 5.96946 + +neighbor 2.0 bin +neigh_modify delay 0 every 1 check yes + +timestep 0.00025 + +#velocity all create 298.0 2345187 + +#thermo_style multi +#thermo 1 + +#fix 1 all nvt temp 298.0 298.0 30.0 tchain 1 +#fix 1 all nve +fix 1 all ipi rpc_long 32347 unix + +#dump 1 all xyz 25 dump.xyz + +run 100000000 + diff --git a/tools/i-pi/examples/lammps/h2o-pimd-rpc/in.water_shortrange b/tools/i-pi/examples/lammps/h2o-pimd-rpc/in.water_shortrange new file mode 100644 index 000000000..6df6d16ee --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd-rpc/in.water_shortrange @@ -0,0 +1,34 @@ +units electron +atom_style full + +pair_style lj/cut 0.51 +#pair_style lj/cut/tip4p/long 1 2 1 1 0.278072379 17.007 +#bond_style harmonic +bond_style class2 +angle_style harmonic +#kspace_style pppm 0.0001 +#kspace_style pppm/tip4p 0.0001 + +read_data data.water_shortrange +pair_coeff * * 0 0.1 +#pair_coeff 1 1 0.000295147 5.96946 + +#atom_modify sort 1 3.00 +neighbor 2.0 bin +neigh_modify delay 0 every 1 check yes + +timestep 0.00025 + +#velocity all create 298.0 2345187 + +#thermo_style multi +#thermo 1 + +#fix 1 all nvt temp 298.0 298.0 30.0 tchain 1 +#fix 1 all nve +fix 1 all ipi rpc_short 32346 unix + +#dump 1 all xyz 25 dump.xyz + +run 100000000 + diff --git a/tools/i-pi/examples/lammps/h2o-pimd-rpc/input.xml b/tools/i-pi/examples/lammps/h2o-pimd-rpc/input.xml new file mode 100644 index 000000000..fc7596d09 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd-rpc/input.xml @@ -0,0 +1,27 @@ + + + water_298K.pdb + 298 + + + [ step, time{picosecond}, conserved, temperature{kelvin}, kinetic_cv, potential, pressure_cv{megapascal}] + positions + + 500000 + 32346 + + +
rpc_short
+
+ +
rpc_long
+
+
+ + + 25 + + 0.25 + 298 + +
diff --git a/tools/i-pi/examples/lammps/h2o-pimd-rpc/water_298K.pdb b/tools/i-pi/examples/lammps/h2o-pimd-rpc/water_298K.pdb new file mode 100644 index 000000000..e8509c868 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd-rpc/water_298K.pdb @@ -0,0 +1,650 @@ +CRYST 35.233 35.233 35.233 90.00 90.00 90.00 P 1 1 +ATOM 1 O 1 1 3.846 5.672 1.323 0.00 0.00 0 +ATOM 2 H 1 1 2.979 7.054 0.857 0.00 0.00 0 +ATOM 3 H 1 1 5.525 5.697 0.451 0.00 0.00 0 +ATOM 4 O 1 1 34.557 34.341 3.078 0.00 0.00 0 +ATOM 5 H 1 1 33.722 34.689 4.840 0.00 0.00 0 +ATOM 6 H 1 1 36.029 33.220 3.711 0.00 0.00 0 +ATOM 7 O 1 1 5.591 1.963 13.477 0.00 0.00 0 +ATOM 8 H 1 1 7.265 1.864 13.851 0.00 0.00 0 +ATOM 9 H 1 1 5.009 3.555 13.916 0.00 0.00 0 +ATOM 10 O 1 1 1.060 2.061 21.718 0.00 0.00 0 +ATOM 11 H 1 1 0.757 0.261 21.820 0.00 0.00 0 +ATOM 12 H 1 1 0.213 3.013 23.047 0.00 0.00 0 +ATOM 13 O 1 1 1.200 1.337 29.006 0.00 0.00 0 +ATOM 14 H 1 1 0.818 1.884 30.732 0.00 0.00 0 +ATOM 15 H 1 1 2.883 1.825 29.011 0.00 0.00 0 +ATOM 16 O 1 1 1.331 1.386 34.306 0.00 0.00 0 +ATOM 17 H 1 1 2.392 2.898 34.846 0.00 0.00 0 +ATOM 18 H 1 1 0.814 0.532 35.836 0.00 0.00 0 +ATOM 19 O 1 1 31.451 10.201 0.726 0.00 0.00 0 +ATOM 20 H 1 1 32.282 10.877 -0.750 0.00 0.00 0 +ATOM 21 H 1 1 30.920 11.594 1.677 0.00 0.00 0 +ATOM 22 O 1 1 0.836 10.808 4.298 0.00 0.00 0 +ATOM 23 H 1 1 0.305 10.643 2.793 0.00 0.00 0 +ATOM 24 H 1 1 -0.356 10.334 5.524 0.00 0.00 0 +ATOM 25 O 1 1 34.381 5.979 9.194 0.00 0.00 0 +ATOM 26 H 1 1 33.616 7.673 8.857 0.00 0.00 0 +ATOM 27 H 1 1 35.115 5.260 7.618 0.00 0.00 0 +ATOM 28 O 1 1 33.212 6.480 24.278 0.00 0.00 0 +ATOM 29 H 1 1 31.624 6.908 23.521 0.00 0.00 0 +ATOM 30 H 1 1 32.544 4.990 24.982 0.00 0.00 0 +ATOM 31 O 1 1 1.992 9.002 26.863 0.00 0.00 0 +ATOM 32 H 1 1 1.856 10.175 25.579 0.00 0.00 0 +ATOM 33 H 1 1 0.519 8.099 26.386 0.00 0.00 0 +ATOM 34 O 1 1 2.054 8.660 32.515 0.00 0.00 0 +ATOM 35 H 1 1 2.167 8.727 30.494 0.00 0.00 0 +ATOM 36 H 1 1 2.374 10.513 33.038 0.00 0.00 0 +ATOM 37 O 1 1 3.402 16.639 3.008 0.00 0.00 0 +ATOM 38 H 1 1 4.127 15.872 4.446 0.00 0.00 0 +ATOM 39 H 1 1 2.905 18.339 3.160 0.00 0.00 0 +ATOM 40 O 1 1 4.222 15.444 8.072 0.00 0.00 0 +ATOM 41 H 1 1 5.211 16.756 8.299 0.00 0.00 0 +ATOM 42 H 1 1 2.560 15.492 8.860 0.00 0.00 0 +ATOM 43 O 1 1 2.831 9.246 16.488 0.00 0.00 0 +ATOM 44 H 1 1 2.869 8.023 18.050 0.00 0.00 0 +ATOM 45 H 1 1 3.960 8.467 15.154 0.00 0.00 0 +ATOM 46 O 1 1 5.563 6.003 20.907 0.00 0.00 0 +ATOM 47 H 1 1 4.653 4.638 21.480 0.00 0.00 0 +ATOM 48 H 1 1 6.405 6.208 22.529 0.00 0.00 0 +ATOM 49 O 1 1 2.087 13.370 22.913 0.00 0.00 0 +ATOM 50 H 1 1 2.832 14.804 23.422 0.00 0.00 0 +ATOM 51 H 1 1 1.434 13.509 21.196 0.00 0.00 0 +ATOM 52 O 1 1 3.369 17.886 25.109 0.00 0.00 0 +ATOM 53 H 1 1 3.655 17.200 26.766 0.00 0.00 0 +ATOM 54 H 1 1 4.772 18.977 24.500 0.00 0.00 0 +ATOM 55 O 1 1 34.764 20.803 0.948 0.00 0.00 0 +ATOM 56 H 1 1 35.210 21.267 2.816 0.00 0.00 0 +ATOM 57 H 1 1 35.962 21.726 0.131 0.00 0.00 0 +ATOM 58 O 1 1 2.836 24.178 15.229 0.00 0.00 0 +ATOM 59 H 1 1 2.795 22.346 14.876 0.00 0.00 0 +ATOM 60 H 1 1 2.414 24.115 17.130 0.00 0.00 0 +ATOM 61 O 1 1 33.000 24.481 15.230 0.00 0.00 0 +ATOM 62 H 1 1 34.640 24.804 15.013 0.00 0.00 0 +ATOM 63 H 1 1 32.401 25.764 14.295 0.00 0.00 0 +ATOM 64 O 1 1 0.404 26.779 23.400 0.00 0.00 0 +ATOM 65 H 1 1 1.353 27.248 24.987 0.00 0.00 0 +ATOM 66 H 1 1 1.546 28.050 22.317 0.00 0.00 0 +ATOM 67 O 1 1 34.222 21.380 25.418 0.00 0.00 0 +ATOM 68 H 1 1 35.669 20.151 25.317 0.00 0.00 0 +ATOM 69 H 1 1 32.960 21.180 23.992 0.00 0.00 0 +ATOM 70 O 1 1 33.259 17.438 32.480 0.00 0.00 0 +ATOM 71 H 1 1 33.314 18.782 33.883 0.00 0.00 0 +ATOM 72 H 1 1 32.743 18.181 30.871 0.00 0.00 0 +ATOM 73 O 1 1 4.463 21.979 3.936 0.00 0.00 0 +ATOM 74 H 1 1 5.856 23.084 3.400 0.00 0.00 0 +ATOM 75 H 1 1 3.986 22.180 5.602 0.00 0.00 0 +ATOM 76 O 1 1 6.258 25.851 8.520 0.00 0.00 0 +ATOM 77 H 1 1 5.767 27.693 8.476 0.00 0.00 0 +ATOM 78 H 1 1 7.202 25.506 10.186 0.00 0.00 0 +ATOM 79 O 1 1 0.601 29.737 12.747 0.00 0.00 0 +ATOM 80 H 1 1 -0.685 30.842 12.350 0.00 0.00 0 +ATOM 81 H 1 1 1.336 30.716 14.031 0.00 0.00 0 +ATOM 82 O 1 1 7.563 28.191 24.333 0.00 0.00 0 +ATOM 83 H 1 1 9.201 28.828 24.684 0.00 0.00 0 +ATOM 84 H 1 1 7.381 27.621 22.799 0.00 0.00 0 +ATOM 85 O 1 1 3.653 27.109 27.772 0.00 0.00 0 +ATOM 86 H 1 1 5.126 27.015 26.772 0.00 0.00 0 +ATOM 87 H 1 1 3.031 28.756 27.698 0.00 0.00 0 +ATOM 88 O 1 1 2.596 23.991 32.476 0.00 0.00 0 +ATOM 89 H 1 1 2.879 24.791 30.859 0.00 0.00 0 +ATOM 90 H 1 1 4.003 22.913 32.701 0.00 0.00 0 +ATOM 91 O 1 1 3.083 31.317 3.644 0.00 0.00 0 +ATOM 92 H 1 1 4.133 30.589 2.539 0.00 0.00 0 +ATOM 93 H 1 1 4.218 32.173 5.037 0.00 0.00 0 +ATOM 94 O 1 1 4.661 30.555 9.368 0.00 0.00 0 +ATOM 95 H 1 1 3.184 29.843 10.132 0.00 0.00 0 +ATOM 96 H 1 1 4.358 32.448 9.126 0.00 0.00 0 +ATOM 97 O 1 1 3.465 32.537 15.778 0.00 0.00 0 +ATOM 98 H 1 1 5.072 31.819 15.903 0.00 0.00 0 +ATOM 99 H 1 1 4.055 34.257 15.284 0.00 0.00 0 +ATOM 100 O 1 1 4.215 29.153 20.317 0.00 0.00 0 +ATOM 101 H 1 1 3.658 30.176 18.842 0.00 0.00 0 +ATOM 102 H 1 1 4.959 30.291 21.449 0.00 0.00 0 +ATOM 103 O 1 1 1.126 31.333 28.768 0.00 0.00 0 +ATOM 104 H 1 1 2.395 31.124 29.925 0.00 0.00 0 +ATOM 105 H 1 1 0.768 33.092 28.898 0.00 0.00 0 +ATOM 106 O 1 1 4.881 32.616 32.302 0.00 0.00 0 +ATOM 107 H 1 1 6.588 32.911 31.725 0.00 0.00 0 +ATOM 108 H 1 1 4.486 34.037 33.249 0.00 0.00 0 +ATOM 109 O 1 1 8.962 5.556 0.151 0.00 0.00 0 +ATOM 110 H 1 1 9.652 6.991 0.859 0.00 0.00 0 +ATOM 111 H 1 1 9.173 4.477 1.645 0.00 0.00 0 +ATOM 112 O 1 1 1.833 3.518 5.679 0.00 0.00 0 +ATOM 113 H 1 1 2.889 2.731 6.788 0.00 0.00 0 +ATOM 114 H 1 1 2.789 4.187 4.147 0.00 0.00 0 +ATOM 115 O 1 1 10.510 34.726 13.073 0.00 0.00 0 +ATOM 116 H 1 1 11.920 34.118 11.919 0.00 0.00 0 +ATOM 117 H 1 1 11.295 34.968 14.741 0.00 0.00 0 +ATOM 118 O 1 1 7.212 0.042 22.454 0.00 0.00 0 +ATOM 119 H 1 1 6.924 0.470 24.172 0.00 0.00 0 +ATOM 120 H 1 1 8.319 1.228 21.653 0.00 0.00 0 +ATOM 121 O 1 1 6.365 2.010 27.544 0.00 0.00 0 +ATOM 122 H 1 1 5.954 3.585 26.852 0.00 0.00 0 +ATOM 123 H 1 1 7.758 2.549 28.696 0.00 0.00 0 +ATOM 124 O 1 1 10.833 3.140 30.787 0.00 0.00 0 +ATOM 125 H 1 1 12.697 2.975 30.867 0.00 0.00 0 +ATOM 126 H 1 1 10.389 3.700 32.404 0.00 0.00 0 +ATOM 127 O 1 1 8.684 9.342 3.912 0.00 0.00 0 +ATOM 128 H 1 1 6.985 9.256 4.773 0.00 0.00 0 +ATOM 129 H 1 1 8.684 10.809 3.011 0.00 0.00 0 +ATOM 130 O 1 1 4.873 9.919 7.707 0.00 0.00 0 +ATOM 131 H 1 1 3.698 9.771 6.194 0.00 0.00 0 +ATOM 132 H 1 1 5.047 11.961 7.624 0.00 0.00 0 +ATOM 133 O 1 1 10.031 5.018 9.699 0.00 0.00 0 +ATOM 134 H 1 1 9.675 3.382 10.340 0.00 0.00 0 +ATOM 135 H 1 1 9.132 5.987 10.825 0.00 0.00 0 +ATOM 136 O 1 1 11.246 3.918 21.929 0.00 0.00 0 +ATOM 137 H 1 1 12.614 2.770 22.341 0.00 0.00 0 +ATOM 138 H 1 1 12.073 5.686 21.497 0.00 0.00 0 +ATOM 139 O 1 1 6.825 7.164 25.708 0.00 0.00 0 +ATOM 140 H 1 1 8.036 8.374 25.980 0.00 0.00 0 +ATOM 141 H 1 1 5.206 7.900 25.891 0.00 0.00 0 +ATOM 142 O 1 1 10.171 12.811 0.295 0.00 0.00 0 +ATOM 143 H 1 1 10.033 12.818 -1.609 0.00 0.00 0 +ATOM 144 H 1 1 9.880 14.492 0.480 0.00 0.00 0 +ATOM 145 O 1 1 8.190 17.402 1.253 0.00 0.00 0 +ATOM 146 H 1 1 9.472 18.531 1.253 0.00 0.00 0 +ATOM 147 H 1 1 6.351 17.817 1.568 0.00 0.00 0 +ATOM 148 O 1 1 11.233 16.188 8.299 0.00 0.00 0 +ATOM 149 H 1 1 10.291 17.689 8.166 0.00 0.00 0 +ATOM 150 H 1 1 12.768 17.123 8.733 0.00 0.00 0 +ATOM 151 O 1 1 6.386 8.002 12.846 0.00 0.00 0 +ATOM 152 H 1 1 7.701 8.896 13.655 0.00 0.00 0 +ATOM 153 H 1 1 5.591 8.877 11.519 0.00 0.00 0 +ATOM 154 O 1 1 8.184 10.419 18.848 0.00 0.00 0 +ATOM 155 H 1 1 9.498 9.434 19.905 0.00 0.00 0 +ATOM 156 H 1 1 6.882 9.027 18.948 0.00 0.00 0 +ATOM 157 O 1 1 10.806 14.431 21.328 0.00 0.00 0 +ATOM 158 H 1 1 9.177 13.531 20.670 0.00 0.00 0 +ATOM 159 H 1 1 11.344 15.696 20.448 0.00 0.00 0 +ATOM 160 O 1 1 9.237 13.928 30.341 0.00 0.00 0 +ATOM 161 H 1 1 10.779 14.839 30.522 0.00 0.00 0 +ATOM 162 H 1 1 9.965 13.192 28.899 0.00 0.00 0 +ATOM 163 O 1 1 10.918 21.707 1.864 0.00 0.00 0 +ATOM 164 H 1 1 10.280 23.449 2.279 0.00 0.00 0 +ATOM 165 H 1 1 12.708 21.456 1.749 0.00 0.00 0 +ATOM 166 O 1 1 9.353 16.125 13.927 0.00 0.00 0 +ATOM 167 H 1 1 9.938 17.594 14.618 0.00 0.00 0 +ATOM 168 H 1 1 9.518 16.360 12.244 0.00 0.00 0 +ATOM 169 O 1 1 10.371 11.107 14.268 0.00 0.00 0 +ATOM 170 H 1 1 9.644 10.406 15.859 0.00 0.00 0 +ATOM 171 H 1 1 9.434 12.523 14.117 0.00 0.00 0 +ATOM 172 O 1 1 3.351 22.769 20.196 0.00 0.00 0 +ATOM 173 H 1 1 2.055 23.686 21.503 0.00 0.00 0 +ATOM 174 H 1 1 2.452 21.401 19.413 0.00 0.00 0 +ATOM 175 O 1 1 6.836 21.329 23.199 0.00 0.00 0 +ATOM 176 H 1 1 8.249 20.848 22.320 0.00 0.00 0 +ATOM 177 H 1 1 5.668 21.841 21.886 0.00 0.00 0 +ATOM 178 O 1 1 4.604 15.649 30.043 0.00 0.00 0 +ATOM 179 H 1 1 6.453 15.217 30.207 0.00 0.00 0 +ATOM 180 H 1 1 3.822 14.762 31.562 0.00 0.00 0 +ATOM 181 O 1 1 7.125 19.976 9.421 0.00 0.00 0 +ATOM 182 H 1 1 5.918 20.453 10.730 0.00 0.00 0 +ATOM 183 H 1 1 8.099 21.496 9.491 0.00 0.00 0 +ATOM 184 O 1 1 9.063 25.912 13.186 0.00 0.00 0 +ATOM 185 H 1 1 10.350 26.572 12.367 0.00 0.00 0 +ATOM 186 H 1 1 9.680 24.367 13.697 0.00 0.00 0 +ATOM 187 O 1 1 8.022 22.343 17.042 0.00 0.00 0 +ATOM 188 H 1 1 9.144 23.367 18.074 0.00 0.00 0 +ATOM 189 H 1 1 6.562 23.462 16.852 0.00 0.00 0 +ATOM 190 O 1 1 10.762 26.285 19.963 0.00 0.00 0 +ATOM 191 H 1 1 11.036 27.966 20.538 0.00 0.00 0 +ATOM 192 H 1 1 11.078 25.401 21.456 0.00 0.00 0 +ATOM 193 O 1 1 9.158 22.902 28.391 0.00 0.00 0 +ATOM 194 H 1 1 8.219 23.528 27.085 0.00 0.00 0 +ATOM 195 H 1 1 8.089 21.760 29.509 0.00 0.00 0 +ATOM 196 O 1 1 6.219 20.158 31.921 0.00 0.00 0 +ATOM 197 H 1 1 5.635 18.511 31.161 0.00 0.00 0 +ATOM 198 H 1 1 7.530 19.624 33.071 0.00 0.00 0 +ATOM 199 O 1 1 11.191 31.509 2.617 0.00 0.00 0 +ATOM 200 H 1 1 10.460 32.214 4.108 0.00 0.00 0 +ATOM 201 H 1 1 13.176 31.751 2.577 0.00 0.00 0 +ATOM 202 O 1 1 4.748 0.055 8.605 0.00 0.00 0 +ATOM 203 H 1 1 5.380 0.517 10.183 0.00 0.00 0 +ATOM 204 H 1 1 6.050 -0.306 7.480 0.00 0.00 0 +ATOM 205 O 1 1 8.695 30.809 15.731 0.00 0.00 0 +ATOM 206 H 1 1 9.189 32.103 14.495 0.00 0.00 0 +ATOM 207 H 1 1 8.447 29.069 14.868 0.00 0.00 0 +ATOM 208 O 1 1 10.128 31.402 20.766 0.00 0.00 0 +ATOM 209 H 1 1 9.456 30.905 19.155 0.00 0.00 0 +ATOM 210 H 1 1 9.020 32.731 21.415 0.00 0.00 0 +ATOM 211 O 1 1 12.238 30.162 25.837 0.00 0.00 0 +ATOM 212 H 1 1 11.418 30.908 27.110 0.00 0.00 0 +ATOM 213 H 1 1 12.396 31.331 24.678 0.00 0.00 0 +ATOM 214 O 1 1 10.395 32.537 30.624 0.00 0.00 0 +ATOM 215 H 1 1 11.042 34.339 30.751 0.00 0.00 0 +ATOM 216 H 1 1 11.378 31.486 31.538 0.00 0.00 0 +ATOM 217 O 1 1 10.438 3.626 5.087 0.00 0.00 0 +ATOM 218 H 1 1 12.435 4.082 5.136 0.00 0.00 0 +ATOM 219 H 1 1 9.822 4.284 6.681 0.00 0.00 0 +ATOM 220 O 1 1 14.762 3.401 13.776 0.00 0.00 0 +ATOM 221 H 1 1 16.518 3.824 13.376 0.00 0.00 0 +ATOM 222 H 1 1 13.752 4.757 12.964 0.00 0.00 0 +ATOM 223 O 1 1 12.382 1.012 17.643 0.00 0.00 0 +ATOM 224 H 1 1 13.346 1.997 16.444 0.00 0.00 0 +ATOM 225 H 1 1 11.931 2.133 18.998 0.00 0.00 0 +ATOM 226 O 1 1 15.278 1.293 24.559 0.00 0.00 0 +ATOM 227 H 1 1 16.071 0.946 26.365 0.00 0.00 0 +ATOM 228 H 1 1 15.794 0.199 23.499 0.00 0.00 0 +ATOM 229 O 1 1 22.226 31.627 24.712 0.00 0.00 0 +ATOM 230 H 1 1 23.338 32.595 23.876 0.00 0.00 0 +ATOM 231 H 1 1 22.161 30.053 24.132 0.00 0.00 0 +ATOM 232 O 1 1 15.640 1.847 32.717 0.00 0.00 0 +ATOM 233 H 1 1 17.488 2.473 31.874 0.00 0.00 0 +ATOM 234 H 1 1 16.403 0.869 34.267 0.00 0.00 0 +ATOM 235 O 1 1 14.858 10.199 2.754 0.00 0.00 0 +ATOM 236 H 1 1 13.360 10.712 2.282 0.00 0.00 0 +ATOM 237 H 1 1 14.560 9.316 4.559 0.00 0.00 0 +ATOM 238 O 1 1 15.717 8.469 10.739 0.00 0.00 0 +ATOM 239 H 1 1 17.323 9.581 10.875 0.00 0.00 0 +ATOM 240 H 1 1 14.574 9.631 10.221 0.00 0.00 0 +ATOM 241 O 1 1 15.248 10.398 16.525 0.00 0.00 0 +ATOM 242 H 1 1 16.324 9.181 16.149 0.00 0.00 0 +ATOM 243 H 1 1 14.172 10.488 15.098 0.00 0.00 0 +ATOM 244 O 1 1 13.226 8.438 20.801 0.00 0.00 0 +ATOM 245 H 1 1 14.043 8.996 19.295 0.00 0.00 0 +ATOM 246 H 1 1 14.661 7.802 22.093 0.00 0.00 0 +ATOM 247 O 1 1 10.173 10.961 25.875 0.00 0.00 0 +ATOM 248 H 1 1 11.477 10.223 26.940 0.00 0.00 0 +ATOM 249 H 1 1 11.269 10.738 24.343 0.00 0.00 0 +ATOM 250 O 1 1 12.792 7.737 29.173 0.00 0.00 0 +ATOM 251 H 1 1 12.199 6.038 29.475 0.00 0.00 0 +ATOM 252 H 1 1 14.427 7.450 29.617 0.00 0.00 0 +ATOM 253 O 1 1 15.180 19.498 3.578 0.00 0.00 0 +ATOM 254 H 1 1 14.883 17.596 4.080 0.00 0.00 0 +ATOM 255 H 1 1 16.754 19.579 2.626 0.00 0.00 0 +ATOM 256 O 1 1 12.517 11.093 7.701 0.00 0.00 0 +ATOM 257 H 1 1 12.224 12.778 7.555 0.00 0.00 0 +ATOM 258 H 1 1 11.150 10.393 7.057 0.00 0.00 0 +ATOM 259 O 1 1 16.266 16.271 10.758 0.00 0.00 0 +ATOM 260 H 1 1 16.507 15.795 12.768 0.00 0.00 0 +ATOM 261 H 1 1 17.725 16.977 10.292 0.00 0.00 0 +ATOM 262 O 1 1 14.069 18.399 18.897 0.00 0.00 0 +ATOM 263 H 1 1 15.513 17.523 18.155 0.00 0.00 0 +ATOM 264 H 1 1 14.958 18.709 20.673 0.00 0.00 0 +ATOM 265 O 1 1 14.099 15.480 25.510 0.00 0.00 0 +ATOM 266 H 1 1 13.698 16.872 26.938 0.00 0.00 0 +ATOM 267 H 1 1 12.567 15.379 24.444 0.00 0.00 0 +ATOM 268 O 1 1 13.309 17.574 30.292 0.00 0.00 0 +ATOM 269 H 1 1 14.937 16.934 30.810 0.00 0.00 0 +ATOM 270 H 1 1 13.969 19.494 30.012 0.00 0.00 0 +ATOM 271 O 1 1 18.371 23.257 0.925 0.00 0.00 0 +ATOM 272 H 1 1 19.479 23.480 2.321 0.00 0.00 0 +ATOM 273 H 1 1 19.087 24.325 -0.369 0.00 0.00 0 +ATOM 274 O 1 1 12.100 21.730 11.355 0.00 0.00 0 +ATOM 275 H 1 1 13.141 22.287 12.743 0.00 0.00 0 +ATOM 276 H 1 1 13.467 22.236 10.244 0.00 0.00 0 +ATOM 277 O 1 1 12.163 23.290 23.597 0.00 0.00 0 +ATOM 278 H 1 1 11.324 22.736 24.949 0.00 0.00 0 +ATOM 279 H 1 1 13.882 22.872 23.840 0.00 0.00 0 +ATOM 280 O 1 1 20.173 26.761 22.628 0.00 0.00 0 +ATOM 281 H 1 1 20.206 26.532 20.792 0.00 0.00 0 +ATOM 282 H 1 1 21.556 25.742 23.389 0.00 0.00 0 +ATOM 283 O 1 1 16.701 21.165 22.605 0.00 0.00 0 +ATOM 284 H 1 1 18.028 20.686 23.848 0.00 0.00 0 +ATOM 285 H 1 1 17.104 22.866 21.949 0.00 0.00 0 +ATOM 286 O 1 1 11.391 26.461 33.705 0.00 0.00 0 +ATOM 287 H 1 1 9.841 27.192 34.048 0.00 0.00 0 +ATOM 288 H 1 1 11.776 25.540 35.243 0.00 0.00 0 +ATOM 289 O 1 1 9.898 25.989 4.553 0.00 0.00 0 +ATOM 290 H 1 1 8.902 26.131 6.039 0.00 0.00 0 +ATOM 291 H 1 1 10.287 27.806 4.376 0.00 0.00 0 +ATOM 292 O 1 1 14.308 26.960 10.877 0.00 0.00 0 +ATOM 293 H 1 1 15.302 27.405 12.173 0.00 0.00 0 +ATOM 294 H 1 1 15.463 26.151 9.633 0.00 0.00 0 +ATOM 295 O 1 1 13.433 22.960 16.904 0.00 0.00 0 +ATOM 296 H 1 1 13.409 24.131 18.132 0.00 0.00 0 +ATOM 297 H 1 1 13.624 21.191 17.520 0.00 0.00 0 +ATOM 298 O 1 1 16.409 26.768 26.875 0.00 0.00 0 +ATOM 299 H 1 1 17.590 26.987 25.431 0.00 0.00 0 +ATOM 300 H 1 1 14.751 27.703 26.230 0.00 0.00 0 +ATOM 301 O 1 1 14.405 22.733 29.892 0.00 0.00 0 +ATOM 302 H 1 1 15.423 23.079 28.494 0.00 0.00 0 +ATOM 303 H 1 1 12.826 23.259 29.416 0.00 0.00 0 +ATOM 304 O 1 1 6.905 29.408 0.749 0.00 0.00 0 +ATOM 305 H 1 1 8.428 30.483 1.567 0.00 0.00 0 +ATOM 306 H 1 1 6.353 30.814 -0.444 0.00 0.00 0 +ATOM 307 O 1 1 9.189 34.159 6.509 0.00 0.00 0 +ATOM 308 H 1 1 10.198 34.193 8.002 0.00 0.00 0 +ATOM 309 H 1 1 9.890 35.692 5.785 0.00 0.00 0 +ATOM 310 O 1 1 14.256 32.316 9.369 0.00 0.00 0 +ATOM 311 H 1 1 15.733 32.867 9.486 0.00 0.00 0 +ATOM 312 H 1 1 14.754 30.670 10.090 0.00 0.00 0 +ATOM 313 O 1 1 14.714 30.841 16.516 0.00 0.00 0 +ATOM 314 H 1 1 13.748 29.551 17.279 0.00 0.00 0 +ATOM 315 H 1 1 13.218 31.933 16.614 0.00 0.00 0 +ATOM 316 O 1 1 18.409 33.641 20.611 0.00 0.00 0 +ATOM 317 H 1 1 19.601 32.274 21.115 0.00 0.00 0 +ATOM 318 H 1 1 17.360 32.655 19.518 0.00 0.00 0 +ATOM 319 O 1 1 16.062 28.638 32.207 0.00 0.00 0 +ATOM 320 H 1 1 14.648 27.958 33.253 0.00 0.00 0 +ATOM 321 H 1 1 15.752 28.014 30.522 0.00 0.00 0 +ATOM 322 O 1 1 16.200 30.895 1.473 0.00 0.00 0 +ATOM 323 H 1 1 16.626 29.968 -0.130 0.00 0.00 0 +ATOM 324 H 1 1 17.167 29.833 2.927 0.00 0.00 0 +ATOM 325 O 1 1 20.278 3.529 6.048 0.00 0.00 0 +ATOM 326 H 1 1 20.977 3.611 4.575 0.00 0.00 0 +ATOM 327 H 1 1 21.312 4.513 7.251 0.00 0.00 0 +ATOM 328 O 1 1 23.079 5.778 10.408 0.00 0.00 0 +ATOM 329 H 1 1 24.650 6.259 10.838 0.00 0.00 0 +ATOM 330 H 1 1 22.342 7.609 10.178 0.00 0.00 0 +ATOM 331 O 1 1 19.581 2.031 12.110 0.00 0.00 0 +ATOM 332 H 1 1 19.039 1.082 10.440 0.00 0.00 0 +ATOM 333 H 1 1 21.141 2.991 11.851 0.00 0.00 0 +ATOM 334 O 1 1 22.005 3.223 23.178 0.00 0.00 0 +ATOM 335 H 1 1 21.429 4.090 24.554 0.00 0.00 0 +ATOM 336 H 1 1 20.654 1.791 22.711 0.00 0.00 0 +ATOM 337 O 1 1 16.630 6.422 23.792 0.00 0.00 0 +ATOM 338 H 1 1 16.219 4.804 24.406 0.00 0.00 0 +ATOM 339 H 1 1 17.066 7.128 25.282 0.00 0.00 0 +ATOM 340 O 1 1 21.676 5.564 28.158 0.00 0.00 0 +ATOM 341 H 1 1 20.658 6.717 29.185 0.00 0.00 0 +ATOM 342 H 1 1 23.413 5.828 28.996 0.00 0.00 0 +ATOM 343 O 1 1 15.257 5.265 5.626 0.00 0.00 0 +ATOM 344 H 1 1 16.914 4.519 5.490 0.00 0.00 0 +ATOM 345 H 1 1 15.144 6.150 6.972 0.00 0.00 0 +ATOM 346 O 1 1 20.137 11.082 10.437 0.00 0.00 0 +ATOM 347 H 1 1 20.021 10.947 8.733 0.00 0.00 0 +ATOM 348 H 1 1 21.025 12.555 10.853 0.00 0.00 0 +ATOM 349 O 1 1 23.089 14.627 12.437 0.00 0.00 0 +ATOM 350 H 1 1 24.716 15.254 12.736 0.00 0.00 0 +ATOM 351 H 1 1 23.284 13.228 13.653 0.00 0.00 0 +ATOM 352 O 1 1 24.083 12.649 22.566 0.00 0.00 0 +ATOM 353 H 1 1 22.397 12.663 23.042 0.00 0.00 0 +ATOM 354 H 1 1 24.901 13.851 23.565 0.00 0.00 0 +ATOM 355 O 1 1 17.865 7.909 30.036 0.00 0.00 0 +ATOM 356 H 1 1 17.509 8.045 31.982 0.00 0.00 0 +ATOM 357 H 1 1 18.078 9.582 29.318 0.00 0.00 0 +ATOM 358 O 1 1 18.824 8.486 0.104 0.00 0.00 0 +ATOM 359 H 1 1 19.997 10.191 -0.057 0.00 0.00 0 +ATOM 360 H 1 1 17.077 8.998 0.779 0.00 0.00 0 +ATOM 361 O 1 1 20.122 9.143 5.343 0.00 0.00 0 +ATOM 362 H 1 1 19.373 8.819 3.821 0.00 0.00 0 +ATOM 363 H 1 1 21.998 8.776 5.128 0.00 0.00 0 +ATOM 364 O 1 1 16.413 14.459 5.855 0.00 0.00 0 +ATOM 365 H 1 1 15.536 13.007 5.239 0.00 0.00 0 +ATOM 366 H 1 1 16.006 14.725 7.737 0.00 0.00 0 +ATOM 367 O 1 1 17.561 15.066 15.654 0.00 0.00 0 +ATOM 368 H 1 1 17.575 13.398 16.055 0.00 0.00 0 +ATOM 369 H 1 1 18.978 15.828 16.400 0.00 0.00 0 +ATOM 370 O 1 1 26.374 17.047 24.817 0.00 0.00 0 +ATOM 371 H 1 1 27.983 17.098 25.632 0.00 0.00 0 +ATOM 372 H 1 1 25.629 18.751 24.919 0.00 0.00 0 +ATOM 373 O 1 1 19.784 12.960 28.706 0.00 0.00 0 +ATOM 374 H 1 1 21.662 13.055 28.871 0.00 0.00 0 +ATOM 375 H 1 1 19.545 14.070 27.143 0.00 0.00 0 +ATOM 376 O 1 1 17.891 16.733 32.499 0.00 0.00 0 +ATOM 377 H 1 1 18.327 15.240 31.277 0.00 0.00 0 +ATOM 378 H 1 1 18.633 18.335 31.693 0.00 0.00 0 +ATOM 379 O 1 1 23.733 23.024 1.663 0.00 0.00 0 +ATOM 380 H 1 1 24.800 24.052 2.776 0.00 0.00 0 +ATOM 381 H 1 1 24.693 22.618 0.198 0.00 0.00 0 +ATOM 382 O 1 1 20.789 18.440 9.443 0.00 0.00 0 +ATOM 383 H 1 1 20.766 17.257 7.881 0.00 0.00 0 +ATOM 384 H 1 1 21.896 17.345 10.385 0.00 0.00 0 +ATOM 385 O 1 1 21.574 17.493 17.838 0.00 0.00 0 +ATOM 386 H 1 1 20.597 18.955 17.218 0.00 0.00 0 +ATOM 387 H 1 1 22.538 16.874 16.251 0.00 0.00 0 +ATOM 388 O 1 1 19.168 14.748 24.131 0.00 0.00 0 +ATOM 389 H 1 1 19.711 16.390 23.712 0.00 0.00 0 +ATOM 390 H 1 1 17.429 14.695 24.403 0.00 0.00 0 +ATOM 391 O 1 1 22.149 20.198 24.977 0.00 0.00 0 +ATOM 392 H 1 1 21.639 20.924 26.486 0.00 0.00 0 +ATOM 393 H 1 1 22.656 21.657 24.411 0.00 0.00 0 +ATOM 394 O 1 1 20.565 20.792 29.600 0.00 0.00 0 +ATOM 395 H 1 1 22.264 20.409 30.214 0.00 0.00 0 +ATOM 396 H 1 1 20.548 22.408 30.597 0.00 0.00 0 +ATOM 397 O 1 1 20.802 26.547 9.615 0.00 0.00 0 +ATOM 398 H 1 1 20.099 27.984 8.338 0.00 0.00 0 +ATOM 399 H 1 1 21.277 27.539 11.325 0.00 0.00 0 +ATOM 400 O 1 1 16.283 23.589 7.779 0.00 0.00 0 +ATOM 401 H 1 1 16.093 21.973 6.712 0.00 0.00 0 +ATOM 402 H 1 1 17.901 22.971 8.154 0.00 0.00 0 +ATOM 403 O 1 1 18.469 29.798 13.568 0.00 0.00 0 +ATOM 404 H 1 1 19.712 31.216 13.506 0.00 0.00 0 +ATOM 405 H 1 1 16.872 30.343 14.396 0.00 0.00 0 +ATOM 406 O 1 1 18.790 21.712 16.060 0.00 0.00 0 +ATOM 407 H 1 1 19.878 23.090 16.485 0.00 0.00 0 +ATOM 408 H 1 1 17.201 22.326 15.819 0.00 0.00 0 +ATOM 409 O 1 1 21.747 26.084 16.349 0.00 0.00 0 +ATOM 410 H 1 1 20.783 27.021 15.300 0.00 0.00 0 +ATOM 411 H 1 1 22.705 27.328 17.206 0.00 0.00 0 +ATOM 412 O 1 1 20.769 26.211 32.050 0.00 0.00 0 +ATOM 413 H 1 1 21.488 27.404 33.328 0.00 0.00 0 +ATOM 414 H 1 1 18.989 26.710 32.145 0.00 0.00 0 +ATOM 415 O 1 1 19.820 29.181 5.559 0.00 0.00 0 +ATOM 416 H 1 1 20.991 29.509 4.109 0.00 0.00 0 +ATOM 417 H 1 1 19.431 31.018 6.221 0.00 0.00 0 +ATOM 418 O 1 1 19.240 33.867 7.993 0.00 0.00 0 +ATOM 419 H 1 1 19.107 35.039 6.604 0.00 0.00 0 +ATOM 420 H 1 1 20.697 33.671 9.063 0.00 0.00 0 +ATOM 421 O 1 1 22.511 34.976 15.793 0.00 0.00 0 +ATOM 422 H 1 1 23.716 36.163 16.603 0.00 0.00 0 +ATOM 423 H 1 1 21.699 36.150 14.467 0.00 0.00 0 +ATOM 424 O 1 1 22.622 30.284 19.069 0.00 0.00 0 +ATOM 425 H 1 1 22.049 31.351 17.725 0.00 0.00 0 +ATOM 426 H 1 1 24.411 30.773 19.576 0.00 0.00 0 +ATOM 427 O 1 1 18.639 33.611 28.369 0.00 0.00 0 +ATOM 428 H 1 1 18.226 32.159 29.103 0.00 0.00 0 +ATOM 429 H 1 1 19.906 33.008 27.158 0.00 0.00 0 +ATOM 430 O 1 1 22.520 1.325 31.926 0.00 0.00 0 +ATOM 431 H 1 1 22.803 2.668 30.796 0.00 0.00 0 +ATOM 432 H 1 1 21.045 0.425 31.122 0.00 0.00 0 +ATOM 433 O 1 1 21.754 3.789 1.159 0.00 0.00 0 +ATOM 434 H 1 1 22.085 2.785 -0.180 0.00 0.00 0 +ATOM 435 H 1 1 20.850 5.175 0.610 0.00 0.00 0 +ATOM 436 O 1 1 28.457 5.539 12.133 0.00 0.00 0 +ATOM 437 H 1 1 29.489 4.390 11.182 0.00 0.00 0 +ATOM 438 H 1 1 29.161 7.131 12.587 0.00 0.00 0 +ATOM 439 O 1 1 22.495 5.966 17.324 0.00 0.00 0 +ATOM 440 H 1 1 24.377 5.379 17.393 0.00 0.00 0 +ATOM 441 H 1 1 21.906 5.491 18.857 0.00 0.00 0 +ATOM 442 O 1 1 28.128 3.304 22.287 0.00 0.00 0 +ATOM 443 H 1 1 28.123 2.999 20.491 0.00 0.00 0 +ATOM 444 H 1 1 26.533 3.355 22.876 0.00 0.00 0 +ATOM 445 O 1 1 28.378 10.455 27.266 0.00 0.00 0 +ATOM 446 H 1 1 30.019 10.292 28.051 0.00 0.00 0 +ATOM 447 H 1 1 28.635 10.039 25.463 0.00 0.00 0 +ATOM 448 O 1 1 27.031 8.353 34.806 0.00 0.00 0 +ATOM 449 H 1 1 26.116 9.984 34.571 0.00 0.00 0 +ATOM 450 H 1 1 28.685 8.951 34.739 0.00 0.00 0 +ATOM 451 O 1 1 24.951 8.160 4.454 0.00 0.00 0 +ATOM 452 H 1 1 25.930 9.616 5.160 0.00 0.00 0 +ATOM 453 H 1 1 25.947 7.994 2.724 0.00 0.00 0 +ATOM 454 O 1 1 26.937 12.436 6.869 0.00 0.00 0 +ATOM 455 H 1 1 25.492 13.284 6.708 0.00 0.00 0 +ATOM 456 H 1 1 27.689 13.332 8.266 0.00 0.00 0 +ATOM 457 O 1 1 23.365 11.214 16.933 0.00 0.00 0 +ATOM 458 H 1 1 22.247 9.744 16.789 0.00 0.00 0 +ATOM 459 H 1 1 23.264 12.035 18.539 0.00 0.00 0 +ATOM 460 O 1 1 28.321 8.759 22.158 0.00 0.00 0 +ATOM 461 H 1 1 27.662 6.895 22.482 0.00 0.00 0 +ATOM 462 H 1 1 26.971 9.710 21.902 0.00 0.00 0 +ATOM 463 O 1 1 27.071 6.109 29.555 0.00 0.00 0 +ATOM 464 H 1 1 27.591 7.663 28.857 0.00 0.00 0 +ATOM 465 H 1 1 27.304 6.320 31.261 0.00 0.00 0 +ATOM 466 O 1 1 22.474 11.704 34.640 0.00 0.00 0 +ATOM 467 H 1 1 22.752 13.304 35.584 0.00 0.00 0 +ATOM 468 H 1 1 22.840 12.090 33.030 0.00 0.00 0 +ATOM 469 O 1 1 21.656 14.971 5.615 0.00 0.00 0 +ATOM 470 H 1 1 21.690 15.860 3.977 0.00 0.00 0 +ATOM 471 H 1 1 19.964 14.225 5.774 0.00 0.00 0 +ATOM 472 O 1 1 28.539 21.492 9.820 0.00 0.00 0 +ATOM 473 H 1 1 27.288 22.181 8.688 0.00 0.00 0 +ATOM 474 H 1 1 28.065 22.420 11.602 0.00 0.00 0 +ATOM 475 O 1 1 28.364 16.020 11.109 0.00 0.00 0 +ATOM 476 H 1 1 30.033 16.649 12.089 0.00 0.00 0 +ATOM 477 H 1 1 28.456 17.440 10.082 0.00 0.00 0 +ATOM 478 O 1 1 0.054 13.686 18.103 0.00 0.00 0 +ATOM 479 H 1 1 -1.714 12.928 18.841 0.00 0.00 0 +ATOM 480 H 1 1 1.008 12.429 17.383 0.00 0.00 0 +ATOM 481 O 1 1 24.636 12.894 29.957 0.00 0.00 0 +ATOM 482 H 1 1 25.906 13.914 31.183 0.00 0.00 0 +ATOM 483 H 1 1 25.641 11.609 29.162 0.00 0.00 0 +ATOM 484 O 1 1 21.548 17.250 0.749 0.00 0.00 0 +ATOM 485 H 1 1 21.843 19.026 0.905 0.00 0.00 0 +ATOM 486 H 1 1 20.385 16.716 -0.697 0.00 0.00 0 +ATOM 487 O 1 1 26.095 27.274 4.520 0.00 0.00 0 +ATOM 488 H 1 1 27.889 26.458 4.505 0.00 0.00 0 +ATOM 489 H 1 1 25.648 26.970 6.165 0.00 0.00 0 +ATOM 490 O 1 1 23.610 22.515 8.008 0.00 0.00 0 +ATOM 491 H 1 1 22.653 21.187 8.739 0.00 0.00 0 +ATOM 492 H 1 1 22.286 24.095 8.444 0.00 0.00 0 +ATOM 493 O 1 1 27.355 18.929 18.180 0.00 0.00 0 +ATOM 494 H 1 1 27.200 20.349 17.155 0.00 0.00 0 +ATOM 495 H 1 1 25.579 18.322 18.770 0.00 0.00 0 +ATOM 496 O 1 1 26.765 23.633 14.444 0.00 0.00 0 +ATOM 497 H 1 1 27.441 25.298 13.651 0.00 0.00 0 +ATOM 498 H 1 1 25.086 24.256 14.749 0.00 0.00 0 +ATOM 499 O 1 1 31.478 20.769 20.986 0.00 0.00 0 +ATOM 500 H 1 1 30.440 22.509 21.135 0.00 0.00 0 +ATOM 501 H 1 1 30.567 19.656 20.043 0.00 0.00 0 +ATOM 502 O 1 1 24.812 20.412 32.668 0.00 0.00 0 +ATOM 503 H 1 1 26.242 21.478 31.874 0.00 0.00 0 +ATOM 504 H 1 1 25.787 19.023 33.158 0.00 0.00 0 +ATOM 505 O 1 1 22.105 29.076 0.928 0.00 0.00 0 +ATOM 506 H 1 1 23.296 27.923 1.739 0.00 0.00 0 +ATOM 507 H 1 1 22.623 30.994 0.882 0.00 0.00 0 +ATOM 508 O 1 1 29.572 31.256 8.626 0.00 0.00 0 +ATOM 509 H 1 1 30.795 30.203 7.736 0.00 0.00 0 +ATOM 510 H 1 1 28.277 31.519 7.260 0.00 0.00 0 +ATOM 511 O 1 1 31.817 34.843 18.283 0.00 0.00 0 +ATOM 512 H 1 1 32.438 34.389 16.474 0.00 0.00 0 +ATOM 513 H 1 1 32.743 36.422 18.341 0.00 0.00 0 +ATOM 514 O 1 1 27.915 25.601 19.033 0.00 0.00 0 +ATOM 515 H 1 1 29.358 26.561 19.190 0.00 0.00 0 +ATOM 516 H 1 1 28.148 24.429 17.530 0.00 0.00 0 +ATOM 517 O 1 1 24.548 24.654 24.025 0.00 0.00 0 +ATOM 518 H 1 1 25.528 25.635 22.824 0.00 0.00 0 +ATOM 519 H 1 1 25.300 25.200 25.645 0.00 0.00 0 +ATOM 520 O 1 1 28.540 22.922 30.370 0.00 0.00 0 +ATOM 521 H 1 1 27.414 24.096 29.781 0.00 0.00 0 +ATOM 522 H 1 1 29.674 23.914 31.873 0.00 0.00 0 +ATOM 523 O 1 1 24.969 33.623 1.014 0.00 0.00 0 +ATOM 524 H 1 1 26.521 33.058 1.518 0.00 0.00 0 +ATOM 525 H 1 1 24.990 34.322 -0.683 0.00 0.00 0 +ATOM 526 O 1 1 23.075 32.171 11.324 0.00 0.00 0 +ATOM 527 H 1 1 23.316 32.775 13.097 0.00 0.00 0 +ATOM 528 H 1 1 24.460 33.203 10.662 0.00 0.00 0 +ATOM 529 O 1 1 27.497 2.736 17.224 0.00 0.00 0 +ATOM 530 H 1 1 28.397 3.415 15.715 0.00 0.00 0 +ATOM 531 H 1 1 28.234 1.233 17.412 0.00 0.00 0 +ATOM 532 O 1 1 26.369 33.060 22.077 0.00 0.00 0 +ATOM 533 H 1 1 26.170 34.746 22.264 0.00 0.00 0 +ATOM 534 H 1 1 27.592 32.404 23.321 0.00 0.00 0 +ATOM 535 O 1 1 30.221 30.950 25.843 0.00 0.00 0 +ATOM 536 H 1 1 30.305 29.038 26.208 0.00 0.00 0 +ATOM 537 H 1 1 30.363 31.979 27.414 0.00 0.00 0 +ATOM 538 O 1 1 24.973 26.732 28.607 0.00 0.00 0 +ATOM 539 H 1 1 25.385 28.369 29.248 0.00 0.00 0 +ATOM 540 H 1 1 23.330 26.597 29.234 0.00 0.00 0 +ATOM 541 O 1 1 32.165 4.857 2.258 0.00 0.00 0 +ATOM 542 H 1 1 32.417 6.195 1.157 0.00 0.00 0 +ATOM 543 H 1 1 32.615 3.727 1.112 0.00 0.00 0 +ATOM 544 O 1 1 28.067 3.533 5.217 0.00 0.00 0 +ATOM 545 H 1 1 26.960 4.447 4.158 0.00 0.00 0 +ATOM 546 H 1 1 29.875 3.863 4.448 0.00 0.00 0 +ATOM 547 O 1 1 33.279 2.782 13.028 0.00 0.00 0 +ATOM 548 H 1 1 33.708 3.955 11.817 0.00 0.00 0 +ATOM 549 H 1 1 33.656 3.545 14.631 0.00 0.00 0 +ATOM 550 O 1 1 34.278 4.944 17.492 0.00 0.00 0 +ATOM 551 H 1 1 33.438 6.563 17.876 0.00 0.00 0 +ATOM 552 H 1 1 34.906 4.452 18.995 0.00 0.00 0 +ATOM 553 O 1 1 32.363 1.908 26.092 0.00 0.00 0 +ATOM 554 H 1 1 31.941 1.683 24.268 0.00 0.00 0 +ATOM 555 H 1 1 33.850 1.390 26.904 0.00 0.00 0 +ATOM 556 O 1 1 27.982 0.418 28.241 0.00 0.00 0 +ATOM 557 H 1 1 27.516 2.080 28.309 0.00 0.00 0 +ATOM 558 H 1 1 29.593 0.176 27.299 0.00 0.00 0 +ATOM 559 O 1 1 28.845 14.672 2.724 0.00 0.00 0 +ATOM 560 H 1 1 27.963 13.930 4.139 0.00 0.00 0 +ATOM 561 H 1 1 30.386 15.714 3.379 0.00 0.00 0 +ATOM 562 O 1 1 28.083 10.618 14.298 0.00 0.00 0 +ATOM 563 H 1 1 28.623 12.160 13.293 0.00 0.00 0 +ATOM 564 H 1 1 26.486 11.015 15.379 0.00 0.00 0 +ATOM 565 O 1 1 33.867 10.545 13.306 0.00 0.00 0 +ATOM 566 H 1 1 35.165 9.612 13.810 0.00 0.00 0 +ATOM 567 H 1 1 33.615 10.270 11.513 0.00 0.00 0 +ATOM 568 O 1 1 31.790 9.696 18.223 0.00 0.00 0 +ATOM 569 H 1 1 30.484 9.334 19.421 0.00 0.00 0 +ATOM 570 H 1 1 30.834 10.096 16.929 0.00 0.00 0 +ATOM 571 O 1 1 30.141 15.006 21.532 0.00 0.00 0 +ATOM 572 H 1 1 28.565 15.594 22.099 0.00 0.00 0 +ATOM 573 H 1 1 30.942 14.253 23.077 0.00 0.00 0 +ATOM 574 O 1 1 32.798 10.732 30.680 0.00 0.00 0 +ATOM 575 H 1 1 34.073 9.528 30.799 0.00 0.00 0 +ATOM 576 H 1 1 32.991 11.512 28.983 0.00 0.00 0 +ATOM 577 O 1 1 33.652 16.265 5.086 0.00 0.00 0 +ATOM 578 H 1 1 35.399 16.239 4.730 0.00 0.00 0 +ATOM 579 H 1 1 33.503 17.939 5.631 0.00 0.00 0 +ATOM 580 O 1 1 31.947 10.799 7.943 0.00 0.00 0 +ATOM 581 H 1 1 29.894 10.549 7.619 0.00 0.00 0 +ATOM 582 H 1 1 32.271 12.414 7.075 0.00 0.00 0 +ATOM 583 O 1 1 0.329 15.516 11.746 0.00 0.00 0 +ATOM 584 H 1 1 -0.446 14.249 12.939 0.00 0.00 0 +ATOM 585 H 1 1 -0.685 17.018 11.935 0.00 0.00 0 +ATOM 586 O 1 1 4.262 19.165 14.308 0.00 0.00 0 +ATOM 587 H 1 1 3.579 17.691 14.920 0.00 0.00 0 +ATOM 588 H 1 1 5.723 19.183 15.204 0.00 0.00 0 +ATOM 589 O 1 1 32.995 13.546 25.948 0.00 0.00 0 +ATOM 590 H 1 1 32.167 15.060 26.787 0.00 0.00 0 +ATOM 591 H 1 1 34.425 13.800 25.007 0.00 0.00 0 +ATOM 592 O 1 1 1.773 13.524 34.037 0.00 0.00 0 +ATOM 593 H 1 1 0.227 14.409 33.446 0.00 0.00 0 +ATOM 594 H 1 1 2.167 14.670 35.511 0.00 0.00 0 +ATOM 595 O 1 1 33.029 20.529 7.247 0.00 0.00 0 +ATOM 596 H 1 1 34.388 21.414 8.003 0.00 0.00 0 +ATOM 597 H 1 1 31.451 20.831 8.182 0.00 0.00 0 +ATOM 598 O 1 1 2.037 24.250 10.251 0.00 0.00 0 +ATOM 599 H 1 1 3.743 25.008 9.876 0.00 0.00 0 +ATOM 600 H 1 1 1.894 25.043 11.903 0.00 0.00 0 +ATOM 601 O 1 1 32.753 19.259 13.976 0.00 0.00 0 +ATOM 602 H 1 1 32.792 20.886 13.792 0.00 0.00 0 +ATOM 603 H 1 1 34.334 18.799 14.976 0.00 0.00 0 +ATOM 604 O 1 1 0.396 18.673 18.699 0.00 0.00 0 +ATOM 605 H 1 1 -1.211 18.950 19.127 0.00 0.00 0 +ATOM 606 H 1 1 0.469 16.977 18.436 0.00 0.00 0 +ATOM 607 O 1 1 30.855 18.370 27.959 0.00 0.00 0 +ATOM 608 H 1 1 29.759 19.681 28.690 0.00 0.00 0 +ATOM 609 H 1 1 32.103 19.477 26.763 0.00 0.00 0 +ATOM 610 O 1 1 27.723 15.992 33.091 0.00 0.00 0 +ATOM 611 H 1 1 29.390 16.423 32.192 0.00 0.00 0 +ATOM 612 H 1 1 27.801 15.859 34.804 0.00 0.00 0 +ATOM 613 O 1 1 31.068 27.895 3.348 0.00 0.00 0 +ATOM 614 H 1 1 32.517 27.825 4.610 0.00 0.00 0 +ATOM 615 H 1 1 31.529 29.459 2.324 0.00 0.00 0 +ATOM 616 O 1 1 35.039 28.008 6.663 0.00 0.00 0 +ATOM 617 H 1 1 35.966 26.934 7.683 0.00 0.00 0 +ATOM 618 H 1 1 36.055 28.336 5.336 0.00 0.00 0 +ATOM 619 O 1 1 29.356 28.196 13.025 0.00 0.00 0 +ATOM 620 H 1 1 29.210 29.335 14.589 0.00 0.00 0 +ATOM 621 H 1 1 28.874 29.629 11.867 0.00 0.00 0 +ATOM 622 O 1 1 32.386 28.434 18.961 0.00 0.00 0 +ATOM 623 H 1 1 33.368 28.574 20.411 0.00 0.00 0 +ATOM 624 H 1 1 33.410 27.406 17.949 0.00 0.00 0 +ATOM 625 O 1 1 30.898 25.390 25.799 0.00 0.00 0 +ATOM 626 H 1 1 32.369 25.913 24.580 0.00 0.00 0 +ATOM 627 H 1 1 31.317 24.075 27.029 0.00 0.00 0 +ATOM 628 O 1 1 32.259 25.611 33.104 0.00 0.00 0 +ATOM 629 H 1 1 32.238 25.736 34.806 0.00 0.00 0 +ATOM 630 H 1 1 33.920 25.042 32.775 0.00 0.00 0 +ATOM 631 O 1 1 30.290 32.645 1.341 0.00 0.00 0 +ATOM 632 H 1 1 29.949 32.793 -0.430 0.00 0.00 0 +ATOM 633 H 1 1 31.762 33.340 1.847 0.00 0.00 0 +ATOM 634 O 1 1 25.536 34.235 6.469 0.00 0.00 0 +ATOM 635 H 1 1 25.716 36.059 6.651 0.00 0.00 0 +ATOM 636 H 1 1 25.283 33.866 4.895 0.00 0.00 0 +ATOM 637 O 1 1 31.674 33.161 13.106 0.00 0.00 0 +ATOM 638 H 1 1 31.793 34.863 13.281 0.00 0.00 0 +ATOM 639 H 1 1 30.425 32.928 11.783 0.00 0.00 0 +ATOM 640 O 1 1 33.844 32.668 22.296 0.00 0.00 0 +ATOM 641 H 1 1 32.750 32.234 23.524 0.00 0.00 0 +ATOM 642 H 1 1 32.917 32.875 20.736 0.00 0.00 0 +ATOM 643 O 1 1 31.603 30.542 30.805 0.00 0.00 0 +ATOM 644 H 1 1 33.451 30.804 30.468 0.00 0.00 0 +ATOM 645 H 1 1 31.575 28.816 31.756 0.00 0.00 0 +ATOM 646 O 1 1 26.295 31.235 30.599 0.00 0.00 0 +ATOM 647 H 1 1 27.834 30.515 30.607 0.00 0.00 0 +ATOM 648 H 1 1 26.362 32.920 29.856 0.00 0.00 0 +END diff --git a/tools/i-pi/examples/lammps/h2o-pimd/data.water b/tools/i-pi/examples/lammps/h2o-pimd/data.water new file mode 100644 index 000000000..13c75e993 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd/data.water @@ -0,0 +1,1331 @@ +LAMMPS Description + + 648 atoms + 432 bonds + 216 angles + + 2 atom types + 1 bond types + 1 angle types + + 0 35.233 xlo xhi + 0 35.233 ylo yhi + 0 35.233 zlo zhi + +Masses + + 1 15.9994 + 2 1.0080 + +Bond Coeffs + + 1 1.78 0.2708585 -0.327738785 0.231328959 + +Angle Coeffs + + 1 0.0700 107.400000 + +Atoms + + 1 1 1 -1.1128 3.84600000 5.67200001 1.32300000 + 2 1 2 0.5564 2.97900000 7.05400000 0.85700000 + 3 1 2 0.5564 5.52500001 5.69700001 0.45100000 + 4 2 1 -1.1128 34.55700001 34.34100000 3.07800000 + 5 2 2 0.5564 33.72200001 34.68900000 4.84000001 + 6 2 2 0.5564 36.02900000 33.22000001 3.71100001 + 7 3 1 -1.1128 5.59100000 1.96299999 13.47700000 + 8 3 2 0.5564 7.26500000 1.86400000 13.85100001 + 9 3 2 0.5564 5.00899999 3.55500000 13.91599999 + 10 4 1 -1.1128 1.06000000 2.06100000 21.71800001 + 11 4 2 0.5564 0.75700000 0.26100000 21.82000000 + 12 4 2 0.5564 0.21300001 3.01299999 23.04700000 + 13 5 1 -1.1128 1.20000000 1.33700000 29.00599999 + 14 5 2 0.5564 0.81800000 1.88399999 30.73200000 + 15 5 2 0.5564 2.88300001 1.82500000 29.01100000 + 16 6 1 -1.1128 1.33100001 1.38599999 34.30600001 + 17 6 2 0.5564 2.39200001 2.89799999 34.84600000 + 18 6 2 0.5564 0.81400000 0.53200001 35.83600000 + 19 7 1 -1.1128 31.45100000 10.20100000 0.72599999 + 20 7 2 0.5564 32.28199999 10.87699999 -0.75000000 + 21 7 2 0.5564 30.91999999 11.59399999 1.67700000 + 22 8 1 -1.1128 0.83600000 10.80800001 4.29800000 + 23 8 2 0.5564 0.30500000 10.64300001 2.79300000 + 24 8 2 0.5564 -0.35600001 10.33400000 5.52400000 + 25 9 1 -1.1128 34.38100001 5.97900000 9.19400000 + 26 9 2 0.5564 33.61600000 7.67300000 8.85700000 + 27 9 2 0.5564 35.11500000 5.25999999 7.61800001 + 28 10 1 -1.1128 33.21200000 6.48000000 24.27799999 + 29 10 2 0.5564 31.62400000 6.90800001 23.52100001 + 30 10 2 0.5564 32.54400000 4.99000000 24.98200000 + 31 11 1 -1.1128 1.99200000 9.00199999 26.86300000 + 32 11 2 0.5564 1.85600000 10.17500000 25.57899999 + 33 11 2 0.5564 0.51900000 8.09899999 26.38599999 + 34 12 1 -1.1128 2.05400000 8.66000000 32.51499999 + 35 12 2 0.5564 2.16699999 8.72700000 30.49400000 + 36 12 2 0.5564 2.37400001 10.51300000 33.03799999 + 37 13 1 -1.1128 3.40200000 16.63900001 3.00800000 + 38 13 2 0.5564 4.12700001 15.87200001 4.44600001 + 39 13 2 0.5564 2.90500001 18.33899999 3.15999999 + 40 14 1 -1.1128 4.22200000 15.44400000 8.07200000 + 41 14 2 0.5564 5.21100000 16.75600000 8.29900001 + 42 14 2 0.5564 2.56000000 15.49200001 8.86000000 + 43 15 1 -1.1128 2.83100000 9.24599999 16.48800000 + 44 15 2 0.5564 2.86900001 8.02300001 18.05000000 + 45 15 2 0.5564 3.96000000 8.46700001 15.15400000 + 46 16 1 -1.1128 5.56300000 6.00300000 20.90700000 + 47 16 2 0.5564 4.65300000 4.63800000 21.48000000 + 48 16 2 0.5564 6.40500000 6.20800000 22.52899999 + 49 17 1 -1.1128 2.08700001 13.37000000 22.91299999 + 50 17 2 0.5564 2.83200000 14.80400001 23.42200000 + 51 17 2 0.5564 1.43400000 13.50900000 21.19599999 + 52 18 1 -1.1128 3.36900000 17.88600000 25.10900001 + 53 18 2 0.5564 3.65500000 17.20000000 26.76599999 + 54 18 2 0.5564 4.77200001 18.97699999 24.49999999 + 55 19 1 -1.1128 34.76400000 20.80300000 0.94800001 + 56 19 2 0.5564 35.20999999 21.26700001 2.81599999 + 57 19 2 0.5564 35.96200001 21.72599999 0.13099999 + 58 20 1 -1.1128 2.83600000 24.17799999 15.22900000 + 59 20 2 0.5564 2.79500000 22.34599999 14.87600001 + 60 20 2 0.5564 2.41399999 24.11500000 17.13000001 + 61 21 1 -1.1128 33.00000000 24.48100000 15.23000000 + 62 21 2 0.5564 34.63999999 24.80400001 15.01299999 + 63 21 2 0.5564 32.40100000 25.76400000 14.29500001 + 64 22 1 -1.1128 0.40399999 26.77900001 23.39999999 + 65 22 2 0.5564 1.35300001 27.24800000 24.98700001 + 66 22 2 0.5564 1.54600001 28.05000000 22.31700001 + 67 23 1 -1.1128 34.22200000 21.38000000 25.41799999 + 68 23 2 0.5564 35.66899999 20.15100000 25.31700001 + 69 23 2 0.5564 32.96000000 21.18000000 23.99200000 + 70 24 1 -1.1128 33.25900000 17.43800000 32.48000000 + 71 24 2 0.5564 33.31399999 18.78200000 33.88300001 + 72 24 2 0.5564 32.74300001 18.18100001 30.87100000 + 73 25 1 -1.1128 4.46300000 21.97900000 3.93600000 + 74 25 2 0.5564 5.85600000 23.08400001 3.39999999 + 75 25 2 0.5564 3.98600000 22.18000000 5.60200000 + 76 26 1 -1.1128 6.25800000 25.85100001 8.52000000 + 77 26 2 0.5564 5.76700000 27.69300001 8.47600000 + 78 26 2 0.5564 7.20200001 25.50600000 10.18600000 + 79 27 1 -1.1128 0.60099999 29.73699999 12.74700001 + 80 27 2 0.5564 -0.68500000 30.84200000 12.34999999 + 81 27 2 0.5564 1.33600000 30.71600000 14.03099999 + 82 28 1 -1.1128 7.56300000 28.19100001 24.33300000 + 83 28 2 0.5564 9.20100000 28.82800000 24.68400000 + 84 28 2 0.5564 7.38100001 27.62100000 22.79900000 + 85 29 1 -1.1128 3.65300000 27.10900001 27.77200001 + 86 29 2 0.5564 5.12600000 27.01500000 26.77200001 + 87 29 2 0.5564 3.03099999 28.75600000 27.69800000 + 88 30 1 -1.1128 2.59600001 23.99100001 32.47600000 + 89 30 2 0.5564 2.87900000 24.79099999 30.85899999 + 90 30 2 0.5564 4.00300000 22.91299999 32.70099999 + 91 31 1 -1.1128 3.08300000 31.31700001 3.64399999 + 92 31 2 0.5564 4.13300000 30.58900001 2.53900001 + 93 31 2 0.5564 4.21800000 32.17300001 5.03700001 + 94 32 1 -1.1128 4.66100001 30.55500000 9.36799999 + 95 32 2 0.5564 3.18400001 29.84300000 10.13200000 + 96 32 2 0.5564 4.35800000 32.44800000 9.12600000 + 97 33 1 -1.1128 3.46499999 32.53700000 15.77800000 + 98 33 2 0.5564 5.07200000 31.81899999 15.90300000 + 99 33 2 0.5564 4.05500001 34.25699999 15.28400000 + 100 34 1 -1.1128 4.21500000 29.15299999 20.31700001 + 101 34 2 0.5564 3.65799999 30.17600000 18.84200000 + 102 34 2 0.5564 4.95899999 30.29100000 21.44900001 + 103 35 1 -1.1128 1.12600000 31.33300000 28.76800001 + 104 35 2 0.5564 2.39500000 31.12399999 29.92500000 + 105 35 2 0.5564 0.76800001 33.09199999 28.89799999 + 106 36 1 -1.1128 4.88100000 32.61600000 32.30200000 + 107 36 2 0.5564 6.58800000 32.91100000 31.72500001 + 108 36 2 0.5564 4.48599999 34.03700001 33.24900001 + 109 37 1 -1.1128 8.96200001 5.55600000 0.15100000 + 110 37 2 0.5564 9.65200000 6.99100001 0.85899999 + 111 37 2 0.5564 9.17300001 4.47700000 1.64500000 + 112 38 1 -1.1128 1.83300001 3.51799999 5.67900001 + 113 38 2 0.5564 2.88900000 2.73100000 6.78800000 + 114 38 2 0.5564 2.78900000 4.18700000 4.14700000 + 115 39 1 -1.1128 10.51000001 34.72599999 13.07300001 + 116 39 2 0.5564 11.91999999 34.11800000 11.91900001 + 117 39 2 0.5564 11.29500001 34.96800000 14.74100000 + 118 40 1 -1.1128 7.21200000 0.04199999 22.45399999 + 119 40 2 0.5564 6.92400000 0.47000000 24.17200000 + 120 40 2 0.5564 8.31900000 1.22799999 21.65300000 + 121 41 1 -1.1128 6.36500000 2.01000000 27.54400000 + 122 41 2 0.5564 5.95400000 3.58500000 26.85199999 + 123 41 2 0.5564 7.75800001 2.54900000 28.69600000 + 124 42 1 -1.1128 10.83300001 3.14000000 30.78699999 + 125 42 2 0.5564 12.69700001 2.97500000 30.86700000 + 126 42 2 0.5564 10.38899999 3.70000001 32.40399999 + 127 43 1 -1.1128 8.68400000 9.34200001 3.91200001 + 128 43 2 0.5564 6.98500000 9.25600001 4.77299999 + 129 43 2 0.5564 8.68400000 10.80899999 3.01100000 + 130 44 1 -1.1128 4.87299999 9.91900001 7.70700000 + 131 44 2 0.5564 3.69800000 9.77100000 6.19400000 + 132 44 2 0.5564 5.04700000 11.96100000 7.62400000 + 133 45 1 -1.1128 10.03099999 5.01800000 9.69900000 + 134 45 2 0.5564 9.67500001 3.38199999 10.34000000 + 135 45 2 0.5564 9.13200000 5.98700001 10.82500000 + 136 46 1 -1.1128 11.24599999 3.91800000 21.92900000 + 137 46 2 0.5564 12.61400001 2.77000000 22.34100000 + 138 46 2 0.5564 12.07300001 5.68600001 21.49699999 + 139 47 1 -1.1128 6.82500000 7.16400000 25.70799999 + 140 47 2 0.5564 8.03600000 8.37400001 25.98000001 + 141 47 2 0.5564 5.20600001 7.90000000 25.89099999 + 142 48 1 -1.1128 10.17099999 12.81100001 0.29500001 + 143 48 2 0.5564 10.03300000 12.81800000 -1.60900000 + 144 48 2 0.5564 9.87999999 14.49200001 0.48000000 + 145 49 1 -1.1128 8.19000000 17.40200000 1.25299999 + 146 49 2 0.5564 9.47199999 18.53100000 1.25299999 + 147 49 2 0.5564 6.35100000 17.81700000 1.56800001 + 148 50 1 -1.1128 11.23300000 16.18800001 8.29900001 + 149 50 2 0.5564 10.29100000 17.68900000 8.16600001 + 150 50 2 0.5564 12.76800001 17.12300001 8.73299999 + 151 51 1 -1.1128 6.38599999 8.00199999 12.84600000 + 152 51 2 0.5564 7.70099999 8.89600000 13.65500000 + 153 51 2 0.5564 5.59100000 8.87699999 11.51900000 + 154 52 1 -1.1128 8.18400001 10.41900000 18.84799999 + 155 52 2 0.5564 9.49800000 9.43400000 19.90500001 + 156 52 2 0.5564 6.88200000 9.02699999 18.94800001 + 157 53 1 -1.1128 10.80600000 14.43100000 21.32799999 + 158 53 2 0.5564 9.17700001 13.53100000 20.67000000 + 159 53 2 0.5564 11.34400000 15.69600000 20.44800000 + 160 54 1 -1.1128 9.23700000 13.92800000 30.34100000 + 161 54 2 0.5564 10.77900001 14.83900000 30.52199999 + 162 54 2 0.5564 9.96500000 13.19199999 28.89900000 + 163 55 1 -1.1128 10.91800000 21.70700000 1.86400000 + 164 55 2 0.5564 10.28000000 23.44900001 2.27900000 + 165 55 2 0.5564 12.70799999 21.45600000 1.74900000 + 166 56 1 -1.1128 9.35300001 16.12500000 13.92699999 + 167 56 2 0.5564 9.93799999 17.59399999 14.61800001 + 168 56 2 0.5564 9.51799999 16.36000001 12.24400000 + 169 57 1 -1.1128 10.37099999 11.10700000 14.26800000 + 170 57 2 0.5564 9.64399999 10.40600001 15.85899999 + 171 57 2 0.5564 9.43400000 12.52300000 14.11699999 + 172 58 1 -1.1128 3.35100000 22.76899999 20.19599999 + 173 58 2 0.5564 2.05500001 23.68600001 21.50300001 + 174 58 2 0.5564 2.45200000 21.40100000 19.41300000 + 175 59 1 -1.1128 6.83600000 21.32900000 23.19899999 + 176 59 2 0.5564 8.24900001 20.84799999 22.32000001 + 177 59 2 0.5564 5.66800001 21.84099999 21.88600000 + 178 60 1 -1.1128 4.60399999 15.64900000 30.04300000 + 179 60 2 0.5564 6.45300001 15.21699999 30.20700000 + 180 60 2 0.5564 3.82200001 14.76199999 31.56200000 + 181 61 1 -1.1128 7.12500000 19.97600001 9.42100001 + 182 61 2 0.5564 5.91800000 20.45300001 10.72999999 + 183 61 2 0.5564 8.09899999 21.49600001 9.49100000 + 184 62 1 -1.1128 9.06299999 25.91200001 13.18600000 + 185 62 2 0.5564 10.34999999 26.57199999 12.36700001 + 186 62 2 0.5564 9.67999999 24.36700001 13.69700001 + 187 63 1 -1.1128 8.02200000 22.34299999 17.04199999 + 188 63 2 0.5564 9.14400000 23.36700001 18.07399999 + 189 63 2 0.5564 6.56200000 23.46200000 16.85199999 + 190 64 1 -1.1128 10.76199999 26.28499999 19.96299999 + 191 64 2 0.5564 11.03600000 27.96599999 20.53800000 + 192 64 2 0.5564 11.07800000 25.40100000 21.45600000 + 193 65 1 -1.1128 9.15800000 22.90199999 28.39100000 + 194 65 2 0.5564 8.21900000 23.52800001 27.08499999 + 195 65 2 0.5564 8.08900000 21.76000000 29.50900000 + 196 66 1 -1.1128 6.21900000 20.15800000 31.92100000 + 197 66 2 0.5564 5.63500000 18.51099999 31.16100000 + 198 66 2 0.5564 7.53000000 19.62400000 33.07100000 + 199 67 1 -1.1128 11.19100001 31.50900000 2.61700000 + 200 67 2 0.5564 10.46000001 32.21399999 4.10800000 + 201 67 2 0.5564 13.17600000 31.75099999 2.57700000 + 202 68 1 -1.1128 4.74799999 0.05500001 8.60500000 + 203 68 2 0.5564 5.38000000 0.51700000 10.18300000 + 204 68 2 0.5564 6.05000000 -0.30600001 7.48000000 + 205 69 1 -1.1128 8.69500000 30.80899999 15.73100000 + 206 69 2 0.5564 9.18899999 32.10300000 14.49500000 + 207 69 2 0.5564 8.44699999 29.06900000 14.86800000 + 208 70 1 -1.1128 10.12799999 31.40200000 20.76599999 + 209 70 2 0.5564 9.45600000 30.90500001 19.15500000 + 210 70 2 0.5564 9.01999999 32.73100000 21.41500000 + 211 71 1 -1.1128 12.23800001 30.16200000 25.83699999 + 212 71 2 0.5564 11.41799999 30.90800001 27.10999999 + 213 71 2 0.5564 12.39600001 31.33100001 24.67800000 + 214 72 1 -1.1128 10.39500000 32.53700000 30.62400000 + 215 72 2 0.5564 11.04199999 34.33899999 30.75099999 + 216 72 2 0.5564 11.37800001 31.48599999 31.53800000 + 217 73 1 -1.1128 10.43800000 3.62599999 5.08700001 + 218 73 2 0.5564 12.43500001 4.08200000 5.13600000 + 219 73 2 0.5564 9.82200001 4.28400000 6.68100000 + 220 74 1 -1.1128 14.76199999 3.40100000 13.77599999 + 221 74 2 0.5564 16.51799999 3.82400000 13.37600000 + 222 74 2 0.5564 13.75200000 4.75700000 12.96400000 + 223 75 1 -1.1128 12.38199999 1.01200001 17.64300001 + 224 75 2 0.5564 13.34599999 1.99700000 16.44400000 + 225 75 2 0.5564 11.93100000 2.13300000 18.99800001 + 226 76 1 -1.1128 15.27799999 1.29300000 24.55900000 + 227 76 2 0.5564 16.07100000 0.94600000 26.36500000 + 228 76 2 0.5564 15.79399999 0.19899999 23.49900000 + 229 77 1 -1.1128 22.22600000 31.62700000 24.71199999 + 230 77 2 0.5564 23.33800001 32.59500000 23.87600001 + 231 77 2 0.5564 22.16100000 30.05300000 24.13200000 + 232 78 1 -1.1128 15.63999999 1.84700001 32.71700000 + 233 78 2 0.5564 17.48800000 2.47300000 31.87400000 + 234 78 2 0.5564 16.40300001 0.86900001 34.26700001 + 235 79 1 -1.1128 14.85800001 10.19899999 2.75400001 + 236 79 2 0.5564 13.36000001 10.71199999 2.28199999 + 237 79 2 0.5564 14.56000000 9.31600000 4.55900000 + 238 80 1 -1.1128 15.71700000 8.46900000 10.73900000 + 239 80 2 0.5564 17.32300000 9.58100000 10.87500000 + 240 80 2 0.5564 14.57400000 9.63100000 10.22099999 + 241 81 1 -1.1128 15.24800000 10.39800000 16.52500001 + 242 81 2 0.5564 16.32400001 9.18100001 16.14899999 + 243 81 2 0.5564 14.17200000 10.48800000 15.09800001 + 244 82 1 -1.1128 13.22600000 8.43800000 20.80100001 + 245 82 2 0.5564 14.04300000 8.99600000 19.29500001 + 246 82 2 0.5564 14.66100001 7.80200000 22.09300000 + 247 83 1 -1.1128 10.17300001 10.96100000 25.87500000 + 248 83 2 0.5564 11.47700000 10.22300000 26.94000000 + 249 83 2 0.5564 11.26900000 10.73800000 24.34299999 + 250 84 1 -1.1128 12.79200000 7.73699999 29.17300001 + 251 84 2 0.5564 12.19899999 6.03799999 29.47499999 + 252 84 2 0.5564 14.42700000 7.44999999 29.61700000 + 253 85 1 -1.1128 15.18000000 19.49800000 3.57800000 + 254 85 2 0.5564 14.88300001 17.59600001 4.08000001 + 255 85 2 0.5564 16.75400001 19.57899999 2.62599999 + 256 86 1 -1.1128 12.51700000 11.09300000 7.70099999 + 257 86 2 0.5564 12.22400001 12.77800000 7.55500000 + 258 86 2 0.5564 11.15000000 10.39299999 7.05700000 + 259 87 1 -1.1128 16.26600000 16.27099999 10.75800001 + 260 87 2 0.5564 16.50700001 15.79500000 12.76800001 + 261 87 2 0.5564 17.72500001 16.97699999 10.29200001 + 262 88 1 -1.1128 14.06900000 18.39900001 18.89700000 + 263 88 2 0.5564 15.51300000 17.52300000 18.15500000 + 264 88 2 0.5564 14.95800001 18.70900000 20.67300000 + 265 89 1 -1.1128 14.09899999 15.48000000 25.51000001 + 266 89 2 0.5564 13.69800000 16.87200001 26.93799999 + 267 89 2 0.5564 12.56700000 15.37900000 24.44400000 + 268 90 1 -1.1128 13.30900000 17.57400000 30.29200001 + 269 90 2 0.5564 14.93700001 16.93399999 30.81000000 + 270 90 2 0.5564 13.96900001 19.49400000 30.01200001 + 271 91 1 -1.1128 18.37099999 23.25699999 0.92500000 + 272 91 2 0.5564 19.47899999 23.48000000 2.32099999 + 273 91 2 0.5564 19.08700001 24.32499999 -0.36900000 + 274 92 1 -1.1128 12.10000000 21.72999999 11.35500000 + 275 92 2 0.5564 13.14100001 22.28700000 12.74300001 + 276 92 2 0.5564 13.46700001 22.23600000 10.24400000 + 277 93 1 -1.1128 12.16300001 23.29000000 23.59699999 + 278 93 2 0.5564 11.32400001 22.73600001 24.94900000 + 279 93 2 0.5564 13.88200000 22.87200001 23.84000001 + 280 94 1 -1.1128 20.17300001 26.76100001 22.62800000 + 281 94 2 0.5564 20.20600001 26.53200001 20.79200000 + 282 94 2 0.5564 21.55600000 25.74200000 23.38899999 + 283 95 1 -1.1128 16.70099999 21.16500000 22.60500000 + 284 95 2 0.5564 18.02800000 20.68600001 23.84799999 + 285 95 2 0.5564 17.10400000 22.86599999 21.94900000 + 286 96 1 -1.1128 11.39100000 26.46099999 33.70499999 + 287 96 2 0.5564 9.84099999 27.19199999 34.04800001 + 288 96 2 0.5564 11.77599999 25.53999999 35.24300000 + 289 97 1 -1.1128 9.89799999 25.98900000 4.55300001 + 290 97 2 0.5564 8.90199999 26.13099999 6.03900000 + 291 97 2 0.5564 10.28700000 27.80600000 4.37600000 + 292 98 1 -1.1128 14.30800000 26.96000000 10.87699999 + 293 98 2 0.5564 15.30200000 27.40500000 12.17300001 + 294 98 2 0.5564 15.46300000 26.15100000 9.63299999 + 295 99 1 -1.1128 13.43300000 22.96000000 16.90400000 + 296 99 2 0.5564 13.40900000 24.13099999 18.13200000 + 297 99 2 0.5564 13.62400000 21.19100001 17.52000000 + 298 100 1 -1.1128 16.40900000 26.76800001 26.87500000 + 299 100 2 0.5564 17.58999999 26.98700001 25.43100000 + 300 100 2 0.5564 14.75099999 27.70300000 26.23000000 + 301 101 1 -1.1128 14.40500000 22.73299999 29.89200000 + 302 101 2 0.5564 15.42300000 23.07900000 28.49400000 + 303 101 2 0.5564 12.82600001 23.25900000 29.41600000 + 304 102 1 -1.1128 6.90500001 29.40800000 0.74900000 + 305 102 2 0.5564 8.42800001 30.48300000 1.56700000 + 306 102 2 0.5564 6.35300001 30.81400000 -0.44400000 + 307 103 1 -1.1128 9.18899999 34.15900001 6.50900000 + 308 103 2 0.5564 10.19800000 34.19300000 8.00199999 + 309 103 2 0.5564 9.89000001 35.69200000 5.78500000 + 310 104 1 -1.1128 14.25600001 32.31600000 9.36900000 + 311 104 2 0.5564 15.73299999 32.86700000 9.48599999 + 312 104 2 0.5564 14.75400001 30.67000000 10.09000000 + 313 105 1 -1.1128 14.71400000 30.84099999 16.51600000 + 314 105 2 0.5564 13.74799999 29.55099999 17.27900000 + 315 105 2 0.5564 13.21800000 31.93300001 16.61400001 + 316 106 1 -1.1128 18.40900000 33.64100000 20.61100001 + 317 106 2 0.5564 19.60099999 32.27400001 21.11500000 + 318 106 2 0.5564 17.36000001 32.65500000 19.51799999 + 319 107 1 -1.1128 16.06200001 28.63800000 32.20700000 + 320 107 2 0.5564 14.64800000 27.95800001 33.25299999 + 321 107 2 0.5564 15.75200000 28.01400000 30.52199999 + 322 108 1 -1.1128 16.20000000 30.89499999 1.47300000 + 323 108 2 0.5564 16.62599999 29.96800000 -0.13000001 + 324 108 2 0.5564 17.16699999 29.83300001 2.92699999 + 325 109 1 -1.1128 20.27799999 3.52899999 6.04800001 + 326 109 2 0.5564 20.97699999 3.61100001 4.57500001 + 327 109 2 0.5564 21.31200000 4.51300000 7.25100000 + 328 110 1 -1.1128 23.07900000 5.77800000 10.40800000 + 329 110 2 0.5564 24.65000001 6.25900000 10.83800000 + 330 110 2 0.5564 22.34200001 7.60900000 10.17799999 + 331 111 1 -1.1128 19.58100000 2.03099999 12.10999999 + 332 111 2 0.5564 19.03900000 1.08200000 10.44000000 + 333 111 2 0.5564 21.14100001 2.99100001 11.85100001 + 334 112 1 -1.1128 22.00500001 3.22300000 23.17799999 + 335 112 2 0.5564 21.42899999 4.09000000 24.55399999 + 336 112 2 0.5564 20.65400001 1.79099999 22.71100001 + 337 113 1 -1.1128 16.63000000 6.42200000 23.79200000 + 338 113 2 0.5564 16.21900000 4.80400001 24.40600001 + 339 113 2 0.5564 17.06600001 7.12799999 25.28199999 + 340 114 1 -1.1128 21.67599999 5.56400001 28.15800000 + 341 114 2 0.5564 20.65799999 6.71700000 29.18499999 + 342 114 2 0.5564 23.41300000 5.82800000 28.99600000 + 343 115 1 -1.1128 15.25699999 5.26500000 5.62599999 + 344 115 2 0.5564 16.91400000 4.51900000 5.48999999 + 345 115 2 0.5564 15.14400000 6.15000000 6.97200000 + 346 116 1 -1.1128 20.13700000 11.08200000 10.43700000 + 347 116 2 0.5564 20.02100000 10.94700000 8.73299999 + 348 116 2 0.5564 21.02500000 12.55500000 10.85300000 + 349 117 1 -1.1128 23.08900000 14.62700000 12.43700000 + 350 117 2 0.5564 24.71600000 15.25400000 12.73600001 + 351 117 2 0.5564 23.28400000 13.22799999 13.65300000 + 352 118 1 -1.1128 24.08300000 12.64900000 22.56600000 + 353 118 2 0.5564 22.39700000 12.66300000 23.04199999 + 354 118 2 0.5564 24.90100001 13.85100001 23.56499999 + 355 119 1 -1.1128 17.86500001 7.90899999 30.03600000 + 356 119 2 0.5564 17.50900000 8.04499999 31.98200000 + 357 119 2 0.5564 18.07800000 9.58200001 29.31799999 + 358 120 1 -1.1128 18.82400000 8.48599999 0.10400000 + 359 120 2 0.5564 19.99700000 10.19100001 -0.05700000 + 360 120 2 0.5564 17.07700001 8.99800001 0.77900001 + 361 121 1 -1.1128 20.12200000 9.14300000 5.34299999 + 362 121 2 0.5564 19.37300000 8.81899999 3.82100000 + 363 121 2 0.5564 21.99800001 8.77599999 5.12799999 + 364 122 1 -1.1128 16.41300000 14.45900000 5.85499999 + 365 122 2 0.5564 15.53599999 13.00700000 5.23899999 + 366 122 2 0.5564 16.00599999 14.72500001 7.73699999 + 367 123 1 -1.1128 17.56099999 15.06600001 15.65400001 + 368 123 2 0.5564 17.57500001 13.39800000 16.05500001 + 369 123 2 0.5564 18.97800000 15.82800000 16.39999999 + 370 124 1 -1.1128 26.37400001 17.04700000 24.81700000 + 371 124 2 0.5564 27.98300000 17.09800001 25.63200001 + 372 124 2 0.5564 25.62900001 18.75099999 24.91900001 + 373 125 1 -1.1128 19.78400000 12.96000000 28.70600000 + 374 125 2 0.5564 21.66199999 13.05500001 28.87100000 + 375 125 2 0.5564 19.54500000 14.06999999 27.14300000 + 376 126 1 -1.1128 17.89099999 16.73299999 32.49900000 + 377 126 2 0.5564 18.32700000 15.24000000 31.27700001 + 378 126 2 0.5564 18.63299999 18.33500001 31.69300001 + 379 127 1 -1.1128 23.73299999 23.02399999 1.66300000 + 380 127 2 0.5564 24.80000000 24.05199999 2.77599999 + 381 127 2 0.5564 24.69300001 22.61800001 0.19800000 + 382 128 1 -1.1128 20.78900000 18.44000000 9.44299999 + 383 128 2 0.5564 20.76599999 17.25699999 7.88100000 + 384 128 2 0.5564 21.89600000 17.34500000 10.38500001 + 385 129 1 -1.1128 21.57400000 17.49299999 17.83800000 + 386 129 2 0.5564 20.59699999 18.95500001 17.21800000 + 387 129 2 0.5564 22.53800000 16.87400000 16.25100000 + 388 130 1 -1.1128 19.16800000 14.74799999 24.13099999 + 389 130 2 0.5564 19.71100001 16.39000000 23.71199999 + 390 130 2 0.5564 17.42899999 14.69500000 24.40300001 + 391 131 1 -1.1128 22.14899999 20.19800000 24.97699999 + 392 131 2 0.5564 21.63900001 20.92400000 26.48599999 + 393 131 2 0.5564 22.65600000 21.65700001 24.41099999 + 394 132 1 -1.1128 20.56499999 20.79200000 29.60000001 + 395 132 2 0.5564 22.26399999 20.40900000 30.21399999 + 396 132 2 0.5564 20.54800000 22.40800000 30.59699999 + 397 133 1 -1.1128 20.80200000 26.54699999 9.61499999 + 398 133 2 0.5564 20.09899999 27.98399999 8.33800001 + 399 133 2 0.5564 21.27700001 27.53900001 11.32499999 + 400 134 1 -1.1128 16.28300000 23.58900001 7.77900001 + 401 134 2 0.5564 16.09300000 21.97300001 6.71199999 + 402 134 2 0.5564 17.90100001 22.97100000 8.15400000 + 403 135 1 -1.1128 18.46900000 29.79799999 13.56800001 + 404 135 2 0.5564 19.71199999 31.21600000 13.50600000 + 405 135 2 0.5564 16.87200001 30.34299999 14.39600001 + 406 136 1 -1.1128 18.79000001 21.71199999 16.06000000 + 407 136 2 0.5564 19.87800000 23.09000000 16.48500001 + 408 136 2 0.5564 17.20100000 22.32600000 15.81899999 + 409 137 1 -1.1128 21.74700001 26.08400001 16.34900001 + 410 137 2 0.5564 20.78300001 27.02100000 15.29999999 + 411 137 2 0.5564 22.70499999 27.32799999 17.20600001 + 412 138 1 -1.1128 20.76899999 26.21100000 32.05000000 + 413 138 2 0.5564 21.48800000 27.40399999 33.32799999 + 414 138 2 0.5564 18.98900000 26.71000000 32.14500001 + 415 139 1 -1.1128 19.82000000 29.18100001 5.55900000 + 416 139 2 0.5564 20.99100001 29.50900000 4.10900001 + 417 139 2 0.5564 19.43100000 31.01800000 6.22099999 + 418 140 1 -1.1128 19.24000000 33.86700000 7.99300000 + 419 140 2 0.5564 19.10700000 35.03900000 6.60399999 + 420 140 2 0.5564 20.69700001 33.67100000 9.06299999 + 421 141 1 -1.1128 22.51099999 34.97600001 15.79300000 + 422 141 2 0.5564 23.71600000 36.16300001 16.60300000 + 423 141 2 0.5564 21.69900000 36.15000000 14.46700001 + 424 142 1 -1.1128 22.62199999 30.28400000 19.06900000 + 425 142 2 0.5564 22.04899999 31.35100000 17.72500001 + 426 142 2 0.5564 24.41099999 30.77299999 19.57599999 + 427 143 1 -1.1128 18.63900001 33.61100001 28.36900000 + 428 143 2 0.5564 18.22600000 32.15900001 29.10300000 + 429 143 2 0.5564 19.90600000 33.00800000 27.15800000 + 430 144 1 -1.1128 22.52000000 1.32499999 31.92600001 + 431 144 2 0.5564 22.80300000 2.66800001 30.79600000 + 432 144 2 0.5564 21.04499999 0.42499999 31.12200000 + 433 145 1 -1.1128 21.75400001 3.78900000 1.15900001 + 434 145 2 0.5564 22.08499999 2.78500000 -0.18000000 + 435 145 2 0.5564 20.85000000 5.17500000 0.61000000 + 436 146 1 -1.1128 28.45699999 5.53900001 12.13300000 + 437 146 2 0.5564 29.48900001 4.39000000 11.18200000 + 438 146 2 0.5564 29.16100000 7.13099999 12.58700000 + 439 147 1 -1.1128 22.49500000 5.96599999 17.32400001 + 440 147 2 0.5564 24.37700000 5.37900000 17.39299999 + 441 147 2 0.5564 21.90600000 5.49100000 18.85700000 + 442 148 1 -1.1128 28.12799999 3.30400000 22.28700000 + 443 148 2 0.5564 28.12300001 2.99899999 20.49100000 + 444 148 2 0.5564 26.53299999 3.35500000 22.87600001 + 445 149 1 -1.1128 28.37800001 10.45500000 27.26600000 + 446 149 2 0.5564 30.01900001 10.29200001 28.05100000 + 447 149 2 0.5564 28.63500000 10.03900000 25.46300000 + 448 150 1 -1.1128 27.03099999 8.35300001 34.80600000 + 449 150 2 0.5564 26.11600001 9.98399999 34.57100001 + 450 150 2 0.5564 28.68500000 8.95100001 34.73900000 + 451 151 1 -1.1128 24.95100001 8.15999999 4.45399999 + 452 151 2 0.5564 25.93000001 9.61600000 5.15999999 + 453 151 2 0.5564 25.94700000 7.99400001 2.72400000 + 454 152 1 -1.1128 26.93700001 12.43599999 6.86900001 + 455 152 2 0.5564 25.49200001 13.28400000 6.70799999 + 456 152 2 0.5564 27.68900000 13.33199999 8.26600000 + 457 153 1 -1.1128 23.36500000 11.21399999 16.93300001 + 458 153 2 0.5564 22.24700000 9.74399999 16.78900000 + 459 153 2 0.5564 23.26399999 12.03500000 18.53900001 + 460 154 1 -1.1128 28.32099999 8.75900000 22.15800000 + 461 154 2 0.5564 27.66199999 6.89499999 22.48200001 + 462 154 2 0.5564 26.97100000 9.71000000 21.90199999 + 463 155 1 -1.1128 27.07100000 6.10900001 29.55500000 + 464 155 2 0.5564 27.59100000 7.66300000 28.85700000 + 465 155 2 0.5564 27.30400000 6.32000001 31.26100000 + 466 156 1 -1.1128 22.47400000 11.70400001 34.63999999 + 467 156 2 0.5564 22.75200000 13.30400000 35.58400000 + 468 156 2 0.5564 22.84000001 12.09000000 33.03000001 + 469 157 1 -1.1128 21.65600000 14.97100000 5.61499999 + 470 157 2 0.5564 21.68999999 15.86000000 3.97699999 + 471 157 2 0.5564 19.96400000 14.22500000 5.77400000 + 472 158 1 -1.1128 28.53900001 21.49200001 9.82000000 + 473 158 2 0.5564 27.28800001 22.18100001 8.68800000 + 474 158 2 0.5564 28.06500000 22.42000000 11.60200000 + 475 159 1 -1.1128 28.36399999 16.01999999 11.10900001 + 476 159 2 0.5564 30.03300000 16.64900000 12.08900000 + 477 159 2 0.5564 28.45600000 17.44000000 10.08200000 + 478 160 1 -1.1128 0.05400000 13.68600001 18.10300000 + 479 160 2 0.5564 -1.71400000 12.92800000 18.84099999 + 480 160 2 0.5564 1.00800000 12.42899999 17.38300000 + 481 161 1 -1.1128 24.63600001 12.89400001 29.95700000 + 482 161 2 0.5564 25.90600000 13.91400000 31.18300000 + 483 161 2 0.5564 25.64100000 11.60900000 29.16200000 + 484 162 1 -1.1128 21.54800000 17.25000000 0.74900000 + 485 162 2 0.5564 21.84300000 19.02600000 0.90500001 + 486 162 2 0.5564 20.38500001 16.71600000 -0.69700001 + 487 163 1 -1.1128 26.09499999 27.27400001 4.52000000 + 488 163 2 0.5564 27.88900000 26.45800000 4.50500000 + 489 163 2 0.5564 25.64800000 26.96999999 6.16500000 + 490 164 1 -1.1128 23.61000000 22.51499999 8.00800000 + 491 164 2 0.5564 22.65300000 21.18700000 8.73900000 + 492 164 2 0.5564 22.28600000 24.09499999 8.44400000 + 493 165 1 -1.1128 27.35500000 18.92900000 18.18000000 + 494 165 2 0.5564 27.20000000 20.34900001 17.15500000 + 495 165 2 0.5564 25.57899999 18.32200000 18.77000000 + 496 166 1 -1.1128 26.76500001 23.63299999 14.44400000 + 497 166 2 0.5564 27.44100000 25.29800000 13.65099999 + 498 166 2 0.5564 25.08600000 24.25600001 14.74900000 + 499 167 1 -1.1128 31.47800001 20.76899999 20.98600000 + 500 167 2 0.5564 30.44000000 22.50900000 21.13499999 + 501 167 2 0.5564 30.56700000 19.65600000 20.04300000 + 502 168 1 -1.1128 24.81199999 20.41200000 32.66800001 + 503 168 2 0.5564 26.24199999 21.47800001 31.87400000 + 504 168 2 0.5564 25.78699999 19.02300001 33.15800000 + 505 169 1 -1.1128 22.10500001 29.07600000 0.92800000 + 506 169 2 0.5564 23.29599999 27.92299999 1.73900000 + 507 169 2 0.5564 22.62300000 30.99400001 0.88200000 + 508 170 1 -1.1128 29.57199999 31.25600001 8.62599999 + 509 170 2 0.5564 30.79500000 30.20299999 7.73600001 + 510 170 2 0.5564 28.27700001 31.51900000 7.25999999 + 511 171 1 -1.1128 31.81700000 34.84300000 18.28300000 + 512 171 2 0.5564 32.43800000 34.38899999 16.47400000 + 513 171 2 0.5564 32.74300001 36.42200000 18.34100000 + 514 172 1 -1.1128 27.91500001 25.60099999 19.03300000 + 515 172 2 0.5564 29.35800000 26.56099999 19.19000000 + 516 172 2 0.5564 28.14800001 24.42899999 17.53000000 + 517 173 1 -1.1128 24.54800000 24.65400001 24.02500000 + 518 173 2 0.5564 25.52800001 25.63500000 22.82400000 + 519 173 2 0.5564 25.29999999 25.20000000 25.64500000 + 520 174 1 -1.1128 28.53999999 22.92200000 30.37000000 + 521 174 2 0.5564 27.41399999 24.09600000 29.78100000 + 522 174 2 0.5564 29.67400000 23.91400000 31.87299999 + 523 175 1 -1.1128 24.96900001 33.62300000 1.01400000 + 524 175 2 0.5564 26.52100001 33.05800000 1.51799999 + 525 175 2 0.5564 24.99000000 34.32200000 -0.68299999 + 526 176 1 -1.1128 23.07500000 32.17099999 11.32400001 + 527 176 2 0.5564 23.31600000 32.77500000 13.09700000 + 528 176 2 0.5564 24.46000001 33.20299999 10.66199999 + 529 177 1 -1.1128 27.49699999 2.73600001 17.22400001 + 530 177 2 0.5564 28.39700000 3.41500000 15.71500001 + 531 177 2 0.5564 28.23400001 1.23300000 17.41200000 + 532 178 1 -1.1128 26.36900000 33.06000000 22.07700001 + 533 178 2 0.5564 26.17000001 34.74600000 22.26399999 + 534 178 2 0.5564 27.59200000 32.40399999 23.32099999 + 535 179 1 -1.1128 30.22099999 30.95000000 25.84300000 + 536 179 2 0.5564 30.30500000 29.03799999 26.20800000 + 537 179 2 0.5564 30.36300001 31.97900000 27.41399999 + 538 180 1 -1.1128 24.97300001 26.73200000 28.60700001 + 539 180 2 0.5564 25.38500001 28.36900000 29.24800000 + 540 180 2 0.5564 23.33000000 26.59699999 29.23400001 + 541 181 1 -1.1128 32.16500000 4.85700000 2.25800000 + 542 181 2 0.5564 32.41700001 6.19500001 1.15700000 + 543 181 2 0.5564 32.61499999 3.72700000 1.11200000 + 544 182 1 -1.1128 28.06699999 3.53299999 5.21699999 + 545 182 2 0.5564 26.96000000 4.44699999 4.15800000 + 546 182 2 0.5564 29.87500000 3.86300000 4.44800000 + 547 183 1 -1.1128 33.27900000 2.78200000 13.02800000 + 548 183 2 0.5564 33.70799999 3.95500001 11.81700000 + 549 183 2 0.5564 33.65600000 3.54500000 14.63100000 + 550 184 1 -1.1128 34.27799999 4.94400001 17.49200001 + 551 184 2 0.5564 33.43800000 6.56300000 17.87600001 + 552 184 2 0.5564 34.90600000 4.45200000 18.99499999 + 553 185 1 -1.1128 32.36300001 1.90800001 26.09199999 + 554 185 2 0.5564 31.94099999 1.68299999 24.26800000 + 555 185 2 0.5564 33.85000000 1.39000000 26.90400000 + 556 186 1 -1.1128 27.98200000 0.41799999 28.24100000 + 557 186 2 0.5564 27.51600000 2.08000001 28.30900000 + 558 186 2 0.5564 29.59300001 0.17600000 27.29900001 + 559 187 1 -1.1128 28.84500000 14.67200001 2.72400000 + 560 187 2 0.5564 27.96299999 13.93000001 4.13900000 + 561 187 2 0.5564 30.38599999 15.71400000 3.37900000 + 562 188 1 -1.1128 28.08300000 10.61800001 14.29800000 + 563 188 2 0.5564 28.62300000 12.15999999 13.29300000 + 564 188 2 0.5564 26.48599999 11.01500000 15.37900000 + 565 189 1 -1.1128 33.86700000 10.54500000 13.30600001 + 566 189 2 0.5564 35.16500000 9.61200000 13.81000000 + 567 189 2 0.5564 33.61499999 10.27000001 11.51300000 + 568 190 1 -1.1128 31.79000001 9.69600000 18.22300000 + 569 190 2 0.5564 30.48400000 9.33400000 19.42100001 + 570 190 2 0.5564 30.83399999 10.09600000 16.92900000 + 571 191 1 -1.1128 30.14100001 15.00599999 21.53200001 + 572 191 2 0.5564 28.56499999 15.59399999 22.09899999 + 573 191 2 0.5564 30.94200000 14.25299999 23.07700001 + 574 192 1 -1.1128 32.79799999 10.73200000 30.67999999 + 575 192 2 0.5564 34.07300001 9.52800001 30.79900000 + 576 192 2 0.5564 32.99100001 11.51200000 28.98300000 + 577 193 1 -1.1128 33.65200000 16.26500000 5.08600000 + 578 193 2 0.5564 35.39900001 16.23899999 4.72999999 + 579 193 2 0.5564 33.50300001 17.93900000 5.63100000 + 580 194 1 -1.1128 31.94700000 10.79900000 7.94300000 + 581 194 2 0.5564 29.89400001 10.54900000 7.61899999 + 582 194 2 0.5564 32.27099999 12.41399999 7.07500000 + 583 195 1 -1.1128 0.32900000 15.51600000 11.74600000 + 584 195 2 0.5564 -0.44600001 14.24900001 12.93900000 + 585 195 2 0.5564 -0.68500000 17.01800000 11.93500000 + 586 196 1 -1.1128 4.26200000 19.16500000 14.30800000 + 587 196 2 0.5564 3.57899999 17.69100000 14.91999999 + 588 196 2 0.5564 5.72299999 19.18300000 15.20400000 + 589 197 1 -1.1128 32.99499999 13.54600001 25.94800001 + 590 197 2 0.5564 32.16699999 15.06000000 26.78699999 + 591 197 2 0.5564 34.42499999 13.80000000 25.00700000 + 592 198 1 -1.1128 1.77299999 13.52400000 34.03700001 + 593 198 2 0.5564 0.22700001 14.40900000 33.44600001 + 594 198 2 0.5564 2.16699999 14.67000000 35.51099999 + 595 199 1 -1.1128 33.02900000 20.52899999 7.24700000 + 596 199 2 0.5564 34.38800000 21.41399999 8.00300000 + 597 199 2 0.5564 31.45100000 20.83100000 8.18200000 + 598 200 1 -1.1128 2.03700001 24.25000000 10.25100000 + 599 200 2 0.5564 3.74300001 25.00800000 9.87600001 + 600 200 2 0.5564 1.89400001 25.04300000 11.90300000 + 601 201 1 -1.1128 32.75300000 19.25900000 13.97600001 + 602 201 2 0.5564 32.79200000 20.88600000 13.79200000 + 603 201 2 0.5564 34.33400000 18.79900000 14.97600001 + 604 202 1 -1.1128 0.39600001 18.67300000 18.69900000 + 605 202 2 0.5564 -1.21100000 18.95000000 19.12700001 + 606 202 2 0.5564 0.46900000 16.97699999 18.43599999 + 607 203 1 -1.1128 30.85499999 18.37000000 27.95899999 + 608 203 2 0.5564 29.75900000 19.68100000 28.68999999 + 609 203 2 0.5564 32.10300000 19.47700000 26.76300000 + 610 204 1 -1.1128 27.72299999 15.99200000 33.09100001 + 611 204 2 0.5564 29.39000000 16.42300000 32.19199999 + 612 204 2 0.5564 27.80100001 15.85899999 34.80400001 + 613 205 1 -1.1128 31.06800000 27.89499999 3.34800000 + 614 205 2 0.5564 32.51700000 27.82500000 4.61000000 + 615 205 2 0.5564 31.52899999 29.45900000 2.32400001 + 616 206 1 -1.1128 35.03900000 28.00800000 6.66300000 + 617 206 2 0.5564 35.96599999 26.93399999 7.68299999 + 618 206 2 0.5564 36.05500001 28.33600000 5.33600000 + 619 207 1 -1.1128 29.35600001 28.19599999 13.02500000 + 620 207 2 0.5564 29.20999999 29.33500001 14.58900001 + 621 207 2 0.5564 28.87400000 29.62900001 11.86700000 + 622 208 1 -1.1128 32.38599999 28.43400000 18.96100000 + 623 208 2 0.5564 33.36799999 28.57400000 20.41099999 + 624 208 2 0.5564 33.41000001 27.40600001 17.94900000 + 625 209 1 -1.1128 30.89799999 25.39000000 25.79900000 + 626 209 2 0.5564 32.36900000 25.91299999 24.58000000 + 627 209 2 0.5564 31.31700001 24.07500000 27.02900000 + 628 210 1 -1.1128 32.25900000 25.61100001 33.10400000 + 629 210 2 0.5564 32.23800001 25.73600001 34.80600000 + 630 210 2 0.5564 33.91999999 25.04199999 32.77500000 + 631 211 1 -1.1128 30.29000000 32.64500000 1.34100000 + 632 211 2 0.5564 29.94900000 32.79300000 -0.43000000 + 633 211 2 0.5564 31.76199999 33.34000000 1.84700001 + 634 212 1 -1.1128 25.53599999 34.23499999 6.46900000 + 635 212 2 0.5564 25.71600000 36.05900001 6.65099999 + 636 212 2 0.5564 25.28300000 33.86599999 4.89499999 + 637 213 1 -1.1128 31.67400000 33.16100000 13.10599999 + 638 213 2 0.5564 31.79300000 34.86300000 13.28100001 + 639 213 2 0.5564 30.42499999 32.92800000 11.78300001 + 640 214 1 -1.1128 33.84400001 32.66800001 22.29599999 + 641 214 2 0.5564 32.75000000 32.23400001 23.52400000 + 642 214 2 0.5564 32.91700000 32.87500000 20.73600001 + 643 215 1 -1.1128 31.60300000 30.54200000 30.80499999 + 644 215 2 0.5564 33.45100000 30.80400001 30.46799999 + 645 215 2 0.5564 31.57500001 28.81599999 31.75600000 + 646 216 1 -1.1128 26.29500001 31.23499999 30.59900000 + 647 216 2 0.5564 27.83399999 30.51499999 30.60700001 + 648 216 2 0.5564 26.36200000 32.91999999 29.85600000 + +Bonds + + 1 1 1 2 + 2 1 1 3 + 3 1 4 5 + 4 1 4 6 + 5 1 7 8 + 6 1 7 9 + 7 1 10 11 + 8 1 10 12 + 9 1 13 14 + 10 1 13 15 + 11 1 16 17 + 12 1 16 18 + 13 1 19 20 + 14 1 19 21 + 15 1 22 23 + 16 1 22 24 + 17 1 25 26 + 18 1 25 27 + 19 1 28 29 + 20 1 28 30 + 21 1 31 32 + 22 1 31 33 + 23 1 34 35 + 24 1 34 36 + 25 1 37 38 + 26 1 37 39 + 27 1 40 41 + 28 1 40 42 + 29 1 43 44 + 30 1 43 45 + 31 1 46 47 + 32 1 46 48 + 33 1 49 50 + 34 1 49 51 + 35 1 52 53 + 36 1 52 54 + 37 1 55 56 + 38 1 55 57 + 39 1 58 59 + 40 1 58 60 + 41 1 61 62 + 42 1 61 63 + 43 1 64 65 + 44 1 64 66 + 45 1 67 68 + 46 1 67 69 + 47 1 70 71 + 48 1 70 72 + 49 1 73 74 + 50 1 73 75 + 51 1 76 77 + 52 1 76 78 + 53 1 79 80 + 54 1 79 81 + 55 1 82 83 + 56 1 82 84 + 57 1 85 86 + 58 1 85 87 + 59 1 88 89 + 60 1 88 90 + 61 1 91 92 + 62 1 91 93 + 63 1 94 95 + 64 1 94 96 + 65 1 97 98 + 66 1 97 99 + 67 1 100 101 + 68 1 100 102 + 69 1 103 104 + 70 1 103 105 + 71 1 106 107 + 72 1 106 108 + 73 1 109 110 + 74 1 109 111 + 75 1 112 113 + 76 1 112 114 + 77 1 115 116 + 78 1 115 117 + 79 1 118 119 + 80 1 118 120 + 81 1 121 122 + 82 1 121 123 + 83 1 124 125 + 84 1 124 126 + 85 1 127 128 + 86 1 127 129 + 87 1 130 131 + 88 1 130 132 + 89 1 133 134 + 90 1 133 135 + 91 1 136 137 + 92 1 136 138 + 93 1 139 140 + 94 1 139 141 + 95 1 142 143 + 96 1 142 144 + 97 1 145 146 + 98 1 145 147 + 99 1 148 149 + 100 1 148 150 + 101 1 151 152 + 102 1 151 153 + 103 1 154 155 + 104 1 154 156 + 105 1 157 158 + 106 1 157 159 + 107 1 160 161 + 108 1 160 162 + 109 1 163 164 + 110 1 163 165 + 111 1 166 167 + 112 1 166 168 + 113 1 169 170 + 114 1 169 171 + 115 1 172 173 + 116 1 172 174 + 117 1 175 176 + 118 1 175 177 + 119 1 178 179 + 120 1 178 180 + 121 1 181 182 + 122 1 181 183 + 123 1 184 185 + 124 1 184 186 + 125 1 187 188 + 126 1 187 189 + 127 1 190 191 + 128 1 190 192 + 129 1 193 194 + 130 1 193 195 + 131 1 196 197 + 132 1 196 198 + 133 1 199 200 + 134 1 199 201 + 135 1 202 203 + 136 1 202 204 + 137 1 205 206 + 138 1 205 207 + 139 1 208 209 + 140 1 208 210 + 141 1 211 212 + 142 1 211 213 + 143 1 214 215 + 144 1 214 216 + 145 1 217 218 + 146 1 217 219 + 147 1 220 221 + 148 1 220 222 + 149 1 223 224 + 150 1 223 225 + 151 1 226 227 + 152 1 226 228 + 153 1 229 230 + 154 1 229 231 + 155 1 232 233 + 156 1 232 234 + 157 1 235 236 + 158 1 235 237 + 159 1 238 239 + 160 1 238 240 + 161 1 241 242 + 162 1 241 243 + 163 1 244 245 + 164 1 244 246 + 165 1 247 248 + 166 1 247 249 + 167 1 250 251 + 168 1 250 252 + 169 1 253 254 + 170 1 253 255 + 171 1 256 257 + 172 1 256 258 + 173 1 259 260 + 174 1 259 261 + 175 1 262 263 + 176 1 262 264 + 177 1 265 266 + 178 1 265 267 + 179 1 268 269 + 180 1 268 270 + 181 1 271 272 + 182 1 271 273 + 183 1 274 275 + 184 1 274 276 + 185 1 277 278 + 186 1 277 279 + 187 1 280 281 + 188 1 280 282 + 189 1 283 284 + 190 1 283 285 + 191 1 286 287 + 192 1 286 288 + 193 1 289 290 + 194 1 289 291 + 195 1 292 293 + 196 1 292 294 + 197 1 295 296 + 198 1 295 297 + 199 1 298 299 + 200 1 298 300 + 201 1 301 302 + 202 1 301 303 + 203 1 304 305 + 204 1 304 306 + 205 1 307 308 + 206 1 307 309 + 207 1 310 311 + 208 1 310 312 + 209 1 313 314 + 210 1 313 315 + 211 1 316 317 + 212 1 316 318 + 213 1 319 320 + 214 1 319 321 + 215 1 322 323 + 216 1 322 324 + 217 1 325 326 + 218 1 325 327 + 219 1 328 329 + 220 1 328 330 + 221 1 331 332 + 222 1 331 333 + 223 1 334 335 + 224 1 334 336 + 225 1 337 338 + 226 1 337 339 + 227 1 340 341 + 228 1 340 342 + 229 1 343 344 + 230 1 343 345 + 231 1 346 347 + 232 1 346 348 + 233 1 349 350 + 234 1 349 351 + 235 1 352 353 + 236 1 352 354 + 237 1 355 356 + 238 1 355 357 + 239 1 358 359 + 240 1 358 360 + 241 1 361 362 + 242 1 361 363 + 243 1 364 365 + 244 1 364 366 + 245 1 367 368 + 246 1 367 369 + 247 1 370 371 + 248 1 370 372 + 249 1 373 374 + 250 1 373 375 + 251 1 376 377 + 252 1 376 378 + 253 1 379 380 + 254 1 379 381 + 255 1 382 383 + 256 1 382 384 + 257 1 385 386 + 258 1 385 387 + 259 1 388 389 + 260 1 388 390 + 261 1 391 392 + 262 1 391 393 + 263 1 394 395 + 264 1 394 396 + 265 1 397 398 + 266 1 397 399 + 267 1 400 401 + 268 1 400 402 + 269 1 403 404 + 270 1 403 405 + 271 1 406 407 + 272 1 406 408 + 273 1 409 410 + 274 1 409 411 + 275 1 412 413 + 276 1 412 414 + 277 1 415 416 + 278 1 415 417 + 279 1 418 419 + 280 1 418 420 + 281 1 421 422 + 282 1 421 423 + 283 1 424 425 + 284 1 424 426 + 285 1 427 428 + 286 1 427 429 + 287 1 430 431 + 288 1 430 432 + 289 1 433 434 + 290 1 433 435 + 291 1 436 437 + 292 1 436 438 + 293 1 439 440 + 294 1 439 441 + 295 1 442 443 + 296 1 442 444 + 297 1 445 446 + 298 1 445 447 + 299 1 448 449 + 300 1 448 450 + 301 1 451 452 + 302 1 451 453 + 303 1 454 455 + 304 1 454 456 + 305 1 457 458 + 306 1 457 459 + 307 1 460 461 + 308 1 460 462 + 309 1 463 464 + 310 1 463 465 + 311 1 466 467 + 312 1 466 468 + 313 1 469 470 + 314 1 469 471 + 315 1 472 473 + 316 1 472 474 + 317 1 475 476 + 318 1 475 477 + 319 1 478 479 + 320 1 478 480 + 321 1 481 482 + 322 1 481 483 + 323 1 484 485 + 324 1 484 486 + 325 1 487 488 + 326 1 487 489 + 327 1 490 491 + 328 1 490 492 + 329 1 493 494 + 330 1 493 495 + 331 1 496 497 + 332 1 496 498 + 333 1 499 500 + 334 1 499 501 + 335 1 502 503 + 336 1 502 504 + 337 1 505 506 + 338 1 505 507 + 339 1 508 509 + 340 1 508 510 + 341 1 511 512 + 342 1 511 513 + 343 1 514 515 + 344 1 514 516 + 345 1 517 518 + 346 1 517 519 + 347 1 520 521 + 348 1 520 522 + 349 1 523 524 + 350 1 523 525 + 351 1 526 527 + 352 1 526 528 + 353 1 529 530 + 354 1 529 531 + 355 1 532 533 + 356 1 532 534 + 357 1 535 536 + 358 1 535 537 + 359 1 538 539 + 360 1 538 540 + 361 1 541 542 + 362 1 541 543 + 363 1 544 545 + 364 1 544 546 + 365 1 547 548 + 366 1 547 549 + 367 1 550 551 + 368 1 550 552 + 369 1 553 554 + 370 1 553 555 + 371 1 556 557 + 372 1 556 558 + 373 1 559 560 + 374 1 559 561 + 375 1 562 563 + 376 1 562 564 + 377 1 565 566 + 378 1 565 567 + 379 1 568 569 + 380 1 568 570 + 381 1 571 572 + 382 1 571 573 + 383 1 574 575 + 384 1 574 576 + 385 1 577 578 + 386 1 577 579 + 387 1 580 581 + 388 1 580 582 + 389 1 583 584 + 390 1 583 585 + 391 1 586 587 + 392 1 586 588 + 393 1 589 590 + 394 1 589 591 + 395 1 592 593 + 396 1 592 594 + 397 1 595 596 + 398 1 595 597 + 399 1 598 599 + 400 1 598 600 + 401 1 601 602 + 402 1 601 603 + 403 1 604 605 + 404 1 604 606 + 405 1 607 608 + 406 1 607 609 + 407 1 610 611 + 408 1 610 612 + 409 1 613 614 + 410 1 613 615 + 411 1 616 617 + 412 1 616 618 + 413 1 619 620 + 414 1 619 621 + 415 1 622 623 + 416 1 622 624 + 417 1 625 626 + 418 1 625 627 + 419 1 628 629 + 420 1 628 630 + 421 1 631 632 + 422 1 631 633 + 423 1 634 635 + 424 1 634 636 + 425 1 637 638 + 426 1 637 639 + 427 1 640 641 + 428 1 640 642 + 429 1 643 644 + 430 1 643 645 + 431 1 646 647 + 432 1 646 648 + +Angles + + 1 1 2 1 3 + 2 1 5 4 6 + 3 1 8 7 9 + 4 1 11 10 12 + 5 1 14 13 15 + 6 1 17 16 18 + 7 1 20 19 21 + 8 1 23 22 24 + 9 1 26 25 27 + 10 1 29 28 30 + 11 1 32 31 33 + 12 1 35 34 36 + 13 1 38 37 39 + 14 1 41 40 42 + 15 1 44 43 45 + 16 1 47 46 48 + 17 1 50 49 51 + 18 1 53 52 54 + 19 1 56 55 57 + 20 1 59 58 60 + 21 1 62 61 63 + 22 1 65 64 66 + 23 1 68 67 69 + 24 1 71 70 72 + 25 1 74 73 75 + 26 1 77 76 78 + 27 1 80 79 81 + 28 1 83 82 84 + 29 1 86 85 87 + 30 1 89 88 90 + 31 1 92 91 93 + 32 1 95 94 96 + 33 1 98 97 99 + 34 1 101 100 102 + 35 1 104 103 105 + 36 1 107 106 108 + 37 1 110 109 111 + 38 1 113 112 114 + 39 1 116 115 117 + 40 1 119 118 120 + 41 1 122 121 123 + 42 1 125 124 126 + 43 1 128 127 129 + 44 1 131 130 132 + 45 1 134 133 135 + 46 1 137 136 138 + 47 1 140 139 141 + 48 1 143 142 144 + 49 1 146 145 147 + 50 1 149 148 150 + 51 1 152 151 153 + 52 1 155 154 156 + 53 1 158 157 159 + 54 1 161 160 162 + 55 1 164 163 165 + 56 1 167 166 168 + 57 1 170 169 171 + 58 1 173 172 174 + 59 1 176 175 177 + 60 1 179 178 180 + 61 1 182 181 183 + 62 1 185 184 186 + 63 1 188 187 189 + 64 1 191 190 192 + 65 1 194 193 195 + 66 1 197 196 198 + 67 1 200 199 201 + 68 1 203 202 204 + 69 1 206 205 207 + 70 1 209 208 210 + 71 1 212 211 213 + 72 1 215 214 216 + 73 1 218 217 219 + 74 1 221 220 222 + 75 1 224 223 225 + 76 1 227 226 228 + 77 1 230 229 231 + 78 1 233 232 234 + 79 1 236 235 237 + 80 1 239 238 240 + 81 1 242 241 243 + 82 1 245 244 246 + 83 1 248 247 249 + 84 1 251 250 252 + 85 1 254 253 255 + 86 1 257 256 258 + 87 1 260 259 261 + 88 1 263 262 264 + 89 1 266 265 267 + 90 1 269 268 270 + 91 1 272 271 273 + 92 1 275 274 276 + 93 1 278 277 279 + 94 1 281 280 282 + 95 1 284 283 285 + 96 1 287 286 288 + 97 1 290 289 291 + 98 1 293 292 294 + 99 1 296 295 297 + 100 1 299 298 300 + 101 1 302 301 303 + 102 1 305 304 306 + 103 1 308 307 309 + 104 1 311 310 312 + 105 1 314 313 315 + 106 1 317 316 318 + 107 1 320 319 321 + 108 1 323 322 324 + 109 1 326 325 327 + 110 1 329 328 330 + 111 1 332 331 333 + 112 1 335 334 336 + 113 1 338 337 339 + 114 1 341 340 342 + 115 1 344 343 345 + 116 1 347 346 348 + 117 1 350 349 351 + 118 1 353 352 354 + 119 1 356 355 357 + 120 1 359 358 360 + 121 1 362 361 363 + 122 1 365 364 366 + 123 1 368 367 369 + 124 1 371 370 372 + 125 1 374 373 375 + 126 1 377 376 378 + 127 1 380 379 381 + 128 1 383 382 384 + 129 1 386 385 387 + 130 1 389 388 390 + 131 1 392 391 393 + 132 1 395 394 396 + 133 1 398 397 399 + 134 1 401 400 402 + 135 1 404 403 405 + 136 1 407 406 408 + 137 1 410 409 411 + 138 1 413 412 414 + 139 1 416 415 417 + 140 1 419 418 420 + 141 1 422 421 423 + 142 1 425 424 426 + 143 1 428 427 429 + 144 1 431 430 432 + 145 1 434 433 435 + 146 1 437 436 438 + 147 1 440 439 441 + 148 1 443 442 444 + 149 1 446 445 447 + 150 1 449 448 450 + 151 1 452 451 453 + 152 1 455 454 456 + 153 1 458 457 459 + 154 1 461 460 462 + 155 1 464 463 465 + 156 1 467 466 468 + 157 1 470 469 471 + 158 1 473 472 474 + 159 1 476 475 477 + 160 1 479 478 480 + 161 1 482 481 483 + 162 1 485 484 486 + 163 1 488 487 489 + 164 1 491 490 492 + 165 1 494 493 495 + 166 1 497 496 498 + 167 1 500 499 501 + 168 1 503 502 504 + 169 1 506 505 507 + 170 1 509 508 510 + 171 1 512 511 513 + 172 1 515 514 516 + 173 1 518 517 519 + 174 1 521 520 522 + 175 1 524 523 525 + 176 1 527 526 528 + 177 1 530 529 531 + 178 1 533 532 534 + 179 1 536 535 537 + 180 1 539 538 540 + 181 1 542 541 543 + 182 1 545 544 546 + 183 1 548 547 549 + 184 1 551 550 552 + 185 1 554 553 555 + 186 1 557 556 558 + 187 1 560 559 561 + 188 1 563 562 564 + 189 1 566 565 567 + 190 1 569 568 570 + 191 1 572 571 573 + 192 1 575 574 576 + 193 1 578 577 579 + 194 1 581 580 582 + 195 1 584 583 585 + 196 1 587 586 588 + 197 1 590 589 591 + 198 1 593 592 594 + 199 1 596 595 597 + 200 1 599 598 600 + 201 1 602 601 603 + 202 1 605 604 606 + 203 1 608 607 609 + 204 1 611 610 612 + 205 1 614 613 615 + 206 1 617 616 618 + 207 1 620 619 621 + 208 1 623 622 624 + 209 1 626 625 627 + 210 1 629 628 630 + 211 1 632 631 633 + 212 1 635 634 636 + 213 1 638 637 639 + 214 1 641 640 642 + 215 1 644 643 645 + 216 1 647 646 648 diff --git a/tools/i-pi/examples/lammps/h2o-pimd/in.water b/tools/i-pi/examples/lammps/h2o-pimd/in.water new file mode 100644 index 000000000..d1d9048cc --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd/in.water @@ -0,0 +1,32 @@ +units electron +atom_style full + +#pair_style lj/cut/coul/long 17.01 +pair_style lj/cut/tip4p/long 1 2 1 1 0.278072379 17.007 +#bond_style harmonic +bond_style class2 +angle_style harmonic +#kspace_style pppm 0.0001 +kspace_style pppm/tip4p 0.0001 + +read_data data.water +pair_coeff * * 0 0 +pair_coeff 1 1 0.000295147 5.96946 + +neighbor 2.0 bin + +timestep 0.00025 + +#velocity all create 298.0 2345187 + +#thermo_style multi +#thermo 1 + +#fix 1 all nvt temp 298.0 298.0 30.0 tchain 1 +#fix 1 all nve +fix 1 all ipi no_rpc 32345 unix + +#dump 1 all xyz 25 dump.xyz + +run 100000000 + diff --git a/tools/i-pi/examples/lammps/h2o-pimd/input.xml b/tools/i-pi/examples/lammps/h2o-pimd/input.xml new file mode 100644 index 000000000..36bcd38d2 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd/input.xml @@ -0,0 +1,24 @@ + + + water_298K.pdb + 298 + + + [ step, time{picosecond}, conserved, temperature{kelvin}, kinetic_cv, potential, pressure_cv{megapascal}] + positions + + 500000 + 32345 + + +
no_rpc
+
+
+ + + 25 + + 0.25 + 298 + +
diff --git a/tools/i-pi/examples/lammps/h2o-pimd/water_298K.pdb b/tools/i-pi/examples/lammps/h2o-pimd/water_298K.pdb new file mode 100644 index 000000000..e8509c868 --- /dev/null +++ b/tools/i-pi/examples/lammps/h2o-pimd/water_298K.pdb @@ -0,0 +1,650 @@ +CRYST 35.233 35.233 35.233 90.00 90.00 90.00 P 1 1 +ATOM 1 O 1 1 3.846 5.672 1.323 0.00 0.00 0 +ATOM 2 H 1 1 2.979 7.054 0.857 0.00 0.00 0 +ATOM 3 H 1 1 5.525 5.697 0.451 0.00 0.00 0 +ATOM 4 O 1 1 34.557 34.341 3.078 0.00 0.00 0 +ATOM 5 H 1 1 33.722 34.689 4.840 0.00 0.00 0 +ATOM 6 H 1 1 36.029 33.220 3.711 0.00 0.00 0 +ATOM 7 O 1 1 5.591 1.963 13.477 0.00 0.00 0 +ATOM 8 H 1 1 7.265 1.864 13.851 0.00 0.00 0 +ATOM 9 H 1 1 5.009 3.555 13.916 0.00 0.00 0 +ATOM 10 O 1 1 1.060 2.061 21.718 0.00 0.00 0 +ATOM 11 H 1 1 0.757 0.261 21.820 0.00 0.00 0 +ATOM 12 H 1 1 0.213 3.013 23.047 0.00 0.00 0 +ATOM 13 O 1 1 1.200 1.337 29.006 0.00 0.00 0 +ATOM 14 H 1 1 0.818 1.884 30.732 0.00 0.00 0 +ATOM 15 H 1 1 2.883 1.825 29.011 0.00 0.00 0 +ATOM 16 O 1 1 1.331 1.386 34.306 0.00 0.00 0 +ATOM 17 H 1 1 2.392 2.898 34.846 0.00 0.00 0 +ATOM 18 H 1 1 0.814 0.532 35.836 0.00 0.00 0 +ATOM 19 O 1 1 31.451 10.201 0.726 0.00 0.00 0 +ATOM 20 H 1 1 32.282 10.877 -0.750 0.00 0.00 0 +ATOM 21 H 1 1 30.920 11.594 1.677 0.00 0.00 0 +ATOM 22 O 1 1 0.836 10.808 4.298 0.00 0.00 0 +ATOM 23 H 1 1 0.305 10.643 2.793 0.00 0.00 0 +ATOM 24 H 1 1 -0.356 10.334 5.524 0.00 0.00 0 +ATOM 25 O 1 1 34.381 5.979 9.194 0.00 0.00 0 +ATOM 26 H 1 1 33.616 7.673 8.857 0.00 0.00 0 +ATOM 27 H 1 1 35.115 5.260 7.618 0.00 0.00 0 +ATOM 28 O 1 1 33.212 6.480 24.278 0.00 0.00 0 +ATOM 29 H 1 1 31.624 6.908 23.521 0.00 0.00 0 +ATOM 30 H 1 1 32.544 4.990 24.982 0.00 0.00 0 +ATOM 31 O 1 1 1.992 9.002 26.863 0.00 0.00 0 +ATOM 32 H 1 1 1.856 10.175 25.579 0.00 0.00 0 +ATOM 33 H 1 1 0.519 8.099 26.386 0.00 0.00 0 +ATOM 34 O 1 1 2.054 8.660 32.515 0.00 0.00 0 +ATOM 35 H 1 1 2.167 8.727 30.494 0.00 0.00 0 +ATOM 36 H 1 1 2.374 10.513 33.038 0.00 0.00 0 +ATOM 37 O 1 1 3.402 16.639 3.008 0.00 0.00 0 +ATOM 38 H 1 1 4.127 15.872 4.446 0.00 0.00 0 +ATOM 39 H 1 1 2.905 18.339 3.160 0.00 0.00 0 +ATOM 40 O 1 1 4.222 15.444 8.072 0.00 0.00 0 +ATOM 41 H 1 1 5.211 16.756 8.299 0.00 0.00 0 +ATOM 42 H 1 1 2.560 15.492 8.860 0.00 0.00 0 +ATOM 43 O 1 1 2.831 9.246 16.488 0.00 0.00 0 +ATOM 44 H 1 1 2.869 8.023 18.050 0.00 0.00 0 +ATOM 45 H 1 1 3.960 8.467 15.154 0.00 0.00 0 +ATOM 46 O 1 1 5.563 6.003 20.907 0.00 0.00 0 +ATOM 47 H 1 1 4.653 4.638 21.480 0.00 0.00 0 +ATOM 48 H 1 1 6.405 6.208 22.529 0.00 0.00 0 +ATOM 49 O 1 1 2.087 13.370 22.913 0.00 0.00 0 +ATOM 50 H 1 1 2.832 14.804 23.422 0.00 0.00 0 +ATOM 51 H 1 1 1.434 13.509 21.196 0.00 0.00 0 +ATOM 52 O 1 1 3.369 17.886 25.109 0.00 0.00 0 +ATOM 53 H 1 1 3.655 17.200 26.766 0.00 0.00 0 +ATOM 54 H 1 1 4.772 18.977 24.500 0.00 0.00 0 +ATOM 55 O 1 1 34.764 20.803 0.948 0.00 0.00 0 +ATOM 56 H 1 1 35.210 21.267 2.816 0.00 0.00 0 +ATOM 57 H 1 1 35.962 21.726 0.131 0.00 0.00 0 +ATOM 58 O 1 1 2.836 24.178 15.229 0.00 0.00 0 +ATOM 59 H 1 1 2.795 22.346 14.876 0.00 0.00 0 +ATOM 60 H 1 1 2.414 24.115 17.130 0.00 0.00 0 +ATOM 61 O 1 1 33.000 24.481 15.230 0.00 0.00 0 +ATOM 62 H 1 1 34.640 24.804 15.013 0.00 0.00 0 +ATOM 63 H 1 1 32.401 25.764 14.295 0.00 0.00 0 +ATOM 64 O 1 1 0.404 26.779 23.400 0.00 0.00 0 +ATOM 65 H 1 1 1.353 27.248 24.987 0.00 0.00 0 +ATOM 66 H 1 1 1.546 28.050 22.317 0.00 0.00 0 +ATOM 67 O 1 1 34.222 21.380 25.418 0.00 0.00 0 +ATOM 68 H 1 1 35.669 20.151 25.317 0.00 0.00 0 +ATOM 69 H 1 1 32.960 21.180 23.992 0.00 0.00 0 +ATOM 70 O 1 1 33.259 17.438 32.480 0.00 0.00 0 +ATOM 71 H 1 1 33.314 18.782 33.883 0.00 0.00 0 +ATOM 72 H 1 1 32.743 18.181 30.871 0.00 0.00 0 +ATOM 73 O 1 1 4.463 21.979 3.936 0.00 0.00 0 +ATOM 74 H 1 1 5.856 23.084 3.400 0.00 0.00 0 +ATOM 75 H 1 1 3.986 22.180 5.602 0.00 0.00 0 +ATOM 76 O 1 1 6.258 25.851 8.520 0.00 0.00 0 +ATOM 77 H 1 1 5.767 27.693 8.476 0.00 0.00 0 +ATOM 78 H 1 1 7.202 25.506 10.186 0.00 0.00 0 +ATOM 79 O 1 1 0.601 29.737 12.747 0.00 0.00 0 +ATOM 80 H 1 1 -0.685 30.842 12.350 0.00 0.00 0 +ATOM 81 H 1 1 1.336 30.716 14.031 0.00 0.00 0 +ATOM 82 O 1 1 7.563 28.191 24.333 0.00 0.00 0 +ATOM 83 H 1 1 9.201 28.828 24.684 0.00 0.00 0 +ATOM 84 H 1 1 7.381 27.621 22.799 0.00 0.00 0 +ATOM 85 O 1 1 3.653 27.109 27.772 0.00 0.00 0 +ATOM 86 H 1 1 5.126 27.015 26.772 0.00 0.00 0 +ATOM 87 H 1 1 3.031 28.756 27.698 0.00 0.00 0 +ATOM 88 O 1 1 2.596 23.991 32.476 0.00 0.00 0 +ATOM 89 H 1 1 2.879 24.791 30.859 0.00 0.00 0 +ATOM 90 H 1 1 4.003 22.913 32.701 0.00 0.00 0 +ATOM 91 O 1 1 3.083 31.317 3.644 0.00 0.00 0 +ATOM 92 H 1 1 4.133 30.589 2.539 0.00 0.00 0 +ATOM 93 H 1 1 4.218 32.173 5.037 0.00 0.00 0 +ATOM 94 O 1 1 4.661 30.555 9.368 0.00 0.00 0 +ATOM 95 H 1 1 3.184 29.843 10.132 0.00 0.00 0 +ATOM 96 H 1 1 4.358 32.448 9.126 0.00 0.00 0 +ATOM 97 O 1 1 3.465 32.537 15.778 0.00 0.00 0 +ATOM 98 H 1 1 5.072 31.819 15.903 0.00 0.00 0 +ATOM 99 H 1 1 4.055 34.257 15.284 0.00 0.00 0 +ATOM 100 O 1 1 4.215 29.153 20.317 0.00 0.00 0 +ATOM 101 H 1 1 3.658 30.176 18.842 0.00 0.00 0 +ATOM 102 H 1 1 4.959 30.291 21.449 0.00 0.00 0 +ATOM 103 O 1 1 1.126 31.333 28.768 0.00 0.00 0 +ATOM 104 H 1 1 2.395 31.124 29.925 0.00 0.00 0 +ATOM 105 H 1 1 0.768 33.092 28.898 0.00 0.00 0 +ATOM 106 O 1 1 4.881 32.616 32.302 0.00 0.00 0 +ATOM 107 H 1 1 6.588 32.911 31.725 0.00 0.00 0 +ATOM 108 H 1 1 4.486 34.037 33.249 0.00 0.00 0 +ATOM 109 O 1 1 8.962 5.556 0.151 0.00 0.00 0 +ATOM 110 H 1 1 9.652 6.991 0.859 0.00 0.00 0 +ATOM 111 H 1 1 9.173 4.477 1.645 0.00 0.00 0 +ATOM 112 O 1 1 1.833 3.518 5.679 0.00 0.00 0 +ATOM 113 H 1 1 2.889 2.731 6.788 0.00 0.00 0 +ATOM 114 H 1 1 2.789 4.187 4.147 0.00 0.00 0 +ATOM 115 O 1 1 10.510 34.726 13.073 0.00 0.00 0 +ATOM 116 H 1 1 11.920 34.118 11.919 0.00 0.00 0 +ATOM 117 H 1 1 11.295 34.968 14.741 0.00 0.00 0 +ATOM 118 O 1 1 7.212 0.042 22.454 0.00 0.00 0 +ATOM 119 H 1 1 6.924 0.470 24.172 0.00 0.00 0 +ATOM 120 H 1 1 8.319 1.228 21.653 0.00 0.00 0 +ATOM 121 O 1 1 6.365 2.010 27.544 0.00 0.00 0 +ATOM 122 H 1 1 5.954 3.585 26.852 0.00 0.00 0 +ATOM 123 H 1 1 7.758 2.549 28.696 0.00 0.00 0 +ATOM 124 O 1 1 10.833 3.140 30.787 0.00 0.00 0 +ATOM 125 H 1 1 12.697 2.975 30.867 0.00 0.00 0 +ATOM 126 H 1 1 10.389 3.700 32.404 0.00 0.00 0 +ATOM 127 O 1 1 8.684 9.342 3.912 0.00 0.00 0 +ATOM 128 H 1 1 6.985 9.256 4.773 0.00 0.00 0 +ATOM 129 H 1 1 8.684 10.809 3.011 0.00 0.00 0 +ATOM 130 O 1 1 4.873 9.919 7.707 0.00 0.00 0 +ATOM 131 H 1 1 3.698 9.771 6.194 0.00 0.00 0 +ATOM 132 H 1 1 5.047 11.961 7.624 0.00 0.00 0 +ATOM 133 O 1 1 10.031 5.018 9.699 0.00 0.00 0 +ATOM 134 H 1 1 9.675 3.382 10.340 0.00 0.00 0 +ATOM 135 H 1 1 9.132 5.987 10.825 0.00 0.00 0 +ATOM 136 O 1 1 11.246 3.918 21.929 0.00 0.00 0 +ATOM 137 H 1 1 12.614 2.770 22.341 0.00 0.00 0 +ATOM 138 H 1 1 12.073 5.686 21.497 0.00 0.00 0 +ATOM 139 O 1 1 6.825 7.164 25.708 0.00 0.00 0 +ATOM 140 H 1 1 8.036 8.374 25.980 0.00 0.00 0 +ATOM 141 H 1 1 5.206 7.900 25.891 0.00 0.00 0 +ATOM 142 O 1 1 10.171 12.811 0.295 0.00 0.00 0 +ATOM 143 H 1 1 10.033 12.818 -1.609 0.00 0.00 0 +ATOM 144 H 1 1 9.880 14.492 0.480 0.00 0.00 0 +ATOM 145 O 1 1 8.190 17.402 1.253 0.00 0.00 0 +ATOM 146 H 1 1 9.472 18.531 1.253 0.00 0.00 0 +ATOM 147 H 1 1 6.351 17.817 1.568 0.00 0.00 0 +ATOM 148 O 1 1 11.233 16.188 8.299 0.00 0.00 0 +ATOM 149 H 1 1 10.291 17.689 8.166 0.00 0.00 0 +ATOM 150 H 1 1 12.768 17.123 8.733 0.00 0.00 0 +ATOM 151 O 1 1 6.386 8.002 12.846 0.00 0.00 0 +ATOM 152 H 1 1 7.701 8.896 13.655 0.00 0.00 0 +ATOM 153 H 1 1 5.591 8.877 11.519 0.00 0.00 0 +ATOM 154 O 1 1 8.184 10.419 18.848 0.00 0.00 0 +ATOM 155 H 1 1 9.498 9.434 19.905 0.00 0.00 0 +ATOM 156 H 1 1 6.882 9.027 18.948 0.00 0.00 0 +ATOM 157 O 1 1 10.806 14.431 21.328 0.00 0.00 0 +ATOM 158 H 1 1 9.177 13.531 20.670 0.00 0.00 0 +ATOM 159 H 1 1 11.344 15.696 20.448 0.00 0.00 0 +ATOM 160 O 1 1 9.237 13.928 30.341 0.00 0.00 0 +ATOM 161 H 1 1 10.779 14.839 30.522 0.00 0.00 0 +ATOM 162 H 1 1 9.965 13.192 28.899 0.00 0.00 0 +ATOM 163 O 1 1 10.918 21.707 1.864 0.00 0.00 0 +ATOM 164 H 1 1 10.280 23.449 2.279 0.00 0.00 0 +ATOM 165 H 1 1 12.708 21.456 1.749 0.00 0.00 0 +ATOM 166 O 1 1 9.353 16.125 13.927 0.00 0.00 0 +ATOM 167 H 1 1 9.938 17.594 14.618 0.00 0.00 0 +ATOM 168 H 1 1 9.518 16.360 12.244 0.00 0.00 0 +ATOM 169 O 1 1 10.371 11.107 14.268 0.00 0.00 0 +ATOM 170 H 1 1 9.644 10.406 15.859 0.00 0.00 0 +ATOM 171 H 1 1 9.434 12.523 14.117 0.00 0.00 0 +ATOM 172 O 1 1 3.351 22.769 20.196 0.00 0.00 0 +ATOM 173 H 1 1 2.055 23.686 21.503 0.00 0.00 0 +ATOM 174 H 1 1 2.452 21.401 19.413 0.00 0.00 0 +ATOM 175 O 1 1 6.836 21.329 23.199 0.00 0.00 0 +ATOM 176 H 1 1 8.249 20.848 22.320 0.00 0.00 0 +ATOM 177 H 1 1 5.668 21.841 21.886 0.00 0.00 0 +ATOM 178 O 1 1 4.604 15.649 30.043 0.00 0.00 0 +ATOM 179 H 1 1 6.453 15.217 30.207 0.00 0.00 0 +ATOM 180 H 1 1 3.822 14.762 31.562 0.00 0.00 0 +ATOM 181 O 1 1 7.125 19.976 9.421 0.00 0.00 0 +ATOM 182 H 1 1 5.918 20.453 10.730 0.00 0.00 0 +ATOM 183 H 1 1 8.099 21.496 9.491 0.00 0.00 0 +ATOM 184 O 1 1 9.063 25.912 13.186 0.00 0.00 0 +ATOM 185 H 1 1 10.350 26.572 12.367 0.00 0.00 0 +ATOM 186 H 1 1 9.680 24.367 13.697 0.00 0.00 0 +ATOM 187 O 1 1 8.022 22.343 17.042 0.00 0.00 0 +ATOM 188 H 1 1 9.144 23.367 18.074 0.00 0.00 0 +ATOM 189 H 1 1 6.562 23.462 16.852 0.00 0.00 0 +ATOM 190 O 1 1 10.762 26.285 19.963 0.00 0.00 0 +ATOM 191 H 1 1 11.036 27.966 20.538 0.00 0.00 0 +ATOM 192 H 1 1 11.078 25.401 21.456 0.00 0.00 0 +ATOM 193 O 1 1 9.158 22.902 28.391 0.00 0.00 0 +ATOM 194 H 1 1 8.219 23.528 27.085 0.00 0.00 0 +ATOM 195 H 1 1 8.089 21.760 29.509 0.00 0.00 0 +ATOM 196 O 1 1 6.219 20.158 31.921 0.00 0.00 0 +ATOM 197 H 1 1 5.635 18.511 31.161 0.00 0.00 0 +ATOM 198 H 1 1 7.530 19.624 33.071 0.00 0.00 0 +ATOM 199 O 1 1 11.191 31.509 2.617 0.00 0.00 0 +ATOM 200 H 1 1 10.460 32.214 4.108 0.00 0.00 0 +ATOM 201 H 1 1 13.176 31.751 2.577 0.00 0.00 0 +ATOM 202 O 1 1 4.748 0.055 8.605 0.00 0.00 0 +ATOM 203 H 1 1 5.380 0.517 10.183 0.00 0.00 0 +ATOM 204 H 1 1 6.050 -0.306 7.480 0.00 0.00 0 +ATOM 205 O 1 1 8.695 30.809 15.731 0.00 0.00 0 +ATOM 206 H 1 1 9.189 32.103 14.495 0.00 0.00 0 +ATOM 207 H 1 1 8.447 29.069 14.868 0.00 0.00 0 +ATOM 208 O 1 1 10.128 31.402 20.766 0.00 0.00 0 +ATOM 209 H 1 1 9.456 30.905 19.155 0.00 0.00 0 +ATOM 210 H 1 1 9.020 32.731 21.415 0.00 0.00 0 +ATOM 211 O 1 1 12.238 30.162 25.837 0.00 0.00 0 +ATOM 212 H 1 1 11.418 30.908 27.110 0.00 0.00 0 +ATOM 213 H 1 1 12.396 31.331 24.678 0.00 0.00 0 +ATOM 214 O 1 1 10.395 32.537 30.624 0.00 0.00 0 +ATOM 215 H 1 1 11.042 34.339 30.751 0.00 0.00 0 +ATOM 216 H 1 1 11.378 31.486 31.538 0.00 0.00 0 +ATOM 217 O 1 1 10.438 3.626 5.087 0.00 0.00 0 +ATOM 218 H 1 1 12.435 4.082 5.136 0.00 0.00 0 +ATOM 219 H 1 1 9.822 4.284 6.681 0.00 0.00 0 +ATOM 220 O 1 1 14.762 3.401 13.776 0.00 0.00 0 +ATOM 221 H 1 1 16.518 3.824 13.376 0.00 0.00 0 +ATOM 222 H 1 1 13.752 4.757 12.964 0.00 0.00 0 +ATOM 223 O 1 1 12.382 1.012 17.643 0.00 0.00 0 +ATOM 224 H 1 1 13.346 1.997 16.444 0.00 0.00 0 +ATOM 225 H 1 1 11.931 2.133 18.998 0.00 0.00 0 +ATOM 226 O 1 1 15.278 1.293 24.559 0.00 0.00 0 +ATOM 227 H 1 1 16.071 0.946 26.365 0.00 0.00 0 +ATOM 228 H 1 1 15.794 0.199 23.499 0.00 0.00 0 +ATOM 229 O 1 1 22.226 31.627 24.712 0.00 0.00 0 +ATOM 230 H 1 1 23.338 32.595 23.876 0.00 0.00 0 +ATOM 231 H 1 1 22.161 30.053 24.132 0.00 0.00 0 +ATOM 232 O 1 1 15.640 1.847 32.717 0.00 0.00 0 +ATOM 233 H 1 1 17.488 2.473 31.874 0.00 0.00 0 +ATOM 234 H 1 1 16.403 0.869 34.267 0.00 0.00 0 +ATOM 235 O 1 1 14.858 10.199 2.754 0.00 0.00 0 +ATOM 236 H 1 1 13.360 10.712 2.282 0.00 0.00 0 +ATOM 237 H 1 1 14.560 9.316 4.559 0.00 0.00 0 +ATOM 238 O 1 1 15.717 8.469 10.739 0.00 0.00 0 +ATOM 239 H 1 1 17.323 9.581 10.875 0.00 0.00 0 +ATOM 240 H 1 1 14.574 9.631 10.221 0.00 0.00 0 +ATOM 241 O 1 1 15.248 10.398 16.525 0.00 0.00 0 +ATOM 242 H 1 1 16.324 9.181 16.149 0.00 0.00 0 +ATOM 243 H 1 1 14.172 10.488 15.098 0.00 0.00 0 +ATOM 244 O 1 1 13.226 8.438 20.801 0.00 0.00 0 +ATOM 245 H 1 1 14.043 8.996 19.295 0.00 0.00 0 +ATOM 246 H 1 1 14.661 7.802 22.093 0.00 0.00 0 +ATOM 247 O 1 1 10.173 10.961 25.875 0.00 0.00 0 +ATOM 248 H 1 1 11.477 10.223 26.940 0.00 0.00 0 +ATOM 249 H 1 1 11.269 10.738 24.343 0.00 0.00 0 +ATOM 250 O 1 1 12.792 7.737 29.173 0.00 0.00 0 +ATOM 251 H 1 1 12.199 6.038 29.475 0.00 0.00 0 +ATOM 252 H 1 1 14.427 7.450 29.617 0.00 0.00 0 +ATOM 253 O 1 1 15.180 19.498 3.578 0.00 0.00 0 +ATOM 254 H 1 1 14.883 17.596 4.080 0.00 0.00 0 +ATOM 255 H 1 1 16.754 19.579 2.626 0.00 0.00 0 +ATOM 256 O 1 1 12.517 11.093 7.701 0.00 0.00 0 +ATOM 257 H 1 1 12.224 12.778 7.555 0.00 0.00 0 +ATOM 258 H 1 1 11.150 10.393 7.057 0.00 0.00 0 +ATOM 259 O 1 1 16.266 16.271 10.758 0.00 0.00 0 +ATOM 260 H 1 1 16.507 15.795 12.768 0.00 0.00 0 +ATOM 261 H 1 1 17.725 16.977 10.292 0.00 0.00 0 +ATOM 262 O 1 1 14.069 18.399 18.897 0.00 0.00 0 +ATOM 263 H 1 1 15.513 17.523 18.155 0.00 0.00 0 +ATOM 264 H 1 1 14.958 18.709 20.673 0.00 0.00 0 +ATOM 265 O 1 1 14.099 15.480 25.510 0.00 0.00 0 +ATOM 266 H 1 1 13.698 16.872 26.938 0.00 0.00 0 +ATOM 267 H 1 1 12.567 15.379 24.444 0.00 0.00 0 +ATOM 268 O 1 1 13.309 17.574 30.292 0.00 0.00 0 +ATOM 269 H 1 1 14.937 16.934 30.810 0.00 0.00 0 +ATOM 270 H 1 1 13.969 19.494 30.012 0.00 0.00 0 +ATOM 271 O 1 1 18.371 23.257 0.925 0.00 0.00 0 +ATOM 272 H 1 1 19.479 23.480 2.321 0.00 0.00 0 +ATOM 273 H 1 1 19.087 24.325 -0.369 0.00 0.00 0 +ATOM 274 O 1 1 12.100 21.730 11.355 0.00 0.00 0 +ATOM 275 H 1 1 13.141 22.287 12.743 0.00 0.00 0 +ATOM 276 H 1 1 13.467 22.236 10.244 0.00 0.00 0 +ATOM 277 O 1 1 12.163 23.290 23.597 0.00 0.00 0 +ATOM 278 H 1 1 11.324 22.736 24.949 0.00 0.00 0 +ATOM 279 H 1 1 13.882 22.872 23.840 0.00 0.00 0 +ATOM 280 O 1 1 20.173 26.761 22.628 0.00 0.00 0 +ATOM 281 H 1 1 20.206 26.532 20.792 0.00 0.00 0 +ATOM 282 H 1 1 21.556 25.742 23.389 0.00 0.00 0 +ATOM 283 O 1 1 16.701 21.165 22.605 0.00 0.00 0 +ATOM 284 H 1 1 18.028 20.686 23.848 0.00 0.00 0 +ATOM 285 H 1 1 17.104 22.866 21.949 0.00 0.00 0 +ATOM 286 O 1 1 11.391 26.461 33.705 0.00 0.00 0 +ATOM 287 H 1 1 9.841 27.192 34.048 0.00 0.00 0 +ATOM 288 H 1 1 11.776 25.540 35.243 0.00 0.00 0 +ATOM 289 O 1 1 9.898 25.989 4.553 0.00 0.00 0 +ATOM 290 H 1 1 8.902 26.131 6.039 0.00 0.00 0 +ATOM 291 H 1 1 10.287 27.806 4.376 0.00 0.00 0 +ATOM 292 O 1 1 14.308 26.960 10.877 0.00 0.00 0 +ATOM 293 H 1 1 15.302 27.405 12.173 0.00 0.00 0 +ATOM 294 H 1 1 15.463 26.151 9.633 0.00 0.00 0 +ATOM 295 O 1 1 13.433 22.960 16.904 0.00 0.00 0 +ATOM 296 H 1 1 13.409 24.131 18.132 0.00 0.00 0 +ATOM 297 H 1 1 13.624 21.191 17.520 0.00 0.00 0 +ATOM 298 O 1 1 16.409 26.768 26.875 0.00 0.00 0 +ATOM 299 H 1 1 17.590 26.987 25.431 0.00 0.00 0 +ATOM 300 H 1 1 14.751 27.703 26.230 0.00 0.00 0 +ATOM 301 O 1 1 14.405 22.733 29.892 0.00 0.00 0 +ATOM 302 H 1 1 15.423 23.079 28.494 0.00 0.00 0 +ATOM 303 H 1 1 12.826 23.259 29.416 0.00 0.00 0 +ATOM 304 O 1 1 6.905 29.408 0.749 0.00 0.00 0 +ATOM 305 H 1 1 8.428 30.483 1.567 0.00 0.00 0 +ATOM 306 H 1 1 6.353 30.814 -0.444 0.00 0.00 0 +ATOM 307 O 1 1 9.189 34.159 6.509 0.00 0.00 0 +ATOM 308 H 1 1 10.198 34.193 8.002 0.00 0.00 0 +ATOM 309 H 1 1 9.890 35.692 5.785 0.00 0.00 0 +ATOM 310 O 1 1 14.256 32.316 9.369 0.00 0.00 0 +ATOM 311 H 1 1 15.733 32.867 9.486 0.00 0.00 0 +ATOM 312 H 1 1 14.754 30.670 10.090 0.00 0.00 0 +ATOM 313 O 1 1 14.714 30.841 16.516 0.00 0.00 0 +ATOM 314 H 1 1 13.748 29.551 17.279 0.00 0.00 0 +ATOM 315 H 1 1 13.218 31.933 16.614 0.00 0.00 0 +ATOM 316 O 1 1 18.409 33.641 20.611 0.00 0.00 0 +ATOM 317 H 1 1 19.601 32.274 21.115 0.00 0.00 0 +ATOM 318 H 1 1 17.360 32.655 19.518 0.00 0.00 0 +ATOM 319 O 1 1 16.062 28.638 32.207 0.00 0.00 0 +ATOM 320 H 1 1 14.648 27.958 33.253 0.00 0.00 0 +ATOM 321 H 1 1 15.752 28.014 30.522 0.00 0.00 0 +ATOM 322 O 1 1 16.200 30.895 1.473 0.00 0.00 0 +ATOM 323 H 1 1 16.626 29.968 -0.130 0.00 0.00 0 +ATOM 324 H 1 1 17.167 29.833 2.927 0.00 0.00 0 +ATOM 325 O 1 1 20.278 3.529 6.048 0.00 0.00 0 +ATOM 326 H 1 1 20.977 3.611 4.575 0.00 0.00 0 +ATOM 327 H 1 1 21.312 4.513 7.251 0.00 0.00 0 +ATOM 328 O 1 1 23.079 5.778 10.408 0.00 0.00 0 +ATOM 329 H 1 1 24.650 6.259 10.838 0.00 0.00 0 +ATOM 330 H 1 1 22.342 7.609 10.178 0.00 0.00 0 +ATOM 331 O 1 1 19.581 2.031 12.110 0.00 0.00 0 +ATOM 332 H 1 1 19.039 1.082 10.440 0.00 0.00 0 +ATOM 333 H 1 1 21.141 2.991 11.851 0.00 0.00 0 +ATOM 334 O 1 1 22.005 3.223 23.178 0.00 0.00 0 +ATOM 335 H 1 1 21.429 4.090 24.554 0.00 0.00 0 +ATOM 336 H 1 1 20.654 1.791 22.711 0.00 0.00 0 +ATOM 337 O 1 1 16.630 6.422 23.792 0.00 0.00 0 +ATOM 338 H 1 1 16.219 4.804 24.406 0.00 0.00 0 +ATOM 339 H 1 1 17.066 7.128 25.282 0.00 0.00 0 +ATOM 340 O 1 1 21.676 5.564 28.158 0.00 0.00 0 +ATOM 341 H 1 1 20.658 6.717 29.185 0.00 0.00 0 +ATOM 342 H 1 1 23.413 5.828 28.996 0.00 0.00 0 +ATOM 343 O 1 1 15.257 5.265 5.626 0.00 0.00 0 +ATOM 344 H 1 1 16.914 4.519 5.490 0.00 0.00 0 +ATOM 345 H 1 1 15.144 6.150 6.972 0.00 0.00 0 +ATOM 346 O 1 1 20.137 11.082 10.437 0.00 0.00 0 +ATOM 347 H 1 1 20.021 10.947 8.733 0.00 0.00 0 +ATOM 348 H 1 1 21.025 12.555 10.853 0.00 0.00 0 +ATOM 349 O 1 1 23.089 14.627 12.437 0.00 0.00 0 +ATOM 350 H 1 1 24.716 15.254 12.736 0.00 0.00 0 +ATOM 351 H 1 1 23.284 13.228 13.653 0.00 0.00 0 +ATOM 352 O 1 1 24.083 12.649 22.566 0.00 0.00 0 +ATOM 353 H 1 1 22.397 12.663 23.042 0.00 0.00 0 +ATOM 354 H 1 1 24.901 13.851 23.565 0.00 0.00 0 +ATOM 355 O 1 1 17.865 7.909 30.036 0.00 0.00 0 +ATOM 356 H 1 1 17.509 8.045 31.982 0.00 0.00 0 +ATOM 357 H 1 1 18.078 9.582 29.318 0.00 0.00 0 +ATOM 358 O 1 1 18.824 8.486 0.104 0.00 0.00 0 +ATOM 359 H 1 1 19.997 10.191 -0.057 0.00 0.00 0 +ATOM 360 H 1 1 17.077 8.998 0.779 0.00 0.00 0 +ATOM 361 O 1 1 20.122 9.143 5.343 0.00 0.00 0 +ATOM 362 H 1 1 19.373 8.819 3.821 0.00 0.00 0 +ATOM 363 H 1 1 21.998 8.776 5.128 0.00 0.00 0 +ATOM 364 O 1 1 16.413 14.459 5.855 0.00 0.00 0 +ATOM 365 H 1 1 15.536 13.007 5.239 0.00 0.00 0 +ATOM 366 H 1 1 16.006 14.725 7.737 0.00 0.00 0 +ATOM 367 O 1 1 17.561 15.066 15.654 0.00 0.00 0 +ATOM 368 H 1 1 17.575 13.398 16.055 0.00 0.00 0 +ATOM 369 H 1 1 18.978 15.828 16.400 0.00 0.00 0 +ATOM 370 O 1 1 26.374 17.047 24.817 0.00 0.00 0 +ATOM 371 H 1 1 27.983 17.098 25.632 0.00 0.00 0 +ATOM 372 H 1 1 25.629 18.751 24.919 0.00 0.00 0 +ATOM 373 O 1 1 19.784 12.960 28.706 0.00 0.00 0 +ATOM 374 H 1 1 21.662 13.055 28.871 0.00 0.00 0 +ATOM 375 H 1 1 19.545 14.070 27.143 0.00 0.00 0 +ATOM 376 O 1 1 17.891 16.733 32.499 0.00 0.00 0 +ATOM 377 H 1 1 18.327 15.240 31.277 0.00 0.00 0 +ATOM 378 H 1 1 18.633 18.335 31.693 0.00 0.00 0 +ATOM 379 O 1 1 23.733 23.024 1.663 0.00 0.00 0 +ATOM 380 H 1 1 24.800 24.052 2.776 0.00 0.00 0 +ATOM 381 H 1 1 24.693 22.618 0.198 0.00 0.00 0 +ATOM 382 O 1 1 20.789 18.440 9.443 0.00 0.00 0 +ATOM 383 H 1 1 20.766 17.257 7.881 0.00 0.00 0 +ATOM 384 H 1 1 21.896 17.345 10.385 0.00 0.00 0 +ATOM 385 O 1 1 21.574 17.493 17.838 0.00 0.00 0 +ATOM 386 H 1 1 20.597 18.955 17.218 0.00 0.00 0 +ATOM 387 H 1 1 22.538 16.874 16.251 0.00 0.00 0 +ATOM 388 O 1 1 19.168 14.748 24.131 0.00 0.00 0 +ATOM 389 H 1 1 19.711 16.390 23.712 0.00 0.00 0 +ATOM 390 H 1 1 17.429 14.695 24.403 0.00 0.00 0 +ATOM 391 O 1 1 22.149 20.198 24.977 0.00 0.00 0 +ATOM 392 H 1 1 21.639 20.924 26.486 0.00 0.00 0 +ATOM 393 H 1 1 22.656 21.657 24.411 0.00 0.00 0 +ATOM 394 O 1 1 20.565 20.792 29.600 0.00 0.00 0 +ATOM 395 H 1 1 22.264 20.409 30.214 0.00 0.00 0 +ATOM 396 H 1 1 20.548 22.408 30.597 0.00 0.00 0 +ATOM 397 O 1 1 20.802 26.547 9.615 0.00 0.00 0 +ATOM 398 H 1 1 20.099 27.984 8.338 0.00 0.00 0 +ATOM 399 H 1 1 21.277 27.539 11.325 0.00 0.00 0 +ATOM 400 O 1 1 16.283 23.589 7.779 0.00 0.00 0 +ATOM 401 H 1 1 16.093 21.973 6.712 0.00 0.00 0 +ATOM 402 H 1 1 17.901 22.971 8.154 0.00 0.00 0 +ATOM 403 O 1 1 18.469 29.798 13.568 0.00 0.00 0 +ATOM 404 H 1 1 19.712 31.216 13.506 0.00 0.00 0 +ATOM 405 H 1 1 16.872 30.343 14.396 0.00 0.00 0 +ATOM 406 O 1 1 18.790 21.712 16.060 0.00 0.00 0 +ATOM 407 H 1 1 19.878 23.090 16.485 0.00 0.00 0 +ATOM 408 H 1 1 17.201 22.326 15.819 0.00 0.00 0 +ATOM 409 O 1 1 21.747 26.084 16.349 0.00 0.00 0 +ATOM 410 H 1 1 20.783 27.021 15.300 0.00 0.00 0 +ATOM 411 H 1 1 22.705 27.328 17.206 0.00 0.00 0 +ATOM 412 O 1 1 20.769 26.211 32.050 0.00 0.00 0 +ATOM 413 H 1 1 21.488 27.404 33.328 0.00 0.00 0 +ATOM 414 H 1 1 18.989 26.710 32.145 0.00 0.00 0 +ATOM 415 O 1 1 19.820 29.181 5.559 0.00 0.00 0 +ATOM 416 H 1 1 20.991 29.509 4.109 0.00 0.00 0 +ATOM 417 H 1 1 19.431 31.018 6.221 0.00 0.00 0 +ATOM 418 O 1 1 19.240 33.867 7.993 0.00 0.00 0 +ATOM 419 H 1 1 19.107 35.039 6.604 0.00 0.00 0 +ATOM 420 H 1 1 20.697 33.671 9.063 0.00 0.00 0 +ATOM 421 O 1 1 22.511 34.976 15.793 0.00 0.00 0 +ATOM 422 H 1 1 23.716 36.163 16.603 0.00 0.00 0 +ATOM 423 H 1 1 21.699 36.150 14.467 0.00 0.00 0 +ATOM 424 O 1 1 22.622 30.284 19.069 0.00 0.00 0 +ATOM 425 H 1 1 22.049 31.351 17.725 0.00 0.00 0 +ATOM 426 H 1 1 24.411 30.773 19.576 0.00 0.00 0 +ATOM 427 O 1 1 18.639 33.611 28.369 0.00 0.00 0 +ATOM 428 H 1 1 18.226 32.159 29.103 0.00 0.00 0 +ATOM 429 H 1 1 19.906 33.008 27.158 0.00 0.00 0 +ATOM 430 O 1 1 22.520 1.325 31.926 0.00 0.00 0 +ATOM 431 H 1 1 22.803 2.668 30.796 0.00 0.00 0 +ATOM 432 H 1 1 21.045 0.425 31.122 0.00 0.00 0 +ATOM 433 O 1 1 21.754 3.789 1.159 0.00 0.00 0 +ATOM 434 H 1 1 22.085 2.785 -0.180 0.00 0.00 0 +ATOM 435 H 1 1 20.850 5.175 0.610 0.00 0.00 0 +ATOM 436 O 1 1 28.457 5.539 12.133 0.00 0.00 0 +ATOM 437 H 1 1 29.489 4.390 11.182 0.00 0.00 0 +ATOM 438 H 1 1 29.161 7.131 12.587 0.00 0.00 0 +ATOM 439 O 1 1 22.495 5.966 17.324 0.00 0.00 0 +ATOM 440 H 1 1 24.377 5.379 17.393 0.00 0.00 0 +ATOM 441 H 1 1 21.906 5.491 18.857 0.00 0.00 0 +ATOM 442 O 1 1 28.128 3.304 22.287 0.00 0.00 0 +ATOM 443 H 1 1 28.123 2.999 20.491 0.00 0.00 0 +ATOM 444 H 1 1 26.533 3.355 22.876 0.00 0.00 0 +ATOM 445 O 1 1 28.378 10.455 27.266 0.00 0.00 0 +ATOM 446 H 1 1 30.019 10.292 28.051 0.00 0.00 0 +ATOM 447 H 1 1 28.635 10.039 25.463 0.00 0.00 0 +ATOM 448 O 1 1 27.031 8.353 34.806 0.00 0.00 0 +ATOM 449 H 1 1 26.116 9.984 34.571 0.00 0.00 0 +ATOM 450 H 1 1 28.685 8.951 34.739 0.00 0.00 0 +ATOM 451 O 1 1 24.951 8.160 4.454 0.00 0.00 0 +ATOM 452 H 1 1 25.930 9.616 5.160 0.00 0.00 0 +ATOM 453 H 1 1 25.947 7.994 2.724 0.00 0.00 0 +ATOM 454 O 1 1 26.937 12.436 6.869 0.00 0.00 0 +ATOM 455 H 1 1 25.492 13.284 6.708 0.00 0.00 0 +ATOM 456 H 1 1 27.689 13.332 8.266 0.00 0.00 0 +ATOM 457 O 1 1 23.365 11.214 16.933 0.00 0.00 0 +ATOM 458 H 1 1 22.247 9.744 16.789 0.00 0.00 0 +ATOM 459 H 1 1 23.264 12.035 18.539 0.00 0.00 0 +ATOM 460 O 1 1 28.321 8.759 22.158 0.00 0.00 0 +ATOM 461 H 1 1 27.662 6.895 22.482 0.00 0.00 0 +ATOM 462 H 1 1 26.971 9.710 21.902 0.00 0.00 0 +ATOM 463 O 1 1 27.071 6.109 29.555 0.00 0.00 0 +ATOM 464 H 1 1 27.591 7.663 28.857 0.00 0.00 0 +ATOM 465 H 1 1 27.304 6.320 31.261 0.00 0.00 0 +ATOM 466 O 1 1 22.474 11.704 34.640 0.00 0.00 0 +ATOM 467 H 1 1 22.752 13.304 35.584 0.00 0.00 0 +ATOM 468 H 1 1 22.840 12.090 33.030 0.00 0.00 0 +ATOM 469 O 1 1 21.656 14.971 5.615 0.00 0.00 0 +ATOM 470 H 1 1 21.690 15.860 3.977 0.00 0.00 0 +ATOM 471 H 1 1 19.964 14.225 5.774 0.00 0.00 0 +ATOM 472 O 1 1 28.539 21.492 9.820 0.00 0.00 0 +ATOM 473 H 1 1 27.288 22.181 8.688 0.00 0.00 0 +ATOM 474 H 1 1 28.065 22.420 11.602 0.00 0.00 0 +ATOM 475 O 1 1 28.364 16.020 11.109 0.00 0.00 0 +ATOM 476 H 1 1 30.033 16.649 12.089 0.00 0.00 0 +ATOM 477 H 1 1 28.456 17.440 10.082 0.00 0.00 0 +ATOM 478 O 1 1 0.054 13.686 18.103 0.00 0.00 0 +ATOM 479 H 1 1 -1.714 12.928 18.841 0.00 0.00 0 +ATOM 480 H 1 1 1.008 12.429 17.383 0.00 0.00 0 +ATOM 481 O 1 1 24.636 12.894 29.957 0.00 0.00 0 +ATOM 482 H 1 1 25.906 13.914 31.183 0.00 0.00 0 +ATOM 483 H 1 1 25.641 11.609 29.162 0.00 0.00 0 +ATOM 484 O 1 1 21.548 17.250 0.749 0.00 0.00 0 +ATOM 485 H 1 1 21.843 19.026 0.905 0.00 0.00 0 +ATOM 486 H 1 1 20.385 16.716 -0.697 0.00 0.00 0 +ATOM 487 O 1 1 26.095 27.274 4.520 0.00 0.00 0 +ATOM 488 H 1 1 27.889 26.458 4.505 0.00 0.00 0 +ATOM 489 H 1 1 25.648 26.970 6.165 0.00 0.00 0 +ATOM 490 O 1 1 23.610 22.515 8.008 0.00 0.00 0 +ATOM 491 H 1 1 22.653 21.187 8.739 0.00 0.00 0 +ATOM 492 H 1 1 22.286 24.095 8.444 0.00 0.00 0 +ATOM 493 O 1 1 27.355 18.929 18.180 0.00 0.00 0 +ATOM 494 H 1 1 27.200 20.349 17.155 0.00 0.00 0 +ATOM 495 H 1 1 25.579 18.322 18.770 0.00 0.00 0 +ATOM 496 O 1 1 26.765 23.633 14.444 0.00 0.00 0 +ATOM 497 H 1 1 27.441 25.298 13.651 0.00 0.00 0 +ATOM 498 H 1 1 25.086 24.256 14.749 0.00 0.00 0 +ATOM 499 O 1 1 31.478 20.769 20.986 0.00 0.00 0 +ATOM 500 H 1 1 30.440 22.509 21.135 0.00 0.00 0 +ATOM 501 H 1 1 30.567 19.656 20.043 0.00 0.00 0 +ATOM 502 O 1 1 24.812 20.412 32.668 0.00 0.00 0 +ATOM 503 H 1 1 26.242 21.478 31.874 0.00 0.00 0 +ATOM 504 H 1 1 25.787 19.023 33.158 0.00 0.00 0 +ATOM 505 O 1 1 22.105 29.076 0.928 0.00 0.00 0 +ATOM 506 H 1 1 23.296 27.923 1.739 0.00 0.00 0 +ATOM 507 H 1 1 22.623 30.994 0.882 0.00 0.00 0 +ATOM 508 O 1 1 29.572 31.256 8.626 0.00 0.00 0 +ATOM 509 H 1 1 30.795 30.203 7.736 0.00 0.00 0 +ATOM 510 H 1 1 28.277 31.519 7.260 0.00 0.00 0 +ATOM 511 O 1 1 31.817 34.843 18.283 0.00 0.00 0 +ATOM 512 H 1 1 32.438 34.389 16.474 0.00 0.00 0 +ATOM 513 H 1 1 32.743 36.422 18.341 0.00 0.00 0 +ATOM 514 O 1 1 27.915 25.601 19.033 0.00 0.00 0 +ATOM 515 H 1 1 29.358 26.561 19.190 0.00 0.00 0 +ATOM 516 H 1 1 28.148 24.429 17.530 0.00 0.00 0 +ATOM 517 O 1 1 24.548 24.654 24.025 0.00 0.00 0 +ATOM 518 H 1 1 25.528 25.635 22.824 0.00 0.00 0 +ATOM 519 H 1 1 25.300 25.200 25.645 0.00 0.00 0 +ATOM 520 O 1 1 28.540 22.922 30.370 0.00 0.00 0 +ATOM 521 H 1 1 27.414 24.096 29.781 0.00 0.00 0 +ATOM 522 H 1 1 29.674 23.914 31.873 0.00 0.00 0 +ATOM 523 O 1 1 24.969 33.623 1.014 0.00 0.00 0 +ATOM 524 H 1 1 26.521 33.058 1.518 0.00 0.00 0 +ATOM 525 H 1 1 24.990 34.322 -0.683 0.00 0.00 0 +ATOM 526 O 1 1 23.075 32.171 11.324 0.00 0.00 0 +ATOM 527 H 1 1 23.316 32.775 13.097 0.00 0.00 0 +ATOM 528 H 1 1 24.460 33.203 10.662 0.00 0.00 0 +ATOM 529 O 1 1 27.497 2.736 17.224 0.00 0.00 0 +ATOM 530 H 1 1 28.397 3.415 15.715 0.00 0.00 0 +ATOM 531 H 1 1 28.234 1.233 17.412 0.00 0.00 0 +ATOM 532 O 1 1 26.369 33.060 22.077 0.00 0.00 0 +ATOM 533 H 1 1 26.170 34.746 22.264 0.00 0.00 0 +ATOM 534 H 1 1 27.592 32.404 23.321 0.00 0.00 0 +ATOM 535 O 1 1 30.221 30.950 25.843 0.00 0.00 0 +ATOM 536 H 1 1 30.305 29.038 26.208 0.00 0.00 0 +ATOM 537 H 1 1 30.363 31.979 27.414 0.00 0.00 0 +ATOM 538 O 1 1 24.973 26.732 28.607 0.00 0.00 0 +ATOM 539 H 1 1 25.385 28.369 29.248 0.00 0.00 0 +ATOM 540 H 1 1 23.330 26.597 29.234 0.00 0.00 0 +ATOM 541 O 1 1 32.165 4.857 2.258 0.00 0.00 0 +ATOM 542 H 1 1 32.417 6.195 1.157 0.00 0.00 0 +ATOM 543 H 1 1 32.615 3.727 1.112 0.00 0.00 0 +ATOM 544 O 1 1 28.067 3.533 5.217 0.00 0.00 0 +ATOM 545 H 1 1 26.960 4.447 4.158 0.00 0.00 0 +ATOM 546 H 1 1 29.875 3.863 4.448 0.00 0.00 0 +ATOM 547 O 1 1 33.279 2.782 13.028 0.00 0.00 0 +ATOM 548 H 1 1 33.708 3.955 11.817 0.00 0.00 0 +ATOM 549 H 1 1 33.656 3.545 14.631 0.00 0.00 0 +ATOM 550 O 1 1 34.278 4.944 17.492 0.00 0.00 0 +ATOM 551 H 1 1 33.438 6.563 17.876 0.00 0.00 0 +ATOM 552 H 1 1 34.906 4.452 18.995 0.00 0.00 0 +ATOM 553 O 1 1 32.363 1.908 26.092 0.00 0.00 0 +ATOM 554 H 1 1 31.941 1.683 24.268 0.00 0.00 0 +ATOM 555 H 1 1 33.850 1.390 26.904 0.00 0.00 0 +ATOM 556 O 1 1 27.982 0.418 28.241 0.00 0.00 0 +ATOM 557 H 1 1 27.516 2.080 28.309 0.00 0.00 0 +ATOM 558 H 1 1 29.593 0.176 27.299 0.00 0.00 0 +ATOM 559 O 1 1 28.845 14.672 2.724 0.00 0.00 0 +ATOM 560 H 1 1 27.963 13.930 4.139 0.00 0.00 0 +ATOM 561 H 1 1 30.386 15.714 3.379 0.00 0.00 0 +ATOM 562 O 1 1 28.083 10.618 14.298 0.00 0.00 0 +ATOM 563 H 1 1 28.623 12.160 13.293 0.00 0.00 0 +ATOM 564 H 1 1 26.486 11.015 15.379 0.00 0.00 0 +ATOM 565 O 1 1 33.867 10.545 13.306 0.00 0.00 0 +ATOM 566 H 1 1 35.165 9.612 13.810 0.00 0.00 0 +ATOM 567 H 1 1 33.615 10.270 11.513 0.00 0.00 0 +ATOM 568 O 1 1 31.790 9.696 18.223 0.00 0.00 0 +ATOM 569 H 1 1 30.484 9.334 19.421 0.00 0.00 0 +ATOM 570 H 1 1 30.834 10.096 16.929 0.00 0.00 0 +ATOM 571 O 1 1 30.141 15.006 21.532 0.00 0.00 0 +ATOM 572 H 1 1 28.565 15.594 22.099 0.00 0.00 0 +ATOM 573 H 1 1 30.942 14.253 23.077 0.00 0.00 0 +ATOM 574 O 1 1 32.798 10.732 30.680 0.00 0.00 0 +ATOM 575 H 1 1 34.073 9.528 30.799 0.00 0.00 0 +ATOM 576 H 1 1 32.991 11.512 28.983 0.00 0.00 0 +ATOM 577 O 1 1 33.652 16.265 5.086 0.00 0.00 0 +ATOM 578 H 1 1 35.399 16.239 4.730 0.00 0.00 0 +ATOM 579 H 1 1 33.503 17.939 5.631 0.00 0.00 0 +ATOM 580 O 1 1 31.947 10.799 7.943 0.00 0.00 0 +ATOM 581 H 1 1 29.894 10.549 7.619 0.00 0.00 0 +ATOM 582 H 1 1 32.271 12.414 7.075 0.00 0.00 0 +ATOM 583 O 1 1 0.329 15.516 11.746 0.00 0.00 0 +ATOM 584 H 1 1 -0.446 14.249 12.939 0.00 0.00 0 +ATOM 585 H 1 1 -0.685 17.018 11.935 0.00 0.00 0 +ATOM 586 O 1 1 4.262 19.165 14.308 0.00 0.00 0 +ATOM 587 H 1 1 3.579 17.691 14.920 0.00 0.00 0 +ATOM 588 H 1 1 5.723 19.183 15.204 0.00 0.00 0 +ATOM 589 O 1 1 32.995 13.546 25.948 0.00 0.00 0 +ATOM 590 H 1 1 32.167 15.060 26.787 0.00 0.00 0 +ATOM 591 H 1 1 34.425 13.800 25.007 0.00 0.00 0 +ATOM 592 O 1 1 1.773 13.524 34.037 0.00 0.00 0 +ATOM 593 H 1 1 0.227 14.409 33.446 0.00 0.00 0 +ATOM 594 H 1 1 2.167 14.670 35.511 0.00 0.00 0 +ATOM 595 O 1 1 33.029 20.529 7.247 0.00 0.00 0 +ATOM 596 H 1 1 34.388 21.414 8.003 0.00 0.00 0 +ATOM 597 H 1 1 31.451 20.831 8.182 0.00 0.00 0 +ATOM 598 O 1 1 2.037 24.250 10.251 0.00 0.00 0 +ATOM 599 H 1 1 3.743 25.008 9.876 0.00 0.00 0 +ATOM 600 H 1 1 1.894 25.043 11.903 0.00 0.00 0 +ATOM 601 O 1 1 32.753 19.259 13.976 0.00 0.00 0 +ATOM 602 H 1 1 32.792 20.886 13.792 0.00 0.00 0 +ATOM 603 H 1 1 34.334 18.799 14.976 0.00 0.00 0 +ATOM 604 O 1 1 0.396 18.673 18.699 0.00 0.00 0 +ATOM 605 H 1 1 -1.211 18.950 19.127 0.00 0.00 0 +ATOM 606 H 1 1 0.469 16.977 18.436 0.00 0.00 0 +ATOM 607 O 1 1 30.855 18.370 27.959 0.00 0.00 0 +ATOM 608 H 1 1 29.759 19.681 28.690 0.00 0.00 0 +ATOM 609 H 1 1 32.103 19.477 26.763 0.00 0.00 0 +ATOM 610 O 1 1 27.723 15.992 33.091 0.00 0.00 0 +ATOM 611 H 1 1 29.390 16.423 32.192 0.00 0.00 0 +ATOM 612 H 1 1 27.801 15.859 34.804 0.00 0.00 0 +ATOM 613 O 1 1 31.068 27.895 3.348 0.00 0.00 0 +ATOM 614 H 1 1 32.517 27.825 4.610 0.00 0.00 0 +ATOM 615 H 1 1 31.529 29.459 2.324 0.00 0.00 0 +ATOM 616 O 1 1 35.039 28.008 6.663 0.00 0.00 0 +ATOM 617 H 1 1 35.966 26.934 7.683 0.00 0.00 0 +ATOM 618 H 1 1 36.055 28.336 5.336 0.00 0.00 0 +ATOM 619 O 1 1 29.356 28.196 13.025 0.00 0.00 0 +ATOM 620 H 1 1 29.210 29.335 14.589 0.00 0.00 0 +ATOM 621 H 1 1 28.874 29.629 11.867 0.00 0.00 0 +ATOM 622 O 1 1 32.386 28.434 18.961 0.00 0.00 0 +ATOM 623 H 1 1 33.368 28.574 20.411 0.00 0.00 0 +ATOM 624 H 1 1 33.410 27.406 17.949 0.00 0.00 0 +ATOM 625 O 1 1 30.898 25.390 25.799 0.00 0.00 0 +ATOM 626 H 1 1 32.369 25.913 24.580 0.00 0.00 0 +ATOM 627 H 1 1 31.317 24.075 27.029 0.00 0.00 0 +ATOM 628 O 1 1 32.259 25.611 33.104 0.00 0.00 0 +ATOM 629 H 1 1 32.238 25.736 34.806 0.00 0.00 0 +ATOM 630 H 1 1 33.920 25.042 32.775 0.00 0.00 0 +ATOM 631 O 1 1 30.290 32.645 1.341 0.00 0.00 0 +ATOM 632 H 1 1 29.949 32.793 -0.430 0.00 0.00 0 +ATOM 633 H 1 1 31.762 33.340 1.847 0.00 0.00 0 +ATOM 634 O 1 1 25.536 34.235 6.469 0.00 0.00 0 +ATOM 635 H 1 1 25.716 36.059 6.651 0.00 0.00 0 +ATOM 636 H 1 1 25.283 33.866 4.895 0.00 0.00 0 +ATOM 637 O 1 1 31.674 33.161 13.106 0.00 0.00 0 +ATOM 638 H 1 1 31.793 34.863 13.281 0.00 0.00 0 +ATOM 639 H 1 1 30.425 32.928 11.783 0.00 0.00 0 +ATOM 640 O 1 1 33.844 32.668 22.296 0.00 0.00 0 +ATOM 641 H 1 1 32.750 32.234 23.524 0.00 0.00 0 +ATOM 642 H 1 1 32.917 32.875 20.736 0.00 0.00 0 +ATOM 643 O 1 1 31.603 30.542 30.805 0.00 0.00 0 +ATOM 644 H 1 1 33.451 30.804 30.468 0.00 0.00 0 +ATOM 645 H 1 1 31.575 28.816 31.756 0.00 0.00 0 +ATOM 646 O 1 1 26.295 31.235 30.599 0.00 0.00 0 +ATOM 647 H 1 1 27.834 30.515 30.607 0.00 0.00 0 +ATOM 648 H 1 1 26.362 32.920 29.856 0.00 0.00 0 +END diff --git a/tools/i-pi/examples/tutorial/README b/tools/i-pi/examples/tutorial/README new file mode 100644 index 000000000..3062659bd --- /dev/null +++ b/tools/i-pi/examples/tutorial/README @@ -0,0 +1,6 @@ + -- Example with the rudimentary PH2 code -- + + * This gives an example of para-H2 with the isotropic Silvera-Goldman + pair potential, as discussed in the tutorial section of the user manual. + Please refer to this section for more detailed instructions + on how to run this example. diff --git a/tools/i-pi/examples/tutorial/tutorial-1/our_ref.pdb b/tools/i-pi/examples/tutorial/tutorial-1/our_ref.pdb new file mode 100755 index 000000000..fbeba1afc --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-1/our_ref.pdb @@ -0,0 +1,111 @@ +TITLE Traj: positions{angstrom} Step: 0 Bead: 1 +CRYST1 17.847 17.847 17.847 90.00 90.00 90.00 P 1 1 +ATOM 1 H2 1 1 0.147 0.132 0.114 0.00 0.00 0 +ATOM 2 H2 1 1 -0.125 2.943 3.188 0.00 0.00 0 +ATOM 3 H2 1 1 3.042 2.937 0.107 0.00 0.00 0 +ATOM 4 H2 1 1 2.976 -0.148 2.960 0.00 0.00 0 +ATOM 5 H2 1 1 -0.229 -0.030 5.923 0.00 0.00 0 +ATOM 6 H2 1 1 0.094 2.999 8.915 0.00 0.00 0 +ATOM 7 H2 1 1 2.954 2.895 5.910 0.00 0.00 0 +ATOM 8 H2 1 1 2.892 -0.155 8.870 0.00 0.00 0 +ATOM 9 H2 1 1 -0.048 0.087 11.901 0.00 0.00 0 +ATOM 10 H2 1 1 0.017 2.947 14.955 0.00 0.00 0 +ATOM 11 H2 1 1 2.979 2.989 11.875 0.00 0.00 0 +ATOM 12 H2 1 1 2.976 0.114 14.794 0.00 0.00 0 +ATOM 13 H2 1 1 -0.053 5.852 -0.165 0.00 0.00 0 +ATOM 14 H2 1 1 0.006 8.858 3.040 0.00 0.00 0 +ATOM 15 H2 1 1 3.041 8.951 -0.096 0.00 0.00 0 +ATOM 16 H2 1 1 3.007 5.879 2.876 0.00 0.00 0 +ATOM 17 H2 1 1 0.057 5.910 6.036 0.00 0.00 0 +ATOM 18 H2 1 1 -0.097 8.867 8.804 0.00 0.00 0 +ATOM 19 H2 1 1 2.832 8.766 5.719 0.00 0.00 0 +ATOM 20 H2 1 1 3.148 5.956 8.964 0.00 0.00 0 +ATOM 21 H2 1 1 0.031 5.974 11.932 0.00 0.00 0 +ATOM 22 H2 1 1 0.124 8.972 14.723 0.00 0.00 0 +ATOM 23 H2 1 1 2.998 8.861 11.952 0.00 0.00 0 +ATOM 24 H2 1 1 2.971 5.943 14.914 0.00 0.00 0 +ATOM 25 H2 1 1 0.009 11.770 0.089 0.00 0.00 0 +ATOM 26 H2 1 1 0.015 14.931 2.992 0.00 0.00 0 +ATOM 27 H2 1 1 2.924 14.889 0.062 0.00 0.00 0 +ATOM 28 H2 1 1 2.832 11.918 3.162 0.00 0.00 0 +ATOM 29 H2 1 1 -0.097 11.885 6.105 0.00 0.00 0 +ATOM 30 H2 1 1 0.169 14.731 8.889 0.00 0.00 0 +ATOM 31 H2 1 1 2.877 14.750 5.921 0.00 0.00 0 +ATOM 32 H2 1 1 3.078 12.038 8.936 0.00 0.00 0 +ATOM 33 H2 1 1 0.019 12.011 11.885 0.00 0.00 0 +ATOM 34 H2 1 1 0.139 14.848 14.841 0.00 0.00 0 +ATOM 35 H2 1 1 2.904 14.835 12.020 0.00 0.00 0 +ATOM 36 H2 1 1 3.083 12.013 14.942 0.00 0.00 0 +ATOM 37 H2 1 1 6.042 0.051 -0.122 0.00 0.00 0 +ATOM 38 H2 1 1 5.911 2.957 2.811 0.00 0.00 0 +ATOM 39 H2 1 1 8.949 3.111 0.013 0.00 0.00 0 +ATOM 40 H2 1 1 8.991 -0.010 2.794 0.00 0.00 0 +ATOM 41 H2 1 1 6.061 0.042 6.018 0.00 0.00 0 +ATOM 42 H2 1 1 6.156 3.002 8.708 0.00 0.00 0 +ATOM 43 H2 1 1 8.922 3.069 5.909 0.00 0.00 0 +ATOM 44 H2 1 1 8.988 0.132 9.006 0.00 0.00 0 +ATOM 45 H2 1 1 5.916 0.157 11.936 0.00 0.00 0 +ATOM 46 H2 1 1 6.011 2.841 14.909 0.00 0.00 0 +ATOM 47 H2 1 1 8.974 2.990 11.906 0.00 0.00 0 +ATOM 48 H2 1 1 8.946 -0.012 14.762 0.00 0.00 0 +ATOM 49 H2 1 1 5.871 5.856 -0.119 0.00 0.00 0 +ATOM 50 H2 1 1 6.164 8.843 3.017 0.00 0.00 0 +ATOM 51 H2 1 1 9.193 8.762 0.076 0.00 0.00 0 +ATOM 52 H2 1 1 8.834 5.965 2.835 0.00 0.00 0 +ATOM 53 H2 1 1 5.987 6.003 5.941 0.00 0.00 0 +ATOM 54 H2 1 1 5.977 8.974 8.839 0.00 0.00 0 +ATOM 55 H2 1 1 9.025 8.846 6.022 0.00 0.00 0 +ATOM 56 H2 1 1 8.848 5.694 9.143 0.00 0.00 0 +ATOM 57 H2 1 1 5.924 6.032 11.865 0.00 0.00 0 +ATOM 58 H2 1 1 6.019 8.827 14.866 0.00 0.00 0 +ATOM 59 H2 1 1 8.835 9.076 11.941 0.00 0.00 0 +ATOM 60 H2 1 1 8.891 6.039 14.895 0.00 0.00 0 +ATOM 61 H2 1 1 5.856 11.998 0.105 0.00 0.00 0 +ATOM 62 H2 1 1 5.828 14.783 2.903 0.00 0.00 0 +ATOM 63 H2 1 1 8.942 14.899 -0.042 0.00 0.00 0 +ATOM 64 H2 1 1 8.930 11.966 3.015 0.00 0.00 0 +ATOM 65 H2 1 1 6.073 11.865 5.912 0.00 0.00 0 +ATOM 66 H2 1 1 6.031 14.891 8.979 0.00 0.00 0 +ATOM 67 H2 1 1 8.972 14.858 5.883 0.00 0.00 0 +ATOM 68 H2 1 1 8.957 11.835 8.967 0.00 0.00 0 +ATOM 69 H2 1 1 5.966 11.882 12.044 0.00 0.00 0 +ATOM 70 H2 1 1 5.947 14.705 14.774 0.00 0.00 0 +ATOM 71 H2 1 1 8.876 14.853 11.951 0.00 0.00 0 +ATOM 72 H2 1 1 8.992 11.917 14.929 0.00 0.00 0 +ATOM 73 H2 1 1 11.946 0.088 -0.028 0.00 0.00 0 +ATOM 74 H2 1 1 11.829 3.081 3.117 0.00 0.00 0 +ATOM 75 H2 1 1 15.004 3.033 -0.008 0.00 0.00 0 +ATOM 76 H2 1 1 14.828 0.120 3.029 0.00 0.00 0 +ATOM 77 H2 1 1 11.906 0.017 5.995 0.00 0.00 0 +ATOM 78 H2 1 1 11.873 2.916 9.016 0.00 0.00 0 +ATOM 79 H2 1 1 14.907 3.062 5.960 0.00 0.00 0 +ATOM 80 H2 1 1 14.948 -0.122 8.864 0.00 0.00 0 +ATOM 81 H2 1 1 11.869 -0.118 11.930 0.00 0.00 0 +ATOM 82 H2 1 1 11.932 2.863 14.979 0.00 0.00 0 +ATOM 83 H2 1 1 14.835 2.976 12.018 0.00 0.00 0 +ATOM 84 H2 1 1 14.852 -0.218 14.783 0.00 0.00 0 +ATOM 85 H2 1 1 11.892 5.990 0.058 0.00 0.00 0 +ATOM 86 H2 1 1 11.816 8.684 2.936 0.00 0.00 0 +ATOM 87 H2 1 1 14.958 8.876 -0.055 0.00 0.00 0 +ATOM 88 H2 1 1 14.840 6.061 2.916 0.00 0.00 0 +ATOM 89 H2 1 1 11.911 5.971 5.726 0.00 0.00 0 +ATOM 90 H2 1 1 11.921 8.947 8.915 0.00 0.00 0 +ATOM 91 H2 1 1 15.032 8.972 5.831 0.00 0.00 0 +ATOM 92 H2 1 1 14.699 5.889 8.931 0.00 0.00 0 +ATOM 93 H2 1 1 11.765 5.844 11.846 0.00 0.00 0 +ATOM 94 H2 1 1 11.983 8.755 14.933 0.00 0.00 0 +ATOM 95 H2 1 1 14.840 8.926 11.947 0.00 0.00 0 +ATOM 96 H2 1 1 14.976 5.712 14.771 0.00 0.00 0 +ATOM 97 H2 1 1 11.824 11.871 -0.007 0.00 0.00 0 +ATOM 98 H2 1 1 11.894 14.840 2.771 0.00 0.00 0 +ATOM 99 H2 1 1 15.039 14.928 0.021 0.00 0.00 0 +ATOM 100 H2 1 1 14.876 11.851 2.910 0.00 0.00 0 +ATOM 101 H2 1 1 11.785 11.934 6.071 0.00 0.00 0 +ATOM 102 H2 1 1 11.937 14.681 8.929 0.00 0.00 0 +ATOM 103 H2 1 1 14.935 14.902 5.873 0.00 0.00 0 +ATOM 104 H2 1 1 14.882 11.944 9.007 0.00 0.00 0 +ATOM 105 H2 1 1 11.941 11.956 11.877 0.00 0.00 0 +ATOM 106 H2 1 1 11.791 14.900 14.955 0.00 0.00 0 +ATOM 107 H2 1 1 14.838 14.947 11.831 0.00 0.00 0 +ATOM 108 H2 1 1 14.891 12.005 15.050 0.00 0.00 0 +END diff --git a/tools/i-pi/examples/tutorial/tutorial-1/our_ref.xyz b/tools/i-pi/examples/tutorial/tutorial-1/our_ref.xyz new file mode 100644 index 000000000..46ecc5b5d --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-1/our_ref.xyz @@ -0,0 +1,110 @@ +108 +# CELL(abcABC): 17.8469984966 17.8469984966 17.8469984966 90.00000 90.00000 90.00000 Traj: positions Step: 0 Bead: 0 +H2 0.147000137166 0.132000079971 0.114000117173 +H2 -0.125000123837 2.94299788633 3.18800164278 +H2 3.04200165055 2.93700230854 0.107000161039 +H2 2.97599737714 -0.147999752916 2.96000035008 +H2 -0.228999850096 -0.0300000085539 5.92297467609 +H2 0.0939998645211 2.99900071046 8.91499553915 +H2 2.95399948052 2.89500151338 5.91000983444 +H2 2.8920010786 -0.155000238227 8.8700154763 +H2 -0.0480000242697 0.0869999083873 11.900983782 +H2 0.0169999766244 2.94699846603 14.9550242141 +H2 2.97899781192 2.98899926119 11.875001181 +H2 2.97599737714 0.114000117173 14.7939955891 +H2 -0.0529997434675 5.85201201223 -0.165000099964 +H2 0.00600002287786 8.85800315363 3.04000136069 +H2 3.04100150562 8.95097958943 -0.0960001543749 +H2 3.00700186988 5.87900004994 2.87599875977 +H2 0.0569997939979 5.91000983444 6.03600692814 +H2 -0.0969997701246 8.8669991662 8.80397416049 +H2 2.83199767476 8.76597923681 5.71897686163 +H2 3.14800113748 5.95599533399 8.96399734879 +H2 0.0309999947276 5.97398735913 11.9319935665 +H2 0.12399997891 8.97198792467 14.7229800075 +H2 2.99800056553 8.86101946373 11.9519964651 +H2 2.97100194428 5.94297757463 14.9140129803 +H2 0.00899998139907 11.7700124225 0.0890001982411 +H2 0.0150000042769 14.9309995688 2.99199969597 +H2 2.92400042449 14.8889828983 0.0619999894552 +H2 2.83199767476 11.9180232882 3.16199787469 +H2 -0.0969997701246 11.8850026303 6.10501163633 +H2 0.169000150494 14.7310235011 8.88901293814 +H2 2.8769989047 14.7500209629 5.92101672041 +H2 3.07800157614 12.0379877617 8.93600387439 +H2 0.0190000018896 12.010999724 11.8850026303 +H2 0.139000036105 14.8480245822 14.8409865253 +H2 2.90399752595 14.8350068229 12.0199957365 +H2 3.08300230078 12.0130105974 14.9420064547 +H2 6.04198663062 0.050999982791 -0.122000218234 +H2 5.91101527114 2.9569999153 2.81099992306 +H2 8.94902163375 3.11100106696 0.0129999790117 +H2 8.9909853865 -0.0100000204905 2.79399745931 +H2 6.06098409246 0.0420000013919 6.018014903 +H2 6.15602431937 3.00200114524 8.7079814146 +H2 8.92198067832 3.0690002718 5.90900439774 +H2 8.98802199413 0.132000079971 9.00601401927 +H2 5.91598953692 0.156999998903 11.9360153133 +H2 6.01097684611 2.8409989791 14.9089857968 +H2 8.97399879806 2.98999940612 11.9060109655 +H2 8.94600532365 -0.011999992838 14.7619803679 +H2 5.87100947407 5.8559808413 -0.118999783453 +H2 6.16401489524 8.84297452087 3.01699802737 +H2 9.19302524528 8.76201040774 0.075999901723 +H2 8.8339785083 5.96499134656 2.83499810954 +H2 5.9870051185 6.00298627024 5.94101961895 +H2 5.97700366923 8.97399879806 8.83900569179 +H2 9.02501148111 8.84599083096 6.02198373208 +H2 8.84800170436 5.69399969732 9.14301799894 +H2 5.92398011279 6.03198518135 11.8649997317 +H2 6.0190203397 8.82699336913 14.8660166074 +H2 8.834983945 9.07602416415 11.9409895791 +H2 8.89102381154 6.03902323824 14.8950155185 +H2 5.8559808413 11.9979819646 0.104999871185 +H2 5.82798736689 14.7829887031 2.90299738102 +H2 8.94198357686 14.8989843475 -0.0420000013919 +H2 8.93002417191 11.9660196611 3.01499773752 +H2 6.07299641512 11.8649997317 5.91202070784 +H2 6.03097974465 14.8909937717 8.97902598156 +H2 8.97198792467 14.8580260315 5.88302179673 +H2 8.95701220962 11.8349953839 8.96701365889 +H2 5.96599678326 11.8819863202 12.0440203819 +H2 5.94699932142 14.7049879824 14.7739926905 +H2 8.87599517877 14.852998848 11.9509910284 +H2 8.9919908232 11.9170178515 14.9289886954 +H2 11.9460167626 0.0880000533142 -0.0279999832887 +H2 11.8290156815 3.08100201092 3.11700193652 +H2 15.0040260237 3.0330003462 -0.00799999522534 +H2 14.8280216837 0.11999992838 3.0289997665 +H2 11.9060109655 0.0169999766244 5.99499569437 +H2 11.8729903076 2.91599926507 9.01601546854 +H2 14.9069749234 3.06199925731 5.96001708079 +H2 14.9479861572 -0.122000218234 8.8639828561 +H2 11.8690214785 -0.118000167703 11.9299826931 +H2 11.9319935665 2.86300216749 14.9789959417 +H2 14.8350068229 2.97599737714 12.0179848631 +H2 14.8519934113 -0.217999843432 14.7829887031 +H2 11.8919877694 5.99002142859 0.0579999389248 +H2 11.8159979221 8.68400968698 2.93600216361 +H2 14.9579876065 8.87599517877 -0.0550000333213 +H2 14.8399810886 6.06098409246 2.91599926507 +H2 11.9109852313 5.97102396676 5.72601491853 +H2 11.9209866806 8.94701076035 8.91499553915 +H2 15.0320194981 8.97198792467 5.83100367699 +H2 14.6990082799 5.88900149921 8.93097669089 +H2 11.764985239 5.84402143636 11.8460022699 +H2 11.9830062496 8.75502526857 14.9330104422 +H2 14.8399810886 8.92600242512 11.9470221993 +H2 14.9759796316 5.71199172246 14.7709763805 +H2 11.823988498 11.8709794342 -0.0070000090516 +H2 11.8939986428 14.8399810886 2.77099941776 +H2 15.0390046373 14.9279832587 0.0209999742371 +H2 14.8760180566 11.8509765357 2.90999839551 +H2 11.7849881376 11.9340044399 6.07098554172 +H2 11.93702075 14.6810162548 8.92901873521 +H2 14.9350213156 14.9020006576 5.87302034746 +H2 14.8819977591 11.9440058892 9.00701945597 +H2 11.9409895791 11.9560182119 11.8770120544 +H2 11.7910207578 14.8999897842 14.9550242141 +H2 14.838023133 14.9469807205 11.8309736371 +H2 14.8909937717 12.0050200215 15.0500115233 diff --git a/tools/i-pi/examples/tutorial/tutorial-1/tutorial-1.xml b/tools/i-pi/examples/tutorial/tutorial-1/tutorial-1.xml new file mode 100755 index 000000000..713953fe4 --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-1/tutorial-1.xml @@ -0,0 +1,26 @@ + + + our_ref.pdb + 25 + + + [step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, kinetic_cv{kelvin}] + [atom_f{piconewton}(atom=0;bead=0)] + positions{angstrom} + + + 5000 + + +
localhost
+ 31415 +
+
+ + + 25 + + 1 + 25 + +
diff --git a/tools/i-pi/examples/tutorial/tutorial-2/tutorial-1_RESTART b/tools/i-pi/examples/tutorial/tutorial-2/tutorial-1_RESTART new file mode 100755 index 000000000..30912ef04 --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-2/tutorial-1_RESTART @@ -0,0 +1,736 @@ + + 5000 + + + [ -1.83955900e+00, -2.24073938e+00, -1.08250020e+00, -5.70795599e-01, 7.32627980e+00, + 7.19210265e+00, -3.30615234e-01, 3.98119438e+00, 1.51691432e+00, 2.52717260e+00, + -1.27666806e+00, 4.73413388e+00, 1.12126184e+00, 1.26764230e+00, 1.02704916e+01, + 1.29998780e+00, 3.73413588e+00, 1.61919862e+01, 5.88202729e+00, 8.04850032e+00, + 1.24311326e+01, 1.02078708e+01, 1.86360455e+00, 1.64012625e+01, 1.17619062e+00, + 4.24983476e-01, 2.55535965e+01, 1.65002846e-01, 5.34507262e+00, 2.73617602e+01, + 6.62641741e+00, 5.73764066e+00, 2.33893339e+01, 6.10026934e+00, 2.56958142e+00, + 2.92780910e+01, 2.01269291e+00, 8.69979574e+00, -6.33324249e-01, 1.14898211e+00, + 1.61301653e+01, 3.70551886e+00, 5.80295868e+00, 1.66782201e+01, 2.75413040e-01, + 5.71194979e+00, 1.32139518e+01, 7.47120998e+00, 2.90527832e+00, 1.26243247e+01, + 1.18688316e+01, 3.86777222e-01, 1.86473408e+01, 1.66542003e+01, 6.49634508e+00, + 1.76520477e+01, 1.52792529e+01, 9.56145353e+00, 1.16514109e+01, 1.76464481e+01, + 7.90247690e-01, 1.28040514e+01, 1.99445660e+01, 1.91319083e+00, 1.48232256e+01, + 2.81978021e+01, 7.47808952e+00, 1.73026463e+01, 2.15060634e+01, 7.95108626e+00, + 9.08836417e+00, 2.88452581e+01, -8.39364894e-01, 2.33095835e+01, -1.26661254e+00, + -2.26048825e+00, 2.73659085e+01, 6.83034984e+00, 5.55328952e+00, 3.00964760e+01, + -2.13570013e+00, 3.85462300e+00, 2.11139559e+01, 6.98601751e+00, -1.69779185e+00, + 2.02798593e+01, 8.98144417e+00, -1.83724239e+00, 2.74015435e+01, 1.70384301e+01, + 5.49534087e+00, 2.92028322e+01, 1.28972834e+01, 4.00538016e+00, 2.38450279e+01, + 1.73369977e+01, 6.37702010e-01, 2.23536671e+01, 2.24315602e+01, -9.17792114e-01, + 2.76922986e+01, 2.71486460e+01, 4.59352860e+00, 2.73738615e+01, 2.47996576e+01, + 3.50789080e+00, 2.24217692e+01, 2.85214338e+01, 1.27744386e+01, -3.16474409e+00, + -4.32938118e+00, 1.23369331e+01, 5.19778303e+00, 6.29834102e+00, 1.65171169e+01, + 7.43433654e+00, -1.50763053e-01, 1.71757563e+01, 8.73504480e-02, 2.91427460e+00, + 1.37000162e+01, 3.58863547e-01, 1.16430675e+01, 1.33468414e+01, 7.88277760e+00, + 1.35602855e+01, 1.85311481e+01, 6.66308247e+00, 1.10802627e+01, 1.62994052e+01, + 1.15789465e+00, 1.73181503e+01, 9.33358989e+00, 3.82104623e-01, 2.45811794e+01, + 1.33131712e+01, 5.68071890e+00, 2.77946720e+01, 1.29013165e+01, 7.27837218e+00, + 2.09147450e+01, 1.84799695e+01, -1.43953367e+00, 2.88271546e+01, 1.06297113e+01, + 1.06874159e+01, 1.80009217e+00, 9.88791886e+00, 1.74750501e+01, 5.38215565e+00, + 1.75814278e+01, 1.64927163e+01, -7.22490057e-01, 1.59410372e+01, 1.21327342e+01, + 5.31684038e+00, 1.07398656e+01, 1.27687533e+01, 1.11831750e+01, 1.30396209e+01, + 1.78543512e+01, 1.53781269e+01, 1.74549497e+01, 1.69593034e+01, 1.25392544e+01, + 1.91056959e+01, 1.02634068e+01, 1.58723572e+01, 1.01017169e+01, 1.15340755e+01, + 2.42047249e+01, 8.82103648e+00, 1.74196163e+01, 2.71575865e+01, 1.42717489e+01, + 1.61565324e+01, 2.20042138e+01, 1.46526399e+01, 1.22238423e+01, 2.82739099e+01, + 1.32115234e+01, 2.28595316e+01, -3.43176969e-01, 9.94990444e+00, 3.15261979e+01, + 7.17743425e+00, 1.79725272e+01, 2.66047961e+01, -1.03202183e-01, 1.46786234e+01, + 2.03983934e+01, 6.75355215e+00, 1.21898998e+01, 2.68300650e+01, 1.28501206e+01, + 9.52256604e+00, 2.96146284e+01, 1.79253244e+01, 1.48734446e+01, 2.75889170e+01, + 7.84459536e+00, 2.04254604e+01, 2.29273727e+01, 1.86587003e+01, 1.36039471e+01, + 2.34500168e+01, 1.76328865e+01, 1.06667576e+01, 2.40841230e+01, 2.49370928e+01, + 1.38349803e+01, 3.01788493e+01, 2.19453967e+01, 1.96844070e+01, 2.17383789e+01, + 2.79207277e+01, 2.40109880e+01, 2.44652621e+00, 7.71232732e-01, 2.28150210e+01, + 4.44993033e+00, 6.32217106e+00, 2.86959872e+01, 6.16770811e+00, 2.54155030e+00, + 2.86295708e+01, 6.58513110e-01, 7.07847686e+00, 1.91416715e+01, 8.42657055e-01, + 1.09318699e+01, 2.21629487e+01, 3.26372053e+00, 1.85487891e+01, 2.42299255e+01, + 3.53057281e+00, 1.21895915e+01, 3.07759304e+01, 5.87270948e-01, 1.54581789e+01, + 2.21462069e+01, -3.29544187e+00, 2.17376848e+01, 2.08019829e+01, 5.74042948e+00, + 2.91126306e+01, 2.82616387e+01, 4.12726443e+00, 2.38117939e+01, 2.48604110e+01, + -9.81005677e-02, 2.75017597e+01, 2.19769526e+01, 9.55679072e+00, -3.48501195e-01, + 2.15122044e+01, 1.35659683e+01, 4.45218017e+00, 2.70106862e+01, 1.84178475e+01, + 2.90258066e+00, 3.09038945e+01, 1.13784966e+01, 3.97619446e+00, 2.33776271e+01, + 1.09744756e+01, 9.48584489e+00, 2.30108491e+01, 1.65710971e+01, 1.59074187e+01, + 2.90437432e+01, 1.63990319e+01, 1.41164353e+01, 3.03675824e+01, 9.36100919e+00, + 1.59902897e+01, 2.19588417e+01, 9.65547975e+00, 2.31178969e+01, 2.07325650e+01, + 1.43025889e+01, 2.85076354e+01, 2.79531009e+01, 1.40545290e+01, 1.99579811e+01, + 2.86838426e+01, 1.23353706e+01, 2.65845766e+01, 2.36116501e+01, 2.56191152e+01, + 5.93663687e+00, 2.14810798e+01, 3.18962824e+01, 6.43104769e+00, 2.61566331e+01, + 3.11398548e+01, 2.04112055e+00, 2.78161522e+01, 2.39026490e+01, 3.29230633e+00, + 2.35872061e+01, 1.92586393e+01, 9.42997765e+00, 2.18868541e+01, 2.93005866e+01, + 1.56731672e+01, 2.57892309e+01, 3.08659127e+01, 1.04565213e+01, 2.89111102e+01, + 2.23973168e+01, 1.41543879e+01, 2.40352391e+01, 1.89355855e+01, 2.26713139e+01, + 2.60883570e+01, 2.53551683e+01, 3.10959184e+01, 2.56617570e+01, 2.53873006e+01, + 2.02938950e+01, 2.87914567e+01, 1.97522769e+01, 2.78202344e+01, -1.76425983e+00, + -1.53558560e+00, -1.71338801e+00, -9.78599968e-01, 6.87902421e+00, 7.88543588e+00, + 5.47881861e-01, 3.64324940e+00, 1.39468482e+00, 3.60000249e+00, -9.28967610e-01, + 4.01716866e+00, 2.42995414e+00, 1.05628735e+00, 1.03627265e+01, 9.20694754e-01, + 4.29683694e+00, 1.64579850e+01, 6.19121450e+00, 7.68893688e+00, 1.23304998e+01, + 9.82833523e+00, 1.54814143e+00, 1.71545209e+01, 6.99417618e-01, 8.54622163e-02, + 2.48873966e+01, -3.11309329e-01, 6.97214120e+00, 2.66220741e+01, 5.25625287e+00, + 7.68138067e+00, 2.39284370e+01, 6.25528626e+00, 3.07873577e+00, 3.00882100e+01, + 1.15270468e+00, 8.88014098e+00, 3.00512398e-01, 9.30446242e-01, 1.71408264e+01, + 3.50661823e+00, 5.83759203e+00, 1.72729331e+01, 3.34582087e-01, 5.40503488e+00, + 1.24459036e+01, 5.56073866e+00, 1.21588195e+00, 1.31551680e+01, 1.27378351e+01, + -4.66813441e-01, 1.87703376e+01, 1.69486235e+01, 6.75076580e+00, 1.83449120e+01, + 1.48488718e+01, 9.47340998e+00, 1.17932793e+01, 1.67868142e+01, 6.10952151e-01, + 1.27008444e+01, 2.15901214e+01, 1.76087373e+00, 1.40248834e+01, 2.78953850e+01, + 6.51618548e+00, 1.72532108e+01, 2.04694567e+01, 7.36556309e+00, 9.99912211e+00, + 2.91964532e+01, -7.06531579e-01, 2.27219694e+01, -1.31954187e+00, -1.54612461e+00, + 2.75038363e+01, 6.70572831e+00, 5.21401215e+00, 2.84508378e+01, -1.38701455e+00, + 5.24874266e+00, 2.15644003e+01, 8.28914156e+00, -2.21199280e+00, 2.06411930e+01, + 9.08490967e+00, -3.69161804e-01, 2.79213183e+01, 1.67707124e+01, 5.77258212e+00, + 2.95534123e+01, 1.29379476e+01, 5.27372097e+00, 2.29618317e+01, 1.82846335e+01, + 5.50365226e-01, 2.32915342e+01, 2.26003508e+01, -3.23975407e-01, 2.71026192e+01, + 2.69864390e+01, 5.25571146e+00, 2.84281121e+01, 2.43362803e+01, 4.19783582e+00, + 2.23458941e+01, 2.89351055e+01, 1.30027038e+01, -2.89260409e+00, -3.32667625e+00, + 1.24700611e+01, 5.45576814e+00, 6.79907186e+00, 1.69263149e+01, 5.70732090e+00, + 1.52975089e-01, 1.72152577e+01, -5.86473536e-01, 2.60910235e+00, 1.39562777e+01, + 1.10496755e+00, 9.89893108e+00, 1.27550907e+01, 6.50405608e+00, 1.44860215e+01, + 1.84418079e+01, 6.98755864e+00, 1.14378627e+01, 1.73685838e+01, 1.03634629e+00, + 1.72542968e+01, 9.36166090e+00, 1.26996989e+00, 2.48970836e+01, 1.35415180e+01, + 4.84360499e+00, 2.82597230e+01, 1.28859648e+01, 7.62646315e+00, 2.08202186e+01, + 1.82323636e+01, -1.58242560e+00, 2.82645654e+01, 9.67026415e+00, 9.99521608e+00, + 1.48323928e+00, 1.06202054e+01, 1.74410916e+01, 5.30476845e+00, 1.68915394e+01, + 1.66028258e+01, -3.98602304e-01, 1.52286166e+01, 1.15951307e+01, 4.88875152e+00, + 1.16320855e+01, 1.18462368e+01, 1.17721604e+01, 1.30800856e+01, 1.72687237e+01, + 1.52362824e+01, 1.86182764e+01, 1.72413013e+01, 1.32638271e+01, 1.90927913e+01, + 1.01652528e+01, 1.60527418e+01, 9.59785151e+00, 1.16306603e+01, 2.32521891e+01, + 1.02733588e+01, 1.86418357e+01, 2.65319699e+01, 1.48920616e+01, 1.69296308e+01, + 2.24345192e+01, 1.44781142e+01, 1.16768928e+01, 2.87742833e+01, 1.26440243e+01, + 2.31651077e+01, 1.09153308e+00, 9.32620240e+00, 3.18068970e+01, 5.91156305e+00, + 1.82338682e+01, 2.68163992e+01, -6.10171355e-01, 1.56193643e+01, 1.99596118e+01, + 8.12957661e+00, 1.34391603e+01, 2.79448176e+01, 1.21148599e+01, 9.90095353e+00, + 2.95224900e+01, 1.88551608e+01, 1.63687321e+01, 2.81729033e+01, 7.75414361e+00, + 2.11290647e+01, 2.30983265e+01, 1.80818117e+01, 1.22179830e+01, 2.36227246e+01, + 1.85352948e+01, 1.00736995e+01, 2.52569655e+01, 2.39704097e+01, 1.44179838e+01, + 2.90993728e+01, 2.15195489e+01, 1.95569595e+01, 2.20162082e+01, 2.86888343e+01, + 2.38790793e+01, 1.81853851e+00, -8.62424353e-01, 2.30087081e+01, 3.67168316e+00, + 5.79906646e+00, 2.86237895e+01, 5.77923269e+00, 1.82976727e+00, 2.97992364e+01, + -2.44824247e-01, 6.97483848e+00, 1.97479547e+01, 1.28907671e+00, 1.06238401e+01, + 2.22988651e+01, 3.36189040e+00, 1.99142865e+01, 2.56182622e+01, 4.87467917e+00, + 1.16104104e+01, 3.01052148e+01, -1.89720612e-01, 1.52853202e+01, 2.30601562e+01, + -3.37897609e+00, 2.20210883e+01, 2.21023714e+01, 7.37999253e+00, 2.99827770e+01, + 2.83970918e+01, 5.06217176e+00, 2.39324034e+01, 2.36552267e+01, 3.97689851e-01, + 2.70250248e+01, 2.32913517e+01, 1.10207360e+01, 7.64503581e-01, 2.00178673e+01, + 1.37487336e+01, 4.25542754e+00, 2.60455321e+01, 1.69122386e+01, 2.31534587e+00, + 3.04356904e+01, 1.25406626e+01, 5.17675092e+00, 2.38621411e+01, 1.14515762e+01, + 9.75443924e+00, 2.25731071e+01, 1.62345346e+01, 1.68317268e+01, 2.84171490e+01, + 1.69913568e+01, 1.42827468e+01, 2.97526886e+01, 9.31307649e+00, 1.67785293e+01, + 2.17762297e+01, 8.96916957e+00, 2.19718340e+01, 2.22594418e+01, 1.33823144e+01, + 2.81207945e+01, 2.77005814e+01, 1.50622075e+01, 2.05455699e+01, 2.92151641e+01, + 1.30044976e+01, 2.67938258e+01, 2.17064822e+01, 2.45224793e+01, 5.39644288e+00, + 2.09907797e+01, 3.13381910e+01, 6.65786528e+00, 2.44267241e+01, 2.96324924e+01, + 1.59248807e+00, 2.81352950e+01, 2.52179231e+01, 3.21255854e+00, 2.29984530e+01, + 1.94459863e+01, 9.90712637e+00, 1.95242101e+01, 2.89090489e+01, 1.59338674e+01, + 2.54944440e+01, 3.14856070e+01, 1.10580434e+01, 2.91399127e+01, 2.38737698e+01, + 1.47156065e+01, 2.36566327e+01, 1.94718712e+01, 2.27327251e+01, 2.67255132e+01, + 2.57714727e+01, 3.15584870e+01, 2.55546714e+01, 2.55331520e+01, 2.06608588e+01, + 2.85241759e+01, 1.96187079e+01, 2.95686729e+01, -1.28506833e+00, -1.19627373e+00, + -1.11505578e+00, -1.26613495e+00, 6.87769487e+00, 8.86664224e+00, 3.22672767e-01, + 3.60048900e+00, 1.75198909e+00, 3.39985912e+00, -5.38113592e-01, 4.40630180e+00, + 2.05527629e+00, 1.04780310e+00, 1.09245524e+01, 1.64433825e+00, 5.07925261e+00, + 1.66693862e+01, 6.34528032e+00, 6.84652464e+00, 1.30553942e+01, 9.19503930e+00, + 1.02559973e+00, 1.64900202e+01, 1.50883393e+00, 1.94153184e-01, 2.60419984e+01, + 2.23637168e-01, 5.88126235e+00, 2.68151686e+01, 6.09330009e+00, 6.41359349e+00, + 2.27265508e+01, 5.20417493e+00, 3.02351860e+00, 2.90727542e+01, 5.22759441e-01, + 9.07723226e+00, 3.74357289e-01, 5.28407017e-01, 1.77876299e+01, 3.40818122e+00, + 4.77500246e+00, 1.61051931e+01, -7.15798597e-01, 5.35494411e+00, 1.24396028e+01, + 5.26132317e+00, 3.65101881e+00, 1.45180281e+01, 1.20044556e+01, 6.47702685e-01, + 1.89647984e+01, 1.63575659e+01, 6.85886982e+00, 1.86666656e+01, 1.39918716e+01, + 9.63134562e+00, 1.21489398e+01, 1.79744053e+01, -4.65149892e-02, 1.28820467e+01, + 2.20848030e+01, 5.38141652e-01, 1.49773108e+01, 2.86234466e+01, 6.69460622e+00, + 1.70430908e+01, 2.03293501e+01, 7.46084699e+00, 9.27068140e+00, 2.87672652e+01, + -1.77446797e+00, 2.31007533e+01, -1.61541146e+00, -1.44197270e+00, 2.59669452e+01, + 7.05366958e+00, 6.78973516e+00, 2.82048010e+01, -6.81707442e-01, 4.11224811e+00, + 2.33230735e+01, 7.64143788e+00, -1.30932484e+00, 2.00341346e+01, 8.43186122e+00, + -3.23227570e-01, 2.88456685e+01, 1.71869485e+01, 5.59484664e+00, 2.86861878e+01, + 1.38255153e+01, 5.39986151e+00, 2.26670663e+01, 1.74856853e+01, 1.31353338e+00, + 2.27240963e+01, 2.26573999e+01, -6.43284767e-01, 2.75545414e+01, 2.65487243e+01, + 6.36781664e+00, 2.89591698e+01, 2.55204798e+01, 4.19690392e+00, 2.20492684e+01, + 2.90086623e+01, 1.29407803e+01, -3.28971533e+00, -3.59953707e+00, 1.30308691e+01, + 4.52526975e+00, 6.05334642e+00, 1.80200038e+01, 6.86934432e+00, -6.64799107e-01, + 1.77004927e+01, -1.08469207e+00, 2.66573197e+00, 1.33883962e+01, 1.77878946e+00, + 1.01478623e+01, 1.28332615e+01, 7.20488713e+00, 1.30030127e+01, 1.82890722e+01, + 5.45538575e+00, 1.26731818e+01, 1.64372459e+01, 1.13264799e+00, 1.68270761e+01, + 9.29480506e+00, 8.02789471e-01, 2.50004864e+01, 1.30397241e+01, 4.25942991e+00, + 2.82105770e+01, 1.34839369e+01, 6.59877473e+00, 1.96748658e+01, 1.90248344e+01, + -7.34844927e-01, 2.61879859e+01, 1.06994814e+01, 1.04221404e+01, 1.19626201e+00, + 9.75063627e+00, 1.82675328e+01, 4.79479047e+00, 1.67169178e+01, 1.67708791e+01, + -3.25796174e-01, 1.58140826e+01, 1.07514402e+01, 4.16021066e+00, 1.14190484e+01, + 1.20130431e+01, 1.10359921e+01, 1.23286945e+01, 1.73093633e+01, 1.60093426e+01, + 1.72472089e+01, 1.71555986e+01, 1.29595403e+01, 1.96515771e+01, 1.07779852e+01, + 1.55906451e+01, 1.04066011e+01, 1.06852174e+01, 2.41637389e+01, 9.33300851e+00, + 1.72769290e+01, 2.72366205e+01, 1.43344594e+01, 1.55444449e+01, 2.25613745e+01, + 1.54876710e+01, 1.23994150e+01, 2.77630051e+01, 1.24465157e+01, 2.22953455e+01, + 7.07224538e-01, 9.17225571e+00, 3.04541888e+01, 7.00444346e+00, 1.90451094e+01, + 2.68206460e+01, 2.12443190e-01, 1.40421608e+01, 2.16604155e+01, 8.76748146e+00, + 1.18599685e+01, 2.63467340e+01, 1.24514910e+01, 9.07508597e+00, 2.94452971e+01, + 1.81138604e+01, 1.65350863e+01, 2.76724408e+01, 8.10094240e+00, 2.03902238e+01, + 2.19891729e+01, 1.81613540e+01, 1.28241365e+01, 2.30836693e+01, 1.77077396e+01, + 1.07839643e+01, 2.43167076e+01, 2.35379387e+01, 1.43368823e+01, 2.99960368e+01, + 2.18020500e+01, 1.98836259e+01, 2.10543368e+01, 2.77564511e+01, 2.38873187e+01, + 2.63596088e+00, -8.45710736e-01, 2.26031998e+01, 4.94875239e+00, 6.06483058e+00, + 2.72420930e+01, 7.16044030e+00, 2.03664724e+00, 2.83819926e+01, 1.41474271e+00, + 6.86956553e+00, 1.90297274e+01, 2.08547446e-01, 1.17356589e+01, 2.20093707e+01, + 3.11015561e+00, 1.84015708e+01, 2.55258414e+01, 4.51413195e+00, 1.15060640e+01, + 3.04420577e+01, 2.05350822e-01, 1.59037463e+01, 2.20766378e+01, -3.08680082e+00, + 2.27928539e+01, 2.19423049e+01, 6.96063455e+00, 2.93175572e+01, 2.63580580e+01, + 4.17130592e+00, 2.37215427e+01, 2.48207538e+01, -1.10022388e+00, 2.72061284e+01, + 2.27735841e+01, 1.10983539e+01, 5.03790539e-01, 2.05447311e+01, 1.35069355e+01, + 4.99617490e+00, 2.74249691e+01, 1.74389534e+01, 2.12313453e+00, 3.09387285e+01, + 1.30390672e+01, 4.56728163e+00, 2.49467870e+01, 1.09552706e+01, 1.05134177e+01, + 2.26330821e+01, 1.67053853e+01, 1.63758180e+01, 2.83218004e+01, 1.73740024e+01, + 1.40724154e+01, 3.02682616e+01, 8.35484609e+00, 1.66575388e+01, 2.13501708e+01, + 1.01994161e+01, 2.34754835e+01, 2.17794008e+01, 1.46632688e+01, 2.78344546e+01, + 2.68554005e+01, 1.40368100e+01, 2.04864069e+01, 2.79509647e+01, 1.19193324e+01, + 2.79392613e+01, 2.26582097e+01, 2.45440331e+01, 6.30616900e+00, 2.13859764e+01, + 3.08849664e+01, 6.44869190e+00, 2.64928749e+01, 3.02400532e+01, 8.32685758e-01, + 2.74640627e+01, 2.40967712e+01, 3.18770838e+00, 2.27412709e+01, 1.85562433e+01, + 9.23151490e+00, 2.03983609e+01, 2.91681800e+01, 1.56979455e+01, 2.51695730e+01, + 3.07717754e+01, 1.06821424e+01, 2.92168363e+01, 2.36456995e+01, 1.45948324e+01, + 2.33527556e+01, 1.93047064e+01, 2.37746530e+01, 2.48248533e+01, 2.61599136e+01, + 3.04541638e+01, 2.58041186e+01, 2.56474296e+01, 2.02610796e+01, 2.85417157e+01, + 1.88972442e+01, 2.98568715e+01, -2.38586496e+00, -7.58828968e-01, -1.63156635e+00, + -1.24260140e-01, 7.66170676e+00, 8.26519210e+00, 8.18582687e-01, 3.21215177e+00, + 8.71469426e-01, 3.32445560e+00, -1.32118548e+00, 3.91101312e+00, 2.32046567e+00, + 1.58370834e+00, 1.07292588e+01, 1.33792245e+00, 4.76690685e+00, 1.57155304e+01, + 5.60070334e+00, 7.35450929e+00, 1.13291649e+01, 9.38118665e+00, 1.32457406e+00, + 1.64112640e+01, 2.06694803e+00, -1.08774960e-01, 2.51995098e+01, 5.83962037e-01, + 6.14184963e+00, 2.60031487e+01, 7.65609079e+00, 5.60778423e+00, 2.29300579e+01, + 5.77114858e+00, 2.13679298e+00, 2.93327862e+01, 2.19806103e+00, 9.68222590e+00, + 1.57880111e+00, 3.14284164e-01, 1.73107320e+01, 3.17317841e+00, 5.31032205e+00, + 1.67722718e+01, -3.21992890e-01, 4.86044703e+00, 1.46302272e+01, 6.21744347e+00, + 3.23194778e+00, 1.36053502e+01, 1.20906550e+01, 1.05401318e+00, 1.89924170e+01, + 1.86500989e+01, 7.28920551e+00, 1.90214147e+01, 1.48608421e+01, 8.94579137e+00, + 1.17939437e+01, 1.76451822e+01, -2.16292241e-01, 1.27470176e+01, 2.10170183e+01, + 1.86340865e+00, 1.43620945e+01, 2.88854080e+01, 7.51715045e+00, 1.76892134e+01, + 2.12086589e+01, 7.40953137e+00, 8.90283609e+00, 2.82643224e+01, -1.81615954e+00, + 2.35425566e+01, -6.35391065e-01, -1.81429720e+00, 2.64341698e+01, 6.21091555e+00, + 5.43254354e+00, 2.75836921e+01, -9.47958758e-01, 4.71567619e+00, 2.21052659e+01, + 7.88771418e+00, -1.66841626e+00, 2.04914383e+01, 8.26675658e+00, -4.59229759e-01, + 2.71579580e+01, 1.68410204e+01, 5.00100432e+00, 2.90662447e+01, 1.29214242e+01, + 4.69089603e+00, 2.34759714e+01, 1.67656282e+01, 6.53854823e-01, 2.38352952e+01, + 2.17931036e+01, -1.01639060e+00, 2.72103570e+01, 2.59664262e+01, 4.89596274e+00, + 2.77674695e+01, 2.47617265e+01, 3.70839276e+00, 2.19495406e+01, 2.77068507e+01, + 1.33883490e+01, -2.96774368e+00, -3.88662826e+00, 1.21540528e+01, 4.88520987e+00, + 6.46250715e+00, 1.58502434e+01, 7.52061809e+00, -5.94010768e-01, 1.80041063e+01, + -1.45785510e+00, 1.90361473e+00, 1.37682126e+01, 1.01096461e+00, 1.05140180e+01, + 1.32426632e+01, 7.30651107e+00, 1.44595448e+01, 1.87287975e+01, 5.98649586e+00, + 1.22746034e+01, 1.63100152e+01, 1.15741871e+00, 1.66981121e+01, 9.12913654e+00, + -2.92667679e-01, 2.45886138e+01, 1.33050334e+01, 3.97377478e+00, 2.69467178e+01, + 1.42080442e+01, 6.64595078e+00, 2.01191284e+01, 1.86015542e+01, -1.75336417e+00, + 2.83471787e+01, 1.08620615e+01, 1.11988186e+01, 1.95253365e+00, 9.45047887e+00, + 1.75938537e+01, 4.23821913e+00, 1.70208034e+01, 1.60108143e+01, -1.22190668e+00, + 1.50766040e+01, 1.12165304e+01, 5.43990155e+00, 1.09933699e+01, 1.22850779e+01, + 1.16546326e+01, 1.23781385e+01, 1.80369686e+01, 1.53125056e+01, 1.73516609e+01, + 1.75785987e+01, 1.18313796e+01, 1.94046667e+01, 1.10166421e+01, 1.62979612e+01, + 9.66207941e+00, 1.08458701e+01, 2.37048314e+01, 8.44004940e+00, 1.70203943e+01, + 2.65757559e+01, 1.43027170e+01, 1.63790927e+01, 2.18182624e+01, 1.38144113e+01, + 1.12481654e+01, 2.87113704e+01, 1.23513270e+01, 2.18980717e+01, 5.17961694e-01, + 9.82158593e+00, 3.06003668e+01, 6.40959927e+00, 1.97382355e+01, 2.64666452e+01, + -2.56886470e-01, 1.51138569e+01, 2.14756928e+01, 7.69843726e+00, 1.13280462e+01, + 2.53724470e+01, 1.17891597e+01, 9.16645548e+00, 2.85470480e+01, 1.83229821e+01, + 1.60641629e+01, 2.74309208e+01, 8.14336993e+00, 2.00104262e+01, 2.16691335e+01, + 1.90509791e+01, 1.35353858e+01, 2.30944654e+01, 1.79157296e+01, 1.01235942e+01, + 2.45385866e+01, 2.35448360e+01, 1.40749201e+01, 3.01972078e+01, 2.17768651e+01, + 2.03786050e+01, 2.10805498e+01, 2.76935947e+01, 2.44615615e+01, 3.05749628e+00, + 4.07414296e-01, 2.16336438e+01, 4.40657970e+00, 5.21060398e+00, 2.88299726e+01, + 7.01128437e+00, 8.79026008e-01, 2.85241186e+01, 3.14915946e-01, 7.07809470e+00, + 1.98625917e+01, 4.50200492e-03, 1.15863909e+01, 2.29376845e+01, 2.50348240e+00, + 1.86113050e+01, 2.47645618e+01, 3.74984924e+00, 1.16835156e+01, 3.00116656e+01, + 1.33610084e+00, 1.54039934e+01, 2.16664404e+01, -3.77318264e+00, 2.24073626e+01, + 2.17213138e+01, 6.32154759e+00, 2.91289015e+01, 2.80778040e+01, 4.04768899e+00, + 2.51637272e+01, 2.49482621e+01, -1.80258150e+00, 2.77649841e+01, 2.28639670e+01, + 9.52095023e+00, 1.12320744e+00, 2.11060298e+01, 1.35966775e+01, 4.52804356e+00, + 2.65933190e+01, 1.74870802e+01, 3.12917456e+00, 3.12581554e+01, 1.26369216e+01, + 4.24969839e+00, 2.28577555e+01, 1.09623135e+01, 9.61329928e+00, 2.31292240e+01, + 1.68635673e+01, 1.59562582e+01, 2.83134554e+01, 1.65993286e+01, 1.34061062e+01, + 3.07651009e+01, 8.60937322e+00, 1.58164516e+01, 2.15713342e+01, 9.77426434e+00, + 2.38239983e+01, 2.07170028e+01, 1.44272471e+01, 2.72915473e+01, 2.78094878e+01, + 1.46067375e+01, 2.02374654e+01, 2.83102299e+01, 1.21902457e+01, 2.73283465e+01, + 2.25040436e+01, 2.40201181e+01, 7.24105767e+00, 2.16659528e+01, 3.22281603e+01, + 6.56727556e+00, 2.67438472e+01, 3.14254999e+01, 1.00941523e+00, 2.72477648e+01, + 2.43062679e+01, 3.91537815e+00, 2.28206020e+01, 1.90617248e+01, 9.50661026e+00, + 1.95693791e+01, 2.99400820e+01, 1.67827219e+01, 2.52432494e+01, 3.09283864e+01, + 1.18433291e+01, 3.02997758e+01, 2.26469178e+01, 1.40818435e+01, 2.52061280e+01, + 1.93512323e+01, 2.29021542e+01, 2.65208970e+01, 2.53952117e+01, 3.08512322e+01, + 2.76076800e+01, 2.54724293e+01, 1.95719692e+01, 2.94254771e+01, 1.94406409e+01, + 2.73992646e+01 ] + +

+ [ 1.40372994e-01, -1.70336384e+00, 6.37303020e-01, -3.60483257e-01, -1.10940109e+00, + 3.74869623e-01, -3.25735029e-01, 7.75472220e-01, 1.10757231e+00, -2.40493336e+00, + -1.53716651e+00, 1.37041429e+00, 5.28228491e-01, 1.38616874e+00, -1.38581237e+00, + -3.77690596e-01, 2.35773187e-01, 1.37036828e+00, 1.74363360e+00, 1.46668252e+00, + 9.19554977e-01, 1.46604384e+00, 7.17395153e-01, 1.16766357e+00, 5.74213643e-01, + 1.73367931e-01, -1.66161161e+00, 2.33212598e+00, -9.77285003e-01, 2.41575083e-01, + -1.49585940e-01, -1.18522916e+00, 1.58553462e-01, -1.47168505e+00, -1.24387557e+00, + 7.68483391e-01, -1.56677579e+00, 8.39149463e-01, -7.60108832e-01, -1.39563512e-01, + 1.23618455e+00, -3.39699359e-01, -9.88358452e-01, -1.25161119e+00, 5.75688958e-01, + 3.34908289e-02, -1.57137545e+00, 9.54873978e-01, 2.21048523e-01, 3.15471131e+00, + 4.38424417e-01, -1.41296551e+00, -6.15293784e-01, 4.54568031e-01, 5.25912190e-01, + 1.10462750e+00, -7.33687512e-01, 3.51836732e-01, 1.11696908e+00, -1.75519514e-01, + -9.87401261e-01, -1.00224818e+00, -2.06257599e+00, -8.69995365e-02, 1.96237139e-01, + -1.55878661e+00, 2.06187113e+00, 5.21020731e-03, 2.35617406e-01, 1.59018004e+00, + 1.23310143e+00, -9.06287741e-01, 1.02772014e+00, -4.13278400e-01, -9.73895321e-01, + 1.26420822e+00, -6.00372594e-02, -8.86889397e-01, -1.35877237e+00, 1.26542138e-01, + -1.96996606e+00, 1.16602982e+00, -1.87715811e+00, -1.07989580e+00, 1.52684255e-01, + 2.69202324e+00, -7.86764932e-01, -1.26792145e+00, -2.15985504e-01, 2.83847115e-01, + -3.90074815e-02, -3.21827572e-01, 8.60927158e-01, 1.15174374e+00, -1.06395947e+00, + 6.56206723e-01, 1.71687653e+00, 1.88094551e+00, -1.41246651e-01, 6.67235507e-01, + 8.02729512e-01, -5.99750938e-01, 3.86175582e-01, 1.56674025e+00, 1.16770355e-01, + -1.25058894e-01, -6.64317179e-01, -1.90732529e+00, -3.49443824e-01, -1.75313244e+00, + -8.93802373e-01, -8.38911513e-02, -3.54765784e+00, 3.29189169e-01, -1.59470714e+00, + 2.28214169e-01, -2.04640475e+00, -1.21363021e+00, 4.43956386e-01, 1.98553407e+00, + -6.41921427e-01, 8.31610867e-01, 2.37729074e-01, -1.96307860e+00, 5.83519443e-01, + -9.23373803e-01, -2.72733993e-01, -6.80313749e-01, -4.21629881e-01, 8.24112349e-02, + -2.02945940e-02, 4.70239760e-02, -8.87189426e-01, 2.62362546e-01, 2.90567277e-03, + -5.77088646e-01, 8.63734028e-01, 2.12881273e-01, -1.84398318e+00, -1.27537888e+00, + -8.96390165e-01, 8.67723220e-01, -7.13233254e-01, 9.98467053e-01, 1.20471615e+00, + 3.80364988e-02, -3.86066496e-01, 2.80482433e-01, -5.55953973e-01, 6.99483364e-01, + -6.20862722e-01, -5.75941665e-01, -1.01810316e+00, 6.59129210e-01, 3.36528627e-01, + 1.19657571e+00, 1.16325245e+00, 1.38231876e+00, -1.62296272e+00, 7.73325492e-01, + 9.07953738e-01, -1.56020700e+00, 5.91276288e-01, -1.45072710e+00, 3.06498507e-01, + 1.02001412e+00, -7.79180574e-01, -1.09202701e+00, 8.60608247e-01, -8.12517020e-01, + -3.29732754e-01, 7.95824769e-02, -3.53180396e-01, -6.92843090e-01, 8.08287670e-01, + -1.31368002e+00, 8.92275005e-01, 7.74460553e-01, -4.16315357e-01, 4.13327475e-01, + 2.07077192e-01, -2.18589769e+00, -1.02281048e-01, 9.09167509e-02, -1.46835347e+00, + 1.23256338e+00, -3.07250057e-01, 2.46249432e-01, 7.74791555e-01, 3.98298680e-01, + -5.39569195e-02, 4.73911005e-01, 1.79978269e+00, 6.49413046e-01, 1.44049305e+00, + -7.54136523e-01, 6.85251391e-01, -1.03401786e+00, -1.07121945e+00, 1.15101429e+00, + -6.78252322e-01, 3.66963136e-02, -1.11945652e-01, -4.17808375e-01, 9.68133746e-02, + 1.99069757e+00, 1.55013114e+00, -1.92882805e-02, 1.33795454e+00, 7.39452603e-01, + 3.77633950e-01, 1.81163711e+00, 2.58943819e+00, 1.29562203e+00, -1.48713547e+00, + -9.55424888e-01, 3.46515063e-01, 4.16880974e-01, -1.14430760e+00, -5.41540342e-01, + 1.15617781e+00, -8.15311978e-01, -1.24131679e-01, -1.01785991e+00, -6.82587363e-01, + 1.34485087e+00, 3.95295976e-01, 3.61637052e-01, -4.79290805e-01, 1.96407902e-02, + -6.96427808e-01, 9.65717585e-01, 4.63130635e-01, -4.12348950e-02, -6.14114134e-02, + 3.76909298e-01, 1.31464930e-01, -1.96943568e+00, -2.07138054e+00, 1.07506895e+00, + -8.47693792e-02, 1.50838082e+00, 9.66357898e-01, 3.29832625e-02, 2.53592195e+00, + -8.44613584e-01, -1.75528218e-01, -1.51432281e+00, -1.30241164e+00, -2.07575407e-01, + -1.04844306e+00, -1.28575451e+00, 4.62727941e-01, 1.46590141e+00, -2.63004766e-01, + -1.01898113e+00, -1.37875255e+00, -9.12918530e-01, 1.71033710e+00, 1.02893180e+00, + -1.32634968e+00, 8.82495711e-02, -9.11997611e-01, -2.42094019e+00, -6.29467944e-01, + 8.08788619e-01, 1.94804910e+00, -8.72566500e-01, 9.20033720e-01, -1.72884793e+00, + 3.44191186e-01, 1.21733557e+00, 1.87515471e-01, 5.10808988e-02, 7.94329477e-01, + -3.52316495e-01, -1.00945167e+00, 7.35146276e-01, 1.07654301e+00, 1.04930155e+00, + -1.85826022e+00, -5.07927804e-01, -9.80771494e-01, -3.21767737e+00, -1.49676613e-01, + -2.15647041e-01, -1.82770370e+00, 1.49469246e+00, -1.68826911e+00, 1.62663223e+00, + -3.48742295e-01, -6.17863065e-01, -8.81308520e-01, 7.44925882e-01, 1.73070837e+00, + -1.28410488e-01, 8.64089144e-01, 3.26440658e-01, 1.10448379e+00, -1.69522830e-01, + -6.53776497e-01, 3.81864979e-01, -1.07760135e+00, -3.98562627e-01, 5.38128157e-01, + -2.29754635e-01, -2.33407869e+00, -1.25116856e-01, -1.21131987e+00, 1.08298393e+00, + 1.51546625e-01, -3.56701517e-01, -9.98362812e-01, 1.03306121e-01, -4.42120758e-01, + -3.94015959e-02, -8.12077182e-01, -5.72762073e-01, -8.31013031e-01, -1.16147494e+00, + -7.35897383e-02, -1.09398682e-01, -1.40219599e+00, 9.63041766e-01, 6.60583424e-02, + -1.71857732e+00, 1.99405396e-01, -8.84068189e-01, -2.18819685e-01, 2.21366910e+00, + -1.84460428e+00, -1.05848347e+00, -1.53731311e+00, -2.25141079e-01, 8.55239543e-02, + -5.64991535e-01, -1.11243253e+00, -1.48334114e+00, 2.85484662e-01, -5.98357857e-01, + -5.62005083e-01, 5.18476929e-02, 7.20785662e-01, -9.21464830e-01, -4.17295452e-01, + -7.06470111e-01, -2.07423207e+00, -2.82738840e-01, -7.05765425e-01, 5.71154019e-01, + 1.41402308e+00, 7.15224885e-01, -9.01571406e-01, -1.78966537e-01, -9.57855925e-01, + 1.92815188e+00, 3.67644067e-01, -7.77398627e-01, 3.75573158e-01, -1.27570871e+00, + -1.56269598e-01, -1.20126128e+00, 5.64996896e-01, -1.45388556e+00, -4.64414199e-01, + 1.88714704e+00, 1.47969578e+00, -1.96063537e-01, 5.18755530e-01, 2.68937808e+00, + -1.69730122e+00, -5.36576005e-01, 1.04962410e+00, 4.65512668e-01, 1.47912174e+00, + 8.46469352e-01, 8.08058567e-01, 1.13879268e+00, 6.34831145e-01, 1.43535434e+00, + 2.04580992e+00, 7.90686500e-04, 1.19722827e+00, -1.42644546e+00, 1.92405610e-01, + 8.14926140e-02, -2.36223884e-01, 1.16089456e+00, 2.24765430e-01, -1.32752285e+00, + 1.36642599e+00, -5.36742312e-01, 4.98821954e-01, 6.00651182e-01, -2.56801229e+00, + -2.36250226e-01, -8.57842968e-01, -3.00915036e-01, 2.41807890e+00, 7.24711670e-01, + 1.36799087e+00, -1.78428862e-01, -3.59900038e-01, 3.42306822e-01, -3.98271527e-01, + -1.30912096e-01, -5.36751004e-01, -6.45495166e-01, 3.16360509e-02, -6.38708513e-01, + 1.33860162e+00, 7.16436859e-01, 8.83639989e-01, -2.87900422e-01, -1.77363177e-01, + 1.75217790e-01, -2.41654433e+00, -8.13755792e-02, -7.71741152e-01, 1.33456387e+00, + -5.10830196e-01, -1.10584683e+00, -1.31689363e+00, 1.17583053e+00, 6.77964594e-01, + 2.99895744e-01, 5.12719967e-01, 2.06867244e+00, -2.89182146e+00, 1.84494668e+00, + 3.10415200e-01, 1.64179666e+00, -2.18044104e+00, -9.27575571e-01, -8.07814665e-01, + -1.85157068e-01, 5.86693996e-01, 1.60605927e+00, -1.03758631e-01, -9.65958485e-01, + -9.06979038e-01, 5.61735019e-01, 3.35132784e-01, 6.02021180e-01, 1.76689554e-01, + -3.36488706e-02, 1.45021360e+00, 6.70122973e-01, -1.71792295e-01, 8.29616451e-01, + -8.05614322e-01, -2.58079407e+00, 1.01873565e+00, -3.81060235e-01, 1.00130704e+00, + 1.55674172e+00, 2.02125219e+00, -7.48802492e-01, 1.06649929e+00, -9.65493892e-01, + -3.98926995e-01, 1.08567030e+00, -1.04009627e+00, 1.41394914e+00, 1.80976669e+00, + -4.38932124e-01, -9.96116646e-01, 2.93325605e+00, -2.65850173e+00, -2.86627210e-01, + -1.13380351e+00, 1.01776593e+00, 3.82798024e-01, -2.03015905e+00, -4.77705377e-01, + -1.52497126e-01, -3.08097496e-01, -1.22388367e+00, 7.72589230e-01, -1.18620576e+00, + 7.03396905e-01, -6.07914021e-01, 1.36665589e+00, 3.05885200e-01, 8.68021103e-01, + 7.85645067e-01, 6.86344886e-01, 6.60054397e-02, 6.72872685e-01, -1.72147672e+00, + -3.35687107e-01, 6.40280686e-01, 1.90765562e-01, -1.19759420e+00, 3.98723557e-01, + 1.01300503e+00, 3.15092859e-01, -7.48716523e-01, -6.31490429e-01, 5.03478302e-01, + -7.97737020e-01, -3.64328563e-01, -6.84865111e-01, -5.96889804e-01, 8.97320299e-01, + -2.74447207e-01, 8.96041854e-01, 8.62447243e-01, 1.14171036e+00, 1.89620219e+00, + -2.03086042e-01, 1.21863991e+00, -7.08332672e-01, 8.65474351e-01, 8.84794271e-02, + -7.38048949e-01, -3.29738572e-01, 6.25639096e-01, 8.73860305e-01, 1.32892575e+00, + -1.08731164e+00, 7.42722680e-02, 1.10376262e+00, -2.70446460e-01, 4.84230480e-01, + -7.49397372e-01, -1.22773789e-01, -1.73175160e+00, 1.00419017e+00, 4.18612640e-01, + -1.19265354e+00, 1.89942453e+00, 2.16924392e-01, 1.98456504e+00, -4.47127896e-02, + -8.13751338e-01, -1.57721515e+00, -1.51087464e+00, 1.49149818e-01, 3.34518489e-01, + -1.49643992e+00, 3.14649899e-01, 2.07634343e+00, -6.04070136e-01, 1.87721508e+00, + -4.06863898e-01, -7.83918757e-01, 2.03531050e-01, -7.64354284e-02, 3.31824344e-01, + 4.79012974e-01, 1.83535358e+00, 9.02286124e-01, -1.15207026e+00, 1.28672254e-01, + -8.26157812e-01, 1.90407166e+00, -3.96264466e-01, 1.94392469e-01, -8.73100373e-01, + -3.37468953e-03, 9.76466097e-01, 6.23291758e-02, -2.37497472e-01, 1.07993508e+00, + -3.14201676e-01, 1.70621222e+00, -9.90965410e-02, 1.20753777e-01, -6.38441546e-01, + 1.41774776e+00, -5.80882309e-01, 1.09405908e+00, 3.93716017e-01, -1.28958167e+00, + 4.24488630e-01, 9.55061213e-01, 1.29635151e+00, -1.96475095e-01, 1.27366715e-01, + 1.13693192e-01, -1.99660506e+00, -7.38934810e-01, 1.27623410e+00, 1.67534486e+00, + 2.98512870e-01, 1.48183369e+00, 1.03842506e+00, -1.05881112e+00, 3.59296217e+00, + 2.33641006e+00, -4.44058636e-01, -7.05099765e-02, 3.21036779e-01, -1.92001349e-01, + -1.42762638e+00, -4.05688476e-01, 4.80851634e-01, 4.74839401e-01, 1.26185094e+00, + -1.05552598e-01, 5.56910980e-01, -5.32621114e-01, 9.34349181e-02, 2.56314544e-01, + -1.74582311e+00, 4.17470989e-01, 2.29528051e+00, 2.62392322e-01, 3.18772657e-01, + 8.17214811e-01, -8.16325438e-01, -4.19774898e-01, -1.79953350e-02, 2.52742913e+00, + -2.79795924e-02, -8.35211211e-01, -3.49992939e-01, 1.17976432e+00, 1.06455248e+00, + 4.99693771e-01, -3.25404106e-01, -1.19518002e+00, -1.12107657e+00, 7.08571829e-01, + -1.32836392e+00, -4.05940531e-01, -1.62901886e+00, 1.94474528e-01, 5.69560181e-01, + -1.16097389e+00, -9.55882892e-01, 8.43738270e-01, 9.60068854e-01, 3.04930133e-02, + 1.09691130e-01, 5.31002976e-01, -7.96127056e-02, -2.90684090e-02, -2.90427758e-01, + 6.26093036e-01, 6.57694112e-01, -4.85835995e-01, 1.80074318e-01, 1.12303284e+00, + 5.23912334e-01, 5.85300514e-01, 6.21565032e-01, -6.88438319e-01, 1.76104297e+00, + 4.69681129e-01, -1.50756131e+00, -2.35433970e+00, 2.20926618e-01, -1.59035655e+00, + -2.16680752e-01, -1.09766225e+00, -3.66108880e-01, 6.72549669e-01, -1.39966389e+00, + -2.64964223e-01, -4.47757200e-01, 5.31233808e-01, 1.84834139e+00, -6.02818313e-01, + -1.44473483e+00, 1.52776447e-02, -7.93366554e-01, -1.90159337e+00, 1.74463595e-01, + -2.11499652e+00, -2.25655780e+00, 1.18038845e+00, -3.70794733e-01, -8.67093500e-01, + 1.43290672e+00, -1.38210097e-01, 1.14792213e+00, 1.06670774e+00, 1.03103438e+00, + -9.00433225e-02, -5.34357708e-01, -1.22908335e+00, -4.72611965e-01, 2.46111190e-01, + -1.70561610e+00, 3.92682358e-01, -1.55756928e+00, -2.37928227e-01, 2.03059408e+00, + -9.84120137e-01, -2.11053290e+00, 6.16981710e-01, -1.12243752e-01, -1.10029159e-02, + 9.02048435e-01, 8.56294718e-01, 1.13642549e+00, -1.50782750e+00, -3.72301949e-01, + -1.66280307e+00, -1.38174795e+00, 8.97950650e-02, 5.55623559e-01, -6.05980874e-01, + -7.05479352e-01, 7.04832792e-01, -3.20169261e-02, -5.46153623e-01, -4.23996939e-01, + -1.87522120e+00, -4.41626784e-01, 2.28022755e+00, 1.41852748e+00, 7.22573260e-01, + 2.28863935e+00, 1.32648450e+00, -1.20732385e+00, 6.48320570e-01, -5.97367023e-02, + 1.26207462e-01, -2.04798081e+00, 1.13007921e+00, -1.71585140e-01, 3.14833129e-02, + 1.71558970e-01, 2.30236146e-01, -2.69742619e+00, 1.36832193e+00, -4.09947214e-01, + -2.00570514e-01, 8.31050179e-01, 1.40744357e+00, -2.34268444e+00, -7.42098732e-03, + 1.03611120e+00, 2.06373254e+00, -5.02279592e-01, -7.01081635e-01, 1.25847835e-01, + 6.02231279e-02, -4.08815632e-01, -3.34433187e-01, 1.42676664e+00, -1.49454672e+00, + -1.24564490e+00, 1.71269292e+00, 6.82206821e-01, 8.72601070e-01, -9.22460387e-01, + 4.55740724e-02, 1.33030508e+00, 6.53585708e-02, 3.13993497e-01, -2.11648823e+00, + -1.36475580e-02, 2.51552262e+00, 9.25969768e-01, -6.52019962e-01, 2.03940799e+00, + 2.55910092e-01, -7.26525412e-01, -1.00207723e+00, 1.31950793e+00, -1.82967630e+00, + -4.92805660e-01, 4.07867808e-01, 6.11026922e-02, -2.11979237e-01, -2.87253727e-01, + 1.11856203e+00, -2.21720426e-01, 1.84350017e+00, 7.84784426e-01, -1.49696700e+00, + 9.09038266e-01, -1.27156936e+00, 9.56717220e-02, -4.15656486e-01, 4.19788418e-01, + -2.61691637e-01, -1.56861006e+00, -6.47659675e-01, -6.83293713e-01, 2.51621894e+00, + -4.44034798e-01, 1.78185380e+00, 4.60785269e-01, -2.68311726e-01, 1.04600391e+00, + -5.67576324e-01, 1.13507042e+00, -1.78393940e+00, -1.82719464e+00, -1.84508388e+00, + -1.29303124e+00, 1.35664029e+00, -9.17173260e-01, 9.85863915e-01, 1.07223755e+00, + 8.84707496e-01, -1.37852063e+00, 6.19459586e-01, -2.93677966e-02, -3.18737198e-01, + 1.03094159e+00, 4.89778531e-01, 1.73667810e+00, -2.03090079e-01, 3.64701299e-01, + 3.48172075e-01, -1.54091587e+00, 1.04498049e+00, -1.28639737e+00, -4.71319136e-01, + 8.61169102e-01, 1.61610909e+00, 7.69597251e-01, 7.68227380e-01, 1.11224694e+00, + 8.48919769e-01, 3.12294367e-01, -4.93201021e-01, 6.42746189e-01, -2.27293413e-01, + 2.16505068e-01, 5.52193787e-01, -1.76108774e+00, -4.43454137e-01, -1.10836243e+00, + 7.49078941e-01, -5.26434049e-02, 4.23300776e-01, -1.66554395e+00, 3.10524219e-01, + 1.19480829e+00, -6.29200409e-01, 6.41552685e-01, 7.60530128e-01, -1.44429069e+00, + -2.98038448e-01, 5.01177628e-01, 3.97341120e-01, 4.53467676e-01, -1.35725377e+00, + 9.43314195e-01, 2.15143758e+00, 3.94302672e-01, 2.26509780e-01, 9.59313828e-01, + -1.66404768e-01, 1.65207595e-01, -2.39340233e+00, 3.14543001e+00, 1.05218765e+00, + -8.14714579e-01, -3.05710147e-01, -1.74531477e+00, -3.64151538e-01, -2.09140760e-01, + 2.23739053e+00, 6.09477113e-01, 1.16899879e+00, 5.92967924e-01, -8.17673149e-01, + -1.10420428e+00, 4.65350290e-01, 2.11023040e-03, 8.14863971e-01, 1.08315984e+00, + -7.25860590e-02, -4.59896403e-01, 1.38164252e+00, 5.89336792e-01, 1.34519891e+00, + -3.63277304e-01, 9.08232031e-01, 2.05775821e-01, 1.01268871e+00, 2.25900629e-01, + 1.11195741e+00, 1.46383492e+00, 1.15712737e+00, 1.37285918e+00, -3.27123406e-01, + 2.10121867e+00, 3.63728898e-01, -9.64451543e-01, 7.50304023e-02, 2.26045537e+00, + -1.07848463e-01, -5.55058232e-01, 6.46210385e-01, -3.82173868e-01, 1.02724203e+00, + 4.75226625e-01, 2.63486832e-01, -1.87720616e-01, 2.66714045e+00, -1.37046410e-01, + -9.47273326e-01, -2.21070556e+00, 5.16910020e-01, -1.00019802e+00, -6.10344773e-01, + -1.23626760e-01, -7.78025616e-01, 3.54873800e-01, 1.32409224e+00, -4.96383871e-01, + -8.45650299e-01, -7.06777204e-01, 7.74296088e-01, 5.40594697e-01, -2.35323920e+00, + 1.10574355e+00, -2.71490739e-01, 3.89486537e-01, -2.25716891e+00, 1.08161436e+00, + -7.61396029e-01, -6.43902282e-01, 2.07071361e-01, -1.24311778e+00, 1.66718154e+00, + -1.12540846e+00, 4.04848060e-01, 9.82172410e-01, -2.22704668e-01, -4.41651091e-01, + 8.11339257e-01, -1.71211605e+00, -6.16208091e-02, 8.56110168e-01, 5.66390166e-01, + 6.39785155e-01, 1.39973994e+00, -6.88244744e-01, 2.42634138e+00, 3.24544610e-01, + 4.48313772e-01, 7.45142689e-01, -7.23045807e-02, 1.83704141e-01, -1.47171323e+00, + -7.09077372e-01, -6.01038702e-01, -8.75281454e-01, 5.13919915e-01, -6.60822470e-01, + -1.43487765e+00, 7.49938057e-01, 2.83635875e-01, 3.07045512e-01, 1.48936195e+00, + -2.17046249e-01, 2.04101206e+00, 6.02181940e-01, -1.78421830e-01, -8.17580831e-01, + 6.13386299e-01, 1.46247756e-01, -1.42514706e+00, -1.93940896e+00, -8.65275710e-01, + 1.47462311e-01, -4.02301576e-01, -9.63675890e-01, -1.84120948e+00, 8.14102917e-01, + 3.80760496e-01, 3.25900148e-01, -4.87843594e-01, -1.03508268e+00, 3.57676231e-01, + -6.47622001e-01, 2.14181936e+00, -3.34827796e-01, -8.07284435e-01, -8.49708166e-01, + -8.31736592e-01, 6.33904552e-01, 4.35249821e-01, -9.13698624e-01, -2.96290563e-01, + 3.77906357e-02, -1.16936544e+00, -3.14920460e-03, -1.18537362e+00, 2.99624644e-01, + 1.76247250e+00, -6.49375825e-01, -1.89211809e-01, -1.00974570e+00, 1.47455608e+00, + 1.72728137e+00, 2.18072141e+00, -7.62571173e-01, -1.23504812e+00, 2.14290218e-01, + -7.46888683e-01, 5.53627395e-01, -7.82076567e-03, 1.56933507e+00, 1.07155739e+00, + -6.42903166e-01, -9.85900335e-01, -6.31873346e-01, -9.85430080e-01, 3.97933623e-01, + -2.07587828e+00, 2.76612669e-01, -1.22060249e+00, -2.25139829e-01, 1.80572908e+00, + -5.58028004e-01, -8.45859723e-01, -1.30829100e+00, -1.65904870e+00, -9.78603426e-01, + -3.70256932e-01, 6.40194479e-01, 1.29842617e+00, 5.79764541e-01, -2.18955795e+00, + -6.34491122e-01, 2.83457214e-01, 2.71316544e-01, 5.79996139e-01, -1.90426727e+00, + -2.20898199e+00, 5.67839219e-01, -1.04623710e+00, 1.01192986e+00, 1.18567472e+00, + -1.73342893e+00, -2.65618016e+00, 3.03138568e-01, -1.02196040e+00, -2.21750759e-01, + -1.72682912e+00, -1.23679339e+00, 3.32640475e-01, -4.60601000e-01, -7.81932128e-02, + 4.11906483e+00, -1.89283131e+00, -3.88776684e-01, 1.80199833e+00, 1.96404455e+00, + 3.43852965e-01, -6.23609543e-01, 1.81733087e-01, 5.72130123e-01, 1.20715657e+00, + -9.16486162e-01, -5.61833245e-01, 1.67641549e-01, -1.75329878e+00, 2.02727673e+00, + -2.28164354e-01, 8.44422552e-01, -1.51806276e+00, 1.11571422e+00, -6.35541493e-01, + -7.89951282e-02, 4.72008590e-01, -8.35642565e-01, 3.68813724e-01, -7.06411185e-01, + -2.06091646e-01, 1.16843231e+00, 2.22169824e+00, -2.13768098e+00, 2.32776602e-01, + 2.52900016e-01, -1.14185849e+00, 1.66528537e-01, 1.98871626e+00, 6.88624657e-01, + 1.86755853e-01, -2.60746884e-01, 2.14480822e-01, 5.74795125e-01, -1.38808062e-01, + 6.23677175e-01, -2.74784978e+00, -8.37018300e-02, -3.22071295e-01, 3.66767660e-01, + -8.23091717e-01, -7.47733613e-02, 1.51128334e+00, -1.74266371e+00, -2.99285140e-01, + -5.11163366e-01, 6.42039600e-01, 2.76048507e-01, -7.37616832e-01, 1.22339395e+00, + -2.67566663e-01, -7.51730239e-02, 2.01868691e-01, 7.07868632e-01, -1.21711787e+00, + -1.85687375e+00, 1.05200890e+00, 1.47295756e+00, 2.54890967e-01, -1.24936980e+00, + -2.57051185e+00, 3.98733877e-01, -7.23513377e-01, 1.21540059e+00, 8.12283422e-01, + 1.65554595e+00, -1.17091747e+00, 1.34992672e-01, -1.26490262e+00, 1.90743067e+00, + 1.26996550e+00, 6.84984124e-01, -2.42826181e+00, 5.82274924e-01, -6.03997807e-02, + -2.34897259e-01, -2.82126477e+00, 6.99213914e-01, -6.24173822e-01, 9.13698195e-01, + 2.30096444e+00, -7.69519522e-01, -2.05936269e+00, -5.04623275e-01, 9.51572220e-01, + -1.04990530e+00, 9.29427177e-01, -1.00119016e+00, 5.58533219e-01, -1.96190366e+00, + -2.19649662e+00, 2.76351981e-01, 1.00882502e+00, 1.77184378e+00, 1.52844587e+00, + -6.11090570e-01, 8.38972820e-01, -1.19408219e+00, 1.09833108e+00, 1.79335203e+00, + 9.50652921e-01, 2.03016606e-01, -7.05328950e-01, 2.63976431e+00, 1.32128813e+00, + -3.26324584e-01, -6.03144462e-01, -1.15795682e+00, -2.84347500e-01, -2.70637624e+00, + 8.99588322e-01, 1.16243638e+00, 6.23042073e-01, -1.05633172e+00, 7.74870856e-01, + 1.11703946e+00, 7.31498949e-01, 4.88889866e-02, 5.18543386e-01, -1.15303239e-01, + -3.72740004e-01, 7.18707005e-01, -1.10160673e-02, -3.42219376e-01, -4.07108891e-01, + 1.46297984e+00, 2.21343521e+00, 1.36672760e+00, -1.42677666e+00, -1.53701751e+00, + 1.20834078e+00, 5.34986888e-01, -1.09136550e-01, 4.83101030e-01, 7.86715435e-01, + 1.04015999e-01, 6.21976525e-01, -2.08139696e+00, 6.95530731e-01, 1.03483749e+00, + -1.35308249e+00, 4.56603819e-02, -2.25926466e-01, 2.43326854e-01, 6.16818669e-01, + 6.94683652e-02, -2.33814385e-01, -2.22136024e+00, 1.86899901e+00, 1.10748320e+00, + 1.16927626e+00, -2.45241826e+00, 1.27914126e+00, 1.60261128e+00, -1.94906569e+00, + 1.97845616e+00, -4.46554806e-01, -8.02072809e-01, -1.96479219e+00, 3.59615459e-01, + -5.74916548e-01, -1.86520891e-01, 1.24436447e+00, -7.48666778e-01, -2.45964718e+00, + -2.48723344e-01, 1.49576775e+00, 1.18547459e-01, -1.24812482e+00, 1.65059802e+00, + -8.75251737e-01, -3.00917161e+00, -9.70460069e-01, -6.87370120e-01, -1.39008336e+00, + -4.98646683e-01, 1.53959956e+00, 1.34417230e+00, 7.25609309e-01, -7.97696169e-01, + -8.26531057e-01, -2.73695934e+00, 2.27172885e+00, 1.58063398e-01, -5.75734209e-01, + -1.20968554e+00, 8.79594164e-01, -1.97505063e-01, 6.07633769e-01, -5.23534759e-01, + 5.39579521e-01, -1.43180248e+00, -1.31573180e+00, 2.06689061e-01, 8.44228287e-01, + 1.01539177e-01, 8.50313924e-01, 1.13773193e+00, -6.09337003e-01, 1.22573408e+00, + 1.60308325e+00, -3.58368736e+00, -1.44948284e+00, -1.41743392e+00, -5.61340107e-01, + -9.68290606e-01, -2.02739053e+00, 2.71090499e-01, 2.51806453e+00, -9.34553301e-02, + 5.98489523e-01, 1.00383713e-01, 1.47096663e+00, -1.87702008e+00, -9.71287935e-01, + 1.36813300e+00, -1.05133427e-01, -7.45511518e-01, 1.15482681e-02, 7.41538344e-01, + 4.89211699e-01, 1.78611375e-01, -3.22591658e-01, -6.62753734e-01, -6.79941629e-01, + -1.56662518e+00, -1.30972025e+00, -9.95839674e-01, 5.78534201e-01, -3.55251735e-01, + -4.20144708e-02, 2.11099051e-01, -1.37500178e+00, 3.05860052e-01, 2.39801447e+00, + 1.06806434e-01, -4.31891309e-02, -5.92778723e-01, -2.33810000e-01, 2.73379933e-01, + -8.91777478e-01, -5.54188105e-01, -7.29232486e-01, -2.61636425e-02, -2.56123061e+00, + -1.82546639e+00 ] +

+ + [ 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03 ] + + + [ H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2 ] + +
+ 5000 + + [ 3.37259417e+01, 2.06511833e-15, 2.06511833e-15, 0.00000000e+00, 3.37259417e+01, + 2.06511833e-15, 0.00000000e+00, 0.00000000e+00, 3.37259417e+01 ] + + + + 31415 + + + + + [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, + kinetic_cv{kelvin} ] + + [ atom_f{piconewton}(atom=0;bead=0) ] + positions{angstrom} + 6 + + + + [ 2687888409, 4059721984, 529212847, 1944050140, 549951740, + 753730274, 4256902940, 3644633819, 1619935418, 2926854959, + 3845596702, 3377185214, 672656208, 1522275289, 2252162595, + 3840064745, 4027492069, 3675681571, 2579879846, 1816332499, + 4032401752, 1911816378, 303445975, 1468438718, 4013747657, + 1340600813, 2333908485, 2694837801, 4170600699, 2510847348, + 3039951471, 3744192067, 1926386446, 1272375545, 1414207521, + 66179398, 4083890893, 4151044133, 576437212, 1676792606, + 434309634, 1907904212, 552501071, 2721977900, 1774218030, + 2379944892, 895572049, 964207007, 855123501, 322370220, + 2071560835, 311075834, 2622627631, 3049706185, 2343013325, + 68709345, 1862864050, 3480897554, 1688711674, 3849088037, + 2335410691, 2553458415, 3853338058, 2210199727, 2794071459, + 2398176951, 3934057850, 1698758425, 1011318686, 1806201471, + 1034736815, 3855360847, 835665231, 2475925733, 233924796, + 3024757758, 2198530484, 3673044703, 1249768122, 3962863565, + 3357863236, 2995035040, 307264231, 726406611, 2449569067, + 2105792248, 2511154863, 1776943467, 1288186977, 1069459630, + 4142069906, 2662399901, 2976669074, 3587203732, 2374529826, + 1425481845, 228954896, 829104572, 3792121363, 2155121068, + 4012537920, 4004560763, 1828234324, 523136808, 212778594, + 2400962328, 2941249333, 941934455, 1185399473, 1989697055, + 3876270640, 2356595322, 2240658826, 1455744954, 1294764103, + 197281598, 3596260716, 1784450322, 4229237399, 2625160461, + 3437563840, 99534139, 4231199313, 4186457231, 1356327267, + 11955050, 694326214, 3281619587, 1501920361, 4047724237, + 254407815, 1209336385, 2469757968, 3247917043, 467877924, + 714928015, 1424369871, 2112691093, 961450464, 1302826015, + 1508195287, 2682046824, 1166405749, 130758490, 669915191, + 3325468865, 2863429703, 99481154, 2455859519, 3512819878, + 2058734245, 713709489, 92681358, 1270820689, 2875258344, + 4089059727, 2319856617, 3246994482, 2375401460, 3526989769, + 2037481502, 1523778672, 4277357577, 3378312673, 1761280988, + 385602812, 2806072191, 263793228, 3893867788, 1122562696, + 3292179677, 196613098, 1412940405, 437753556, 2089537898, + 3093827021, 2543771523, 2707596589, 4247024898, 423016972, + 1950202748, 619404510, 1524092033, 2603783903, 1668886628, + 1610491330, 203643004, 378998824, 3077420296, 1135622483, + 1741156718, 4043803158, 134627695, 3826076900, 2236198903, + 1299249975, 1841801847, 1664600294, 3214378313, 4189671272, + 3480243241, 2314880827, 726164864, 1258895459, 1021877225, + 57278710, 2540601428, 2729779922, 1740214549, 1640865107, + 1355185385, 2109593488, 2195506700, 672372257, 2178115007, + 1875949822, 1689867492, 385658740, 2445406785, 271863064, + 988127097, 1025468932, 2359419817, 30505704, 3740615491, + 302654725, 68322970, 3937476624, 1133164597, 2115798914, + 320399345, 783710429, 2653212426, 3534685928, 1799928422, + 3374564924, 140092188, 2838741355, 118331603, 3274090979, + 2536288199, 424964681, 2624886533, 930882804, 2205394448, + 2184146172, 676812400, 3846276446, 3664199786, 1428020191, + 174713762, 1742043028, 1988587715, 250315220, 3460710952, + 518855886, 3301263820, 3376830340, 1924596217, 3991359611, + 4018324691, 2736101407, 3348220756, 4134954748, 1014806456, + 811815211, 2969949177, 1648717003, 1095340695, 3941199066, + 1442177871, 2118024477, 3440070762, 2652513624, 2449760687, + 3263443330, 2902806218, 3234417117, 1849567332, 947381041, + 3667048364, 951549915, 3479164436, 3858250612, 331400252, + 2281345388, 2762215954, 3082365401, 683228175, 3454398927, + 970279118, 2070406438, 3049304524, 1693733059, 175159517, + 1769171565, 2762326718, 2494712358, 1596534753, 696283870, + 2018059673, 92137961, 494184422, 392011733, 1385029818, + 934252405, 333359117, 3764822796, 1330799844, 1968964095, + 1099463842, 3602247127, 2198538609, 99239880, 3666952197, + 1538751175, 687515492, 1759850188, 1784319556, 219306934, + 3607066683, 3549791334, 1244006176, 3168276190, 2506130029, + 934365798, 4125460139, 2267772610, 4123099235, 3145641762, + 2282867996, 947174487, 2735752579, 1153570283, 1214198797, + 3843855592, 226542409, 1556151146, 2140750114, 173612017, + 3793649149, 513160329, 1696259753, 2196908248, 4236321655, + 3978054768, 3076169778, 1237756707, 794294503, 2478806329, + 3270485108, 21511829, 3648378180, 2173244083, 390728983, + 1613278496, 245589104, 1871555825, 840092166, 2005126608, + 2086709055, 346538249, 755528088, 4150217063, 1800593080, + 2996189003, 223378615, 26641502, 1408725657, 1055486622, + 2783260926, 2418422845, 1425876347, 2681749907, 689577833, + 2439224882, 1119191698, 3284738598, 3248369824, 2184806341, + 3827067703, 1403375638, 2039560728, 2026930258, 1439858255, + 3646642925, 357706083, 801162144, 200302113, 843383109, + 3953988752, 803642989, 133507707, 1890262095, 2010928680, + 153102298, 62155903, 277159866, 3184049271, 3470490419, + 1263803797, 1744789719, 291191777, 2104793752, 3710673355, + 690715888, 3985842110, 2609560703, 850539005, 86744360, + 1737104979, 1863808169, 1774594416, 295814460, 349948339, + 2998856642, 2965669633, 1901828086, 3978738887, 1547972061, + 3099911135, 2005717380, 567557764, 4005749125, 2160875982, + 3708061218, 71131479, 4020136758, 2494015768, 1649237263, + 3904477723, 398737933, 1060721700, 1863476301, 370356512, + 3071414126, 2579819024, 1413367122, 2902740002, 111597792, + 3291486874, 2640531015, 3168695648, 2512654909, 3959449531, + 2099836667, 1724339088, 1513859793, 1867797563, 72940112, + 150365030, 2695841664, 1822792143, 1313669546, 2967322181, + 520611643, 353667991, 2717535171, 3765848346, 388428102, + 1356267895, 3512676772, 370279636, 3846898162, 230096495, + 1637173159, 611261822, 1005164736, 269482378, 3515088803, + 3384787851, 219854487, 3527128574, 1621986556, 2351564858, + 1464556636, 3969432414, 4241153635, 3481875215, 2028710485, + 2552303669, 398357876, 502240174, 2783848798, 3029135000, + 3389310739, 2505116094, 142532114, 3164584552, 2476051612, + 3402430270, 3909441351, 3427500434, 334653597, 3680534388, + 994471388, 3554495285, 1194116172, 2229772907, 1080120321, + 764714490, 2033099135, 14870392, 1699063853, 4063486208, + 1292743360, 2032090912, 72238972, 161094465, 1452285444, + 2672671278, 1692937611, 1323803845, 3240748400, 4018998180, + 747254077, 236045767, 3239449578, 983232024, 3337514013, + 1251769771, 3333700522, 410670915, 987407435, 2475716801, + 2872258033, 4098868775, 1252507952, 3804640001, 1349395704, + 3776831082, 2921973556, 4089719272, 2209056770, 4132418611, + 1349045766, 1096167788, 946557058, 2742739413, 675697683, + 981116951, 3762459934, 735892043, 2820765771, 3285067216, + 2160644040, 3791763118, 3326789900, 4049571064, 2680776632, + 3569204094, 65929649, 3389067210, 3597945585, 1844146738, + 2700511765, 329482853, 1760204187, 923334769, 4064120545, + 3501525441, 185277522, 1241941790, 3591317416, 417403194, + 1300287444, 568015210, 1937417620, 1293297106, 1132926831, + 2866724791, 3257502829, 2947848120, 3895316838, 522557077, + 3227142004, 3090084150, 1099385887, 281296826, 1305525858, + 4048212751, 1083053479, 1851665893, 2417839863, 1623516667, + 3571192609, 3711731288, 2688150423, 1385750380, 3001410324, + 3992036671, 438613795, 1675062808, 126103207, 3806023665, + 3378609204, 3872710810, 3254661971, 3271656093, 2954958773, + 2955771203, 943499290, 1783244758, 27256593, 2736330207, + 2854314347, 1414980118, 3499653814, 2716003330, 1906739972, + 2097871403, 833490830, 860249641, 1359898654, 681385897, + 768010275, 1337229341, 2176361026, 1243749829, 2535464086, + 3587794549, 257320265, 1799338138, 2326145708 ] + + 12345 + 432 + -8.30560467e-01 + + + + 1.03353433e+03 + 2.24648494e-02 + + 4.13413730e+01 + 7.91703800e-05 + +
diff --git a/tools/i-pi/examples/tutorial/tutorial-2/tutorial-2a.xml b/tools/i-pi/examples/tutorial/tutorial-2/tutorial-2a.xml new file mode 100755 index 000000000..b6e682463 --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-2/tutorial-2a.xml @@ -0,0 +1,742 @@ + + + + [ -1.83955900e+00, -2.24073938e+00, -1.08250020e+00, -5.70795599e-01, 7.32627980e+00, + 7.19210265e+00, -3.30615234e-01, 3.98119438e+00, 1.51691432e+00, 2.52717260e+00, + -1.27666806e+00, 4.73413388e+00, 1.12126184e+00, 1.26764230e+00, 1.02704916e+01, + 1.29998780e+00, 3.73413588e+00, 1.61919862e+01, 5.88202729e+00, 8.04850032e+00, + 1.24311326e+01, 1.02078708e+01, 1.86360455e+00, 1.64012625e+01, 1.17619062e+00, + 4.24983476e-01, 2.55535965e+01, 1.65002846e-01, 5.34507262e+00, 2.73617602e+01, + 6.62641741e+00, 5.73764066e+00, 2.33893339e+01, 6.10026934e+00, 2.56958142e+00, + 2.92780910e+01, 2.01269291e+00, 8.69979574e+00, -6.33324249e-01, 1.14898211e+00, + 1.61301653e+01, 3.70551886e+00, 5.80295868e+00, 1.66782201e+01, 2.75413040e-01, + 5.71194979e+00, 1.32139518e+01, 7.47120998e+00, 2.90527832e+00, 1.26243247e+01, + 1.18688316e+01, 3.86777222e-01, 1.86473408e+01, 1.66542003e+01, 6.49634508e+00, + 1.76520477e+01, 1.52792529e+01, 9.56145353e+00, 1.16514109e+01, 1.76464481e+01, + 7.90247690e-01, 1.28040514e+01, 1.99445660e+01, 1.91319083e+00, 1.48232256e+01, + 2.81978021e+01, 7.47808952e+00, 1.73026463e+01, 2.15060634e+01, 7.95108626e+00, + 9.08836417e+00, 2.88452581e+01, -8.39364894e-01, 2.33095835e+01, -1.26661254e+00, + -2.26048825e+00, 2.73659085e+01, 6.83034984e+00, 5.55328952e+00, 3.00964760e+01, + -2.13570013e+00, 3.85462300e+00, 2.11139559e+01, 6.98601751e+00, -1.69779185e+00, + 2.02798593e+01, 8.98144417e+00, -1.83724239e+00, 2.74015435e+01, 1.70384301e+01, + 5.49534087e+00, 2.92028322e+01, 1.28972834e+01, 4.00538016e+00, 2.38450279e+01, + 1.73369977e+01, 6.37702010e-01, 2.23536671e+01, 2.24315602e+01, -9.17792114e-01, + 2.76922986e+01, 2.71486460e+01, 4.59352860e+00, 2.73738615e+01, 2.47996576e+01, + 3.50789080e+00, 2.24217692e+01, 2.85214338e+01, 1.27744386e+01, -3.16474409e+00, + -4.32938118e+00, 1.23369331e+01, 5.19778303e+00, 6.29834102e+00, 1.65171169e+01, + 7.43433654e+00, -1.50763053e-01, 1.71757563e+01, 8.73504480e-02, 2.91427460e+00, + 1.37000162e+01, 3.58863547e-01, 1.16430675e+01, 1.33468414e+01, 7.88277760e+00, + 1.35602855e+01, 1.85311481e+01, 6.66308247e+00, 1.10802627e+01, 1.62994052e+01, + 1.15789465e+00, 1.73181503e+01, 9.33358989e+00, 3.82104623e-01, 2.45811794e+01, + 1.33131712e+01, 5.68071890e+00, 2.77946720e+01, 1.29013165e+01, 7.27837218e+00, + 2.09147450e+01, 1.84799695e+01, -1.43953367e+00, 2.88271546e+01, 1.06297113e+01, + 1.06874159e+01, 1.80009217e+00, 9.88791886e+00, 1.74750501e+01, 5.38215565e+00, + 1.75814278e+01, 1.64927163e+01, -7.22490057e-01, 1.59410372e+01, 1.21327342e+01, + 5.31684038e+00, 1.07398656e+01, 1.27687533e+01, 1.11831750e+01, 1.30396209e+01, + 1.78543512e+01, 1.53781269e+01, 1.74549497e+01, 1.69593034e+01, 1.25392544e+01, + 1.91056959e+01, 1.02634068e+01, 1.58723572e+01, 1.01017169e+01, 1.15340755e+01, + 2.42047249e+01, 8.82103648e+00, 1.74196163e+01, 2.71575865e+01, 1.42717489e+01, + 1.61565324e+01, 2.20042138e+01, 1.46526399e+01, 1.22238423e+01, 2.82739099e+01, + 1.32115234e+01, 2.28595316e+01, -3.43176969e-01, 9.94990444e+00, 3.15261979e+01, + 7.17743425e+00, 1.79725272e+01, 2.66047961e+01, -1.03202183e-01, 1.46786234e+01, + 2.03983934e+01, 6.75355215e+00, 1.21898998e+01, 2.68300650e+01, 1.28501206e+01, + 9.52256604e+00, 2.96146284e+01, 1.79253244e+01, 1.48734446e+01, 2.75889170e+01, + 7.84459536e+00, 2.04254604e+01, 2.29273727e+01, 1.86587003e+01, 1.36039471e+01, + 2.34500168e+01, 1.76328865e+01, 1.06667576e+01, 2.40841230e+01, 2.49370928e+01, + 1.38349803e+01, 3.01788493e+01, 2.19453967e+01, 1.96844070e+01, 2.17383789e+01, + 2.79207277e+01, 2.40109880e+01, 2.44652621e+00, 7.71232732e-01, 2.28150210e+01, + 4.44993033e+00, 6.32217106e+00, 2.86959872e+01, 6.16770811e+00, 2.54155030e+00, + 2.86295708e+01, 6.58513110e-01, 7.07847686e+00, 1.91416715e+01, 8.42657055e-01, + 1.09318699e+01, 2.21629487e+01, 3.26372053e+00, 1.85487891e+01, 2.42299255e+01, + 3.53057281e+00, 1.21895915e+01, 3.07759304e+01, 5.87270948e-01, 1.54581789e+01, + 2.21462069e+01, -3.29544187e+00, 2.17376848e+01, 2.08019829e+01, 5.74042948e+00, + 2.91126306e+01, 2.82616387e+01, 4.12726443e+00, 2.38117939e+01, 2.48604110e+01, + -9.81005677e-02, 2.75017597e+01, 2.19769526e+01, 9.55679072e+00, -3.48501195e-01, + 2.15122044e+01, 1.35659683e+01, 4.45218017e+00, 2.70106862e+01, 1.84178475e+01, + 2.90258066e+00, 3.09038945e+01, 1.13784966e+01, 3.97619446e+00, 2.33776271e+01, + 1.09744756e+01, 9.48584489e+00, 2.30108491e+01, 1.65710971e+01, 1.59074187e+01, + 2.90437432e+01, 1.63990319e+01, 1.41164353e+01, 3.03675824e+01, 9.36100919e+00, + 1.59902897e+01, 2.19588417e+01, 9.65547975e+00, 2.31178969e+01, 2.07325650e+01, + 1.43025889e+01, 2.85076354e+01, 2.79531009e+01, 1.40545290e+01, 1.99579811e+01, + 2.86838426e+01, 1.23353706e+01, 2.65845766e+01, 2.36116501e+01, 2.56191152e+01, + 5.93663687e+00, 2.14810798e+01, 3.18962824e+01, 6.43104769e+00, 2.61566331e+01, + 3.11398548e+01, 2.04112055e+00, 2.78161522e+01, 2.39026490e+01, 3.29230633e+00, + 2.35872061e+01, 1.92586393e+01, 9.42997765e+00, 2.18868541e+01, 2.93005866e+01, + 1.56731672e+01, 2.57892309e+01, 3.08659127e+01, 1.04565213e+01, 2.89111102e+01, + 2.23973168e+01, 1.41543879e+01, 2.40352391e+01, 1.89355855e+01, 2.26713139e+01, + 2.60883570e+01, 2.53551683e+01, 3.10959184e+01, 2.56617570e+01, 2.53873006e+01, + 2.02938950e+01, 2.87914567e+01, 1.97522769e+01, 2.78202344e+01, -1.76425983e+00, + -1.53558560e+00, -1.71338801e+00, -9.78599968e-01, 6.87902421e+00, 7.88543588e+00, + 5.47881861e-01, 3.64324940e+00, 1.39468482e+00, 3.60000249e+00, -9.28967610e-01, + 4.01716866e+00, 2.42995414e+00, 1.05628735e+00, 1.03627265e+01, 9.20694754e-01, + 4.29683694e+00, 1.64579850e+01, 6.19121450e+00, 7.68893688e+00, 1.23304998e+01, + 9.82833523e+00, 1.54814143e+00, 1.71545209e+01, 6.99417618e-01, 8.54622163e-02, + 2.48873966e+01, -3.11309329e-01, 6.97214120e+00, 2.66220741e+01, 5.25625287e+00, + 7.68138067e+00, 2.39284370e+01, 6.25528626e+00, 3.07873577e+00, 3.00882100e+01, + 1.15270468e+00, 8.88014098e+00, 3.00512398e-01, 9.30446242e-01, 1.71408264e+01, + 3.50661823e+00, 5.83759203e+00, 1.72729331e+01, 3.34582087e-01, 5.40503488e+00, + 1.24459036e+01, 5.56073866e+00, 1.21588195e+00, 1.31551680e+01, 1.27378351e+01, + -4.66813441e-01, 1.87703376e+01, 1.69486235e+01, 6.75076580e+00, 1.83449120e+01, + 1.48488718e+01, 9.47340998e+00, 1.17932793e+01, 1.67868142e+01, 6.10952151e-01, + 1.27008444e+01, 2.15901214e+01, 1.76087373e+00, 1.40248834e+01, 2.78953850e+01, + 6.51618548e+00, 1.72532108e+01, 2.04694567e+01, 7.36556309e+00, 9.99912211e+00, + 2.91964532e+01, -7.06531579e-01, 2.27219694e+01, -1.31954187e+00, -1.54612461e+00, + 2.75038363e+01, 6.70572831e+00, 5.21401215e+00, 2.84508378e+01, -1.38701455e+00, + 5.24874266e+00, 2.15644003e+01, 8.28914156e+00, -2.21199280e+00, 2.06411930e+01, + 9.08490967e+00, -3.69161804e-01, 2.79213183e+01, 1.67707124e+01, 5.77258212e+00, + 2.95534123e+01, 1.29379476e+01, 5.27372097e+00, 2.29618317e+01, 1.82846335e+01, + 5.50365226e-01, 2.32915342e+01, 2.26003508e+01, -3.23975407e-01, 2.71026192e+01, + 2.69864390e+01, 5.25571146e+00, 2.84281121e+01, 2.43362803e+01, 4.19783582e+00, + 2.23458941e+01, 2.89351055e+01, 1.30027038e+01, -2.89260409e+00, -3.32667625e+00, + 1.24700611e+01, 5.45576814e+00, 6.79907186e+00, 1.69263149e+01, 5.70732090e+00, + 1.52975089e-01, 1.72152577e+01, -5.86473536e-01, 2.60910235e+00, 1.39562777e+01, + 1.10496755e+00, 9.89893108e+00, 1.27550907e+01, 6.50405608e+00, 1.44860215e+01, + 1.84418079e+01, 6.98755864e+00, 1.14378627e+01, 1.73685838e+01, 1.03634629e+00, + 1.72542968e+01, 9.36166090e+00, 1.26996989e+00, 2.48970836e+01, 1.35415180e+01, + 4.84360499e+00, 2.82597230e+01, 1.28859648e+01, 7.62646315e+00, 2.08202186e+01, + 1.82323636e+01, -1.58242560e+00, 2.82645654e+01, 9.67026415e+00, 9.99521608e+00, + 1.48323928e+00, 1.06202054e+01, 1.74410916e+01, 5.30476845e+00, 1.68915394e+01, + 1.66028258e+01, -3.98602304e-01, 1.52286166e+01, 1.15951307e+01, 4.88875152e+00, + 1.16320855e+01, 1.18462368e+01, 1.17721604e+01, 1.30800856e+01, 1.72687237e+01, + 1.52362824e+01, 1.86182764e+01, 1.72413013e+01, 1.32638271e+01, 1.90927913e+01, + 1.01652528e+01, 1.60527418e+01, 9.59785151e+00, 1.16306603e+01, 2.32521891e+01, + 1.02733588e+01, 1.86418357e+01, 2.65319699e+01, 1.48920616e+01, 1.69296308e+01, + 2.24345192e+01, 1.44781142e+01, 1.16768928e+01, 2.87742833e+01, 1.26440243e+01, + 2.31651077e+01, 1.09153308e+00, 9.32620240e+00, 3.18068970e+01, 5.91156305e+00, + 1.82338682e+01, 2.68163992e+01, -6.10171355e-01, 1.56193643e+01, 1.99596118e+01, + 8.12957661e+00, 1.34391603e+01, 2.79448176e+01, 1.21148599e+01, 9.90095353e+00, + 2.95224900e+01, 1.88551608e+01, 1.63687321e+01, 2.81729033e+01, 7.75414361e+00, + 2.11290647e+01, 2.30983265e+01, 1.80818117e+01, 1.22179830e+01, 2.36227246e+01, + 1.85352948e+01, 1.00736995e+01, 2.52569655e+01, 2.39704097e+01, 1.44179838e+01, + 2.90993728e+01, 2.15195489e+01, 1.95569595e+01, 2.20162082e+01, 2.86888343e+01, + 2.38790793e+01, 1.81853851e+00, -8.62424353e-01, 2.30087081e+01, 3.67168316e+00, + 5.79906646e+00, 2.86237895e+01, 5.77923269e+00, 1.82976727e+00, 2.97992364e+01, + -2.44824247e-01, 6.97483848e+00, 1.97479547e+01, 1.28907671e+00, 1.06238401e+01, + 2.22988651e+01, 3.36189040e+00, 1.99142865e+01, 2.56182622e+01, 4.87467917e+00, + 1.16104104e+01, 3.01052148e+01, -1.89720612e-01, 1.52853202e+01, 2.30601562e+01, + -3.37897609e+00, 2.20210883e+01, 2.21023714e+01, 7.37999253e+00, 2.99827770e+01, + 2.83970918e+01, 5.06217176e+00, 2.39324034e+01, 2.36552267e+01, 3.97689851e-01, + 2.70250248e+01, 2.32913517e+01, 1.10207360e+01, 7.64503581e-01, 2.00178673e+01, + 1.37487336e+01, 4.25542754e+00, 2.60455321e+01, 1.69122386e+01, 2.31534587e+00, + 3.04356904e+01, 1.25406626e+01, 5.17675092e+00, 2.38621411e+01, 1.14515762e+01, + 9.75443924e+00, 2.25731071e+01, 1.62345346e+01, 1.68317268e+01, 2.84171490e+01, + 1.69913568e+01, 1.42827468e+01, 2.97526886e+01, 9.31307649e+00, 1.67785293e+01, + 2.17762297e+01, 8.96916957e+00, 2.19718340e+01, 2.22594418e+01, 1.33823144e+01, + 2.81207945e+01, 2.77005814e+01, 1.50622075e+01, 2.05455699e+01, 2.92151641e+01, + 1.30044976e+01, 2.67938258e+01, 2.17064822e+01, 2.45224793e+01, 5.39644288e+00, + 2.09907797e+01, 3.13381910e+01, 6.65786528e+00, 2.44267241e+01, 2.96324924e+01, + 1.59248807e+00, 2.81352950e+01, 2.52179231e+01, 3.21255854e+00, 2.29984530e+01, + 1.94459863e+01, 9.90712637e+00, 1.95242101e+01, 2.89090489e+01, 1.59338674e+01, + 2.54944440e+01, 3.14856070e+01, 1.10580434e+01, 2.91399127e+01, 2.38737698e+01, + 1.47156065e+01, 2.36566327e+01, 1.94718712e+01, 2.27327251e+01, 2.67255132e+01, + 2.57714727e+01, 3.15584870e+01, 2.55546714e+01, 2.55331520e+01, 2.06608588e+01, + 2.85241759e+01, 1.96187079e+01, 2.95686729e+01, -1.28506833e+00, -1.19627373e+00, + -1.11505578e+00, -1.26613495e+00, 6.87769487e+00, 8.86664224e+00, 3.22672767e-01, + 3.60048900e+00, 1.75198909e+00, 3.39985912e+00, -5.38113592e-01, 4.40630180e+00, + 2.05527629e+00, 1.04780310e+00, 1.09245524e+01, 1.64433825e+00, 5.07925261e+00, + 1.66693862e+01, 6.34528032e+00, 6.84652464e+00, 1.30553942e+01, 9.19503930e+00, + 1.02559973e+00, 1.64900202e+01, 1.50883393e+00, 1.94153184e-01, 2.60419984e+01, + 2.23637168e-01, 5.88126235e+00, 2.68151686e+01, 6.09330009e+00, 6.41359349e+00, + 2.27265508e+01, 5.20417493e+00, 3.02351860e+00, 2.90727542e+01, 5.22759441e-01, + 9.07723226e+00, 3.74357289e-01, 5.28407017e-01, 1.77876299e+01, 3.40818122e+00, + 4.77500246e+00, 1.61051931e+01, -7.15798597e-01, 5.35494411e+00, 1.24396028e+01, + 5.26132317e+00, 3.65101881e+00, 1.45180281e+01, 1.20044556e+01, 6.47702685e-01, + 1.89647984e+01, 1.63575659e+01, 6.85886982e+00, 1.86666656e+01, 1.39918716e+01, + 9.63134562e+00, 1.21489398e+01, 1.79744053e+01, -4.65149892e-02, 1.28820467e+01, + 2.20848030e+01, 5.38141652e-01, 1.49773108e+01, 2.86234466e+01, 6.69460622e+00, + 1.70430908e+01, 2.03293501e+01, 7.46084699e+00, 9.27068140e+00, 2.87672652e+01, + -1.77446797e+00, 2.31007533e+01, -1.61541146e+00, -1.44197270e+00, 2.59669452e+01, + 7.05366958e+00, 6.78973516e+00, 2.82048010e+01, -6.81707442e-01, 4.11224811e+00, + 2.33230735e+01, 7.64143788e+00, -1.30932484e+00, 2.00341346e+01, 8.43186122e+00, + -3.23227570e-01, 2.88456685e+01, 1.71869485e+01, 5.59484664e+00, 2.86861878e+01, + 1.38255153e+01, 5.39986151e+00, 2.26670663e+01, 1.74856853e+01, 1.31353338e+00, + 2.27240963e+01, 2.26573999e+01, -6.43284767e-01, 2.75545414e+01, 2.65487243e+01, + 6.36781664e+00, 2.89591698e+01, 2.55204798e+01, 4.19690392e+00, 2.20492684e+01, + 2.90086623e+01, 1.29407803e+01, -3.28971533e+00, -3.59953707e+00, 1.30308691e+01, + 4.52526975e+00, 6.05334642e+00, 1.80200038e+01, 6.86934432e+00, -6.64799107e-01, + 1.77004927e+01, -1.08469207e+00, 2.66573197e+00, 1.33883962e+01, 1.77878946e+00, + 1.01478623e+01, 1.28332615e+01, 7.20488713e+00, 1.30030127e+01, 1.82890722e+01, + 5.45538575e+00, 1.26731818e+01, 1.64372459e+01, 1.13264799e+00, 1.68270761e+01, + 9.29480506e+00, 8.02789471e-01, 2.50004864e+01, 1.30397241e+01, 4.25942991e+00, + 2.82105770e+01, 1.34839369e+01, 6.59877473e+00, 1.96748658e+01, 1.90248344e+01, + -7.34844927e-01, 2.61879859e+01, 1.06994814e+01, 1.04221404e+01, 1.19626201e+00, + 9.75063627e+00, 1.82675328e+01, 4.79479047e+00, 1.67169178e+01, 1.67708791e+01, + -3.25796174e-01, 1.58140826e+01, 1.07514402e+01, 4.16021066e+00, 1.14190484e+01, + 1.20130431e+01, 1.10359921e+01, 1.23286945e+01, 1.73093633e+01, 1.60093426e+01, + 1.72472089e+01, 1.71555986e+01, 1.29595403e+01, 1.96515771e+01, 1.07779852e+01, + 1.55906451e+01, 1.04066011e+01, 1.06852174e+01, 2.41637389e+01, 9.33300851e+00, + 1.72769290e+01, 2.72366205e+01, 1.43344594e+01, 1.55444449e+01, 2.25613745e+01, + 1.54876710e+01, 1.23994150e+01, 2.77630051e+01, 1.24465157e+01, 2.22953455e+01, + 7.07224538e-01, 9.17225571e+00, 3.04541888e+01, 7.00444346e+00, 1.90451094e+01, + 2.68206460e+01, 2.12443190e-01, 1.40421608e+01, 2.16604155e+01, 8.76748146e+00, + 1.18599685e+01, 2.63467340e+01, 1.24514910e+01, 9.07508597e+00, 2.94452971e+01, + 1.81138604e+01, 1.65350863e+01, 2.76724408e+01, 8.10094240e+00, 2.03902238e+01, + 2.19891729e+01, 1.81613540e+01, 1.28241365e+01, 2.30836693e+01, 1.77077396e+01, + 1.07839643e+01, 2.43167076e+01, 2.35379387e+01, 1.43368823e+01, 2.99960368e+01, + 2.18020500e+01, 1.98836259e+01, 2.10543368e+01, 2.77564511e+01, 2.38873187e+01, + 2.63596088e+00, -8.45710736e-01, 2.26031998e+01, 4.94875239e+00, 6.06483058e+00, + 2.72420930e+01, 7.16044030e+00, 2.03664724e+00, 2.83819926e+01, 1.41474271e+00, + 6.86956553e+00, 1.90297274e+01, 2.08547446e-01, 1.17356589e+01, 2.20093707e+01, + 3.11015561e+00, 1.84015708e+01, 2.55258414e+01, 4.51413195e+00, 1.15060640e+01, + 3.04420577e+01, 2.05350822e-01, 1.59037463e+01, 2.20766378e+01, -3.08680082e+00, + 2.27928539e+01, 2.19423049e+01, 6.96063455e+00, 2.93175572e+01, 2.63580580e+01, + 4.17130592e+00, 2.37215427e+01, 2.48207538e+01, -1.10022388e+00, 2.72061284e+01, + 2.27735841e+01, 1.10983539e+01, 5.03790539e-01, 2.05447311e+01, 1.35069355e+01, + 4.99617490e+00, 2.74249691e+01, 1.74389534e+01, 2.12313453e+00, 3.09387285e+01, + 1.30390672e+01, 4.56728163e+00, 2.49467870e+01, 1.09552706e+01, 1.05134177e+01, + 2.26330821e+01, 1.67053853e+01, 1.63758180e+01, 2.83218004e+01, 1.73740024e+01, + 1.40724154e+01, 3.02682616e+01, 8.35484609e+00, 1.66575388e+01, 2.13501708e+01, + 1.01994161e+01, 2.34754835e+01, 2.17794008e+01, 1.46632688e+01, 2.78344546e+01, + 2.68554005e+01, 1.40368100e+01, 2.04864069e+01, 2.79509647e+01, 1.19193324e+01, + 2.79392613e+01, 2.26582097e+01, 2.45440331e+01, 6.30616900e+00, 2.13859764e+01, + 3.08849664e+01, 6.44869190e+00, 2.64928749e+01, 3.02400532e+01, 8.32685758e-01, + 2.74640627e+01, 2.40967712e+01, 3.18770838e+00, 2.27412709e+01, 1.85562433e+01, + 9.23151490e+00, 2.03983609e+01, 2.91681800e+01, 1.56979455e+01, 2.51695730e+01, + 3.07717754e+01, 1.06821424e+01, 2.92168363e+01, 2.36456995e+01, 1.45948324e+01, + 2.33527556e+01, 1.93047064e+01, 2.37746530e+01, 2.48248533e+01, 2.61599136e+01, + 3.04541638e+01, 2.58041186e+01, 2.56474296e+01, 2.02610796e+01, 2.85417157e+01, + 1.88972442e+01, 2.98568715e+01, -2.38586496e+00, -7.58828968e-01, -1.63156635e+00, + -1.24260140e-01, 7.66170676e+00, 8.26519210e+00, 8.18582687e-01, 3.21215177e+00, + 8.71469426e-01, 3.32445560e+00, -1.32118548e+00, 3.91101312e+00, 2.32046567e+00, + 1.58370834e+00, 1.07292588e+01, 1.33792245e+00, 4.76690685e+00, 1.57155304e+01, + 5.60070334e+00, 7.35450929e+00, 1.13291649e+01, 9.38118665e+00, 1.32457406e+00, + 1.64112640e+01, 2.06694803e+00, -1.08774960e-01, 2.51995098e+01, 5.83962037e-01, + 6.14184963e+00, 2.60031487e+01, 7.65609079e+00, 5.60778423e+00, 2.29300579e+01, + 5.77114858e+00, 2.13679298e+00, 2.93327862e+01, 2.19806103e+00, 9.68222590e+00, + 1.57880111e+00, 3.14284164e-01, 1.73107320e+01, 3.17317841e+00, 5.31032205e+00, + 1.67722718e+01, -3.21992890e-01, 4.86044703e+00, 1.46302272e+01, 6.21744347e+00, + 3.23194778e+00, 1.36053502e+01, 1.20906550e+01, 1.05401318e+00, 1.89924170e+01, + 1.86500989e+01, 7.28920551e+00, 1.90214147e+01, 1.48608421e+01, 8.94579137e+00, + 1.17939437e+01, 1.76451822e+01, -2.16292241e-01, 1.27470176e+01, 2.10170183e+01, + 1.86340865e+00, 1.43620945e+01, 2.88854080e+01, 7.51715045e+00, 1.76892134e+01, + 2.12086589e+01, 7.40953137e+00, 8.90283609e+00, 2.82643224e+01, -1.81615954e+00, + 2.35425566e+01, -6.35391065e-01, -1.81429720e+00, 2.64341698e+01, 6.21091555e+00, + 5.43254354e+00, 2.75836921e+01, -9.47958758e-01, 4.71567619e+00, 2.21052659e+01, + 7.88771418e+00, -1.66841626e+00, 2.04914383e+01, 8.26675658e+00, -4.59229759e-01, + 2.71579580e+01, 1.68410204e+01, 5.00100432e+00, 2.90662447e+01, 1.29214242e+01, + 4.69089603e+00, 2.34759714e+01, 1.67656282e+01, 6.53854823e-01, 2.38352952e+01, + 2.17931036e+01, -1.01639060e+00, 2.72103570e+01, 2.59664262e+01, 4.89596274e+00, + 2.77674695e+01, 2.47617265e+01, 3.70839276e+00, 2.19495406e+01, 2.77068507e+01, + 1.33883490e+01, -2.96774368e+00, -3.88662826e+00, 1.21540528e+01, 4.88520987e+00, + 6.46250715e+00, 1.58502434e+01, 7.52061809e+00, -5.94010768e-01, 1.80041063e+01, + -1.45785510e+00, 1.90361473e+00, 1.37682126e+01, 1.01096461e+00, 1.05140180e+01, + 1.32426632e+01, 7.30651107e+00, 1.44595448e+01, 1.87287975e+01, 5.98649586e+00, + 1.22746034e+01, 1.63100152e+01, 1.15741871e+00, 1.66981121e+01, 9.12913654e+00, + -2.92667679e-01, 2.45886138e+01, 1.33050334e+01, 3.97377478e+00, 2.69467178e+01, + 1.42080442e+01, 6.64595078e+00, 2.01191284e+01, 1.86015542e+01, -1.75336417e+00, + 2.83471787e+01, 1.08620615e+01, 1.11988186e+01, 1.95253365e+00, 9.45047887e+00, + 1.75938537e+01, 4.23821913e+00, 1.70208034e+01, 1.60108143e+01, -1.22190668e+00, + 1.50766040e+01, 1.12165304e+01, 5.43990155e+00, 1.09933699e+01, 1.22850779e+01, + 1.16546326e+01, 1.23781385e+01, 1.80369686e+01, 1.53125056e+01, 1.73516609e+01, + 1.75785987e+01, 1.18313796e+01, 1.94046667e+01, 1.10166421e+01, 1.62979612e+01, + 9.66207941e+00, 1.08458701e+01, 2.37048314e+01, 8.44004940e+00, 1.70203943e+01, + 2.65757559e+01, 1.43027170e+01, 1.63790927e+01, 2.18182624e+01, 1.38144113e+01, + 1.12481654e+01, 2.87113704e+01, 1.23513270e+01, 2.18980717e+01, 5.17961694e-01, + 9.82158593e+00, 3.06003668e+01, 6.40959927e+00, 1.97382355e+01, 2.64666452e+01, + -2.56886470e-01, 1.51138569e+01, 2.14756928e+01, 7.69843726e+00, 1.13280462e+01, + 2.53724470e+01, 1.17891597e+01, 9.16645548e+00, 2.85470480e+01, 1.83229821e+01, + 1.60641629e+01, 2.74309208e+01, 8.14336993e+00, 2.00104262e+01, 2.16691335e+01, + 1.90509791e+01, 1.35353858e+01, 2.30944654e+01, 1.79157296e+01, 1.01235942e+01, + 2.45385866e+01, 2.35448360e+01, 1.40749201e+01, 3.01972078e+01, 2.17768651e+01, + 2.03786050e+01, 2.10805498e+01, 2.76935947e+01, 2.44615615e+01, 3.05749628e+00, + 4.07414296e-01, 2.16336438e+01, 4.40657970e+00, 5.21060398e+00, 2.88299726e+01, + 7.01128437e+00, 8.79026008e-01, 2.85241186e+01, 3.14915946e-01, 7.07809470e+00, + 1.98625917e+01, 4.50200492e-03, 1.15863909e+01, 2.29376845e+01, 2.50348240e+00, + 1.86113050e+01, 2.47645618e+01, 3.74984924e+00, 1.16835156e+01, 3.00116656e+01, + 1.33610084e+00, 1.54039934e+01, 2.16664404e+01, -3.77318264e+00, 2.24073626e+01, + 2.17213138e+01, 6.32154759e+00, 2.91289015e+01, 2.80778040e+01, 4.04768899e+00, + 2.51637272e+01, 2.49482621e+01, -1.80258150e+00, 2.77649841e+01, 2.28639670e+01, + 9.52095023e+00, 1.12320744e+00, 2.11060298e+01, 1.35966775e+01, 4.52804356e+00, + 2.65933190e+01, 1.74870802e+01, 3.12917456e+00, 3.12581554e+01, 1.26369216e+01, + 4.24969839e+00, 2.28577555e+01, 1.09623135e+01, 9.61329928e+00, 2.31292240e+01, + 1.68635673e+01, 1.59562582e+01, 2.83134554e+01, 1.65993286e+01, 1.34061062e+01, + 3.07651009e+01, 8.60937322e+00, 1.58164516e+01, 2.15713342e+01, 9.77426434e+00, + 2.38239983e+01, 2.07170028e+01, 1.44272471e+01, 2.72915473e+01, 2.78094878e+01, + 1.46067375e+01, 2.02374654e+01, 2.83102299e+01, 1.21902457e+01, 2.73283465e+01, + 2.25040436e+01, 2.40201181e+01, 7.24105767e+00, 2.16659528e+01, 3.22281603e+01, + 6.56727556e+00, 2.67438472e+01, 3.14254999e+01, 1.00941523e+00, 2.72477648e+01, + 2.43062679e+01, 3.91537815e+00, 2.28206020e+01, 1.90617248e+01, 9.50661026e+00, + 1.95693791e+01, 2.99400820e+01, 1.67827219e+01, 2.52432494e+01, 3.09283864e+01, + 1.18433291e+01, 3.02997758e+01, 2.26469178e+01, 1.40818435e+01, 2.52061280e+01, + 1.93512323e+01, 2.29021542e+01, 2.65208970e+01, 2.53952117e+01, 3.08512322e+01, + 2.76076800e+01, 2.54724293e+01, 1.95719692e+01, 2.94254771e+01, 1.94406409e+01, + 2.73992646e+01 ] + +

+ [ 1.40372994e-01, -1.70336384e+00, 6.37303020e-01, -3.60483257e-01, -1.10940109e+00, + 3.74869623e-01, -3.25735029e-01, 7.75472220e-01, 1.10757231e+00, -2.40493336e+00, + -1.53716651e+00, 1.37041429e+00, 5.28228491e-01, 1.38616874e+00, -1.38581237e+00, + -3.77690596e-01, 2.35773187e-01, 1.37036828e+00, 1.74363360e+00, 1.46668252e+00, + 9.19554977e-01, 1.46604384e+00, 7.17395153e-01, 1.16766357e+00, 5.74213643e-01, + 1.73367931e-01, -1.66161161e+00, 2.33212598e+00, -9.77285003e-01, 2.41575083e-01, + -1.49585940e-01, -1.18522916e+00, 1.58553462e-01, -1.47168505e+00, -1.24387557e+00, + 7.68483391e-01, -1.56677579e+00, 8.39149463e-01, -7.60108832e-01, -1.39563512e-01, + 1.23618455e+00, -3.39699359e-01, -9.88358452e-01, -1.25161119e+00, 5.75688958e-01, + 3.34908289e-02, -1.57137545e+00, 9.54873978e-01, 2.21048523e-01, 3.15471131e+00, + 4.38424417e-01, -1.41296551e+00, -6.15293784e-01, 4.54568031e-01, 5.25912190e-01, + 1.10462750e+00, -7.33687512e-01, 3.51836732e-01, 1.11696908e+00, -1.75519514e-01, + -9.87401261e-01, -1.00224818e+00, -2.06257599e+00, -8.69995365e-02, 1.96237139e-01, + -1.55878661e+00, 2.06187113e+00, 5.21020731e-03, 2.35617406e-01, 1.59018004e+00, + 1.23310143e+00, -9.06287741e-01, 1.02772014e+00, -4.13278400e-01, -9.73895321e-01, + 1.26420822e+00, -6.00372594e-02, -8.86889397e-01, -1.35877237e+00, 1.26542138e-01, + -1.96996606e+00, 1.16602982e+00, -1.87715811e+00, -1.07989580e+00, 1.52684255e-01, + 2.69202324e+00, -7.86764932e-01, -1.26792145e+00, -2.15985504e-01, 2.83847115e-01, + -3.90074815e-02, -3.21827572e-01, 8.60927158e-01, 1.15174374e+00, -1.06395947e+00, + 6.56206723e-01, 1.71687653e+00, 1.88094551e+00, -1.41246651e-01, 6.67235507e-01, + 8.02729512e-01, -5.99750938e-01, 3.86175582e-01, 1.56674025e+00, 1.16770355e-01, + -1.25058894e-01, -6.64317179e-01, -1.90732529e+00, -3.49443824e-01, -1.75313244e+00, + -8.93802373e-01, -8.38911513e-02, -3.54765784e+00, 3.29189169e-01, -1.59470714e+00, + 2.28214169e-01, -2.04640475e+00, -1.21363021e+00, 4.43956386e-01, 1.98553407e+00, + -6.41921427e-01, 8.31610867e-01, 2.37729074e-01, -1.96307860e+00, 5.83519443e-01, + -9.23373803e-01, -2.72733993e-01, -6.80313749e-01, -4.21629881e-01, 8.24112349e-02, + -2.02945940e-02, 4.70239760e-02, -8.87189426e-01, 2.62362546e-01, 2.90567277e-03, + -5.77088646e-01, 8.63734028e-01, 2.12881273e-01, -1.84398318e+00, -1.27537888e+00, + -8.96390165e-01, 8.67723220e-01, -7.13233254e-01, 9.98467053e-01, 1.20471615e+00, + 3.80364988e-02, -3.86066496e-01, 2.80482433e-01, -5.55953973e-01, 6.99483364e-01, + -6.20862722e-01, -5.75941665e-01, -1.01810316e+00, 6.59129210e-01, 3.36528627e-01, + 1.19657571e+00, 1.16325245e+00, 1.38231876e+00, -1.62296272e+00, 7.73325492e-01, + 9.07953738e-01, -1.56020700e+00, 5.91276288e-01, -1.45072710e+00, 3.06498507e-01, + 1.02001412e+00, -7.79180574e-01, -1.09202701e+00, 8.60608247e-01, -8.12517020e-01, + -3.29732754e-01, 7.95824769e-02, -3.53180396e-01, -6.92843090e-01, 8.08287670e-01, + -1.31368002e+00, 8.92275005e-01, 7.74460553e-01, -4.16315357e-01, 4.13327475e-01, + 2.07077192e-01, -2.18589769e+00, -1.02281048e-01, 9.09167509e-02, -1.46835347e+00, + 1.23256338e+00, -3.07250057e-01, 2.46249432e-01, 7.74791555e-01, 3.98298680e-01, + -5.39569195e-02, 4.73911005e-01, 1.79978269e+00, 6.49413046e-01, 1.44049305e+00, + -7.54136523e-01, 6.85251391e-01, -1.03401786e+00, -1.07121945e+00, 1.15101429e+00, + -6.78252322e-01, 3.66963136e-02, -1.11945652e-01, -4.17808375e-01, 9.68133746e-02, + 1.99069757e+00, 1.55013114e+00, -1.92882805e-02, 1.33795454e+00, 7.39452603e-01, + 3.77633950e-01, 1.81163711e+00, 2.58943819e+00, 1.29562203e+00, -1.48713547e+00, + -9.55424888e-01, 3.46515063e-01, 4.16880974e-01, -1.14430760e+00, -5.41540342e-01, + 1.15617781e+00, -8.15311978e-01, -1.24131679e-01, -1.01785991e+00, -6.82587363e-01, + 1.34485087e+00, 3.95295976e-01, 3.61637052e-01, -4.79290805e-01, 1.96407902e-02, + -6.96427808e-01, 9.65717585e-01, 4.63130635e-01, -4.12348950e-02, -6.14114134e-02, + 3.76909298e-01, 1.31464930e-01, -1.96943568e+00, -2.07138054e+00, 1.07506895e+00, + -8.47693792e-02, 1.50838082e+00, 9.66357898e-01, 3.29832625e-02, 2.53592195e+00, + -8.44613584e-01, -1.75528218e-01, -1.51432281e+00, -1.30241164e+00, -2.07575407e-01, + -1.04844306e+00, -1.28575451e+00, 4.62727941e-01, 1.46590141e+00, -2.63004766e-01, + -1.01898113e+00, -1.37875255e+00, -9.12918530e-01, 1.71033710e+00, 1.02893180e+00, + -1.32634968e+00, 8.82495711e-02, -9.11997611e-01, -2.42094019e+00, -6.29467944e-01, + 8.08788619e-01, 1.94804910e+00, -8.72566500e-01, 9.20033720e-01, -1.72884793e+00, + 3.44191186e-01, 1.21733557e+00, 1.87515471e-01, 5.10808988e-02, 7.94329477e-01, + -3.52316495e-01, -1.00945167e+00, 7.35146276e-01, 1.07654301e+00, 1.04930155e+00, + -1.85826022e+00, -5.07927804e-01, -9.80771494e-01, -3.21767737e+00, -1.49676613e-01, + -2.15647041e-01, -1.82770370e+00, 1.49469246e+00, -1.68826911e+00, 1.62663223e+00, + -3.48742295e-01, -6.17863065e-01, -8.81308520e-01, 7.44925882e-01, 1.73070837e+00, + -1.28410488e-01, 8.64089144e-01, 3.26440658e-01, 1.10448379e+00, -1.69522830e-01, + -6.53776497e-01, 3.81864979e-01, -1.07760135e+00, -3.98562627e-01, 5.38128157e-01, + -2.29754635e-01, -2.33407869e+00, -1.25116856e-01, -1.21131987e+00, 1.08298393e+00, + 1.51546625e-01, -3.56701517e-01, -9.98362812e-01, 1.03306121e-01, -4.42120758e-01, + -3.94015959e-02, -8.12077182e-01, -5.72762073e-01, -8.31013031e-01, -1.16147494e+00, + -7.35897383e-02, -1.09398682e-01, -1.40219599e+00, 9.63041766e-01, 6.60583424e-02, + -1.71857732e+00, 1.99405396e-01, -8.84068189e-01, -2.18819685e-01, 2.21366910e+00, + -1.84460428e+00, -1.05848347e+00, -1.53731311e+00, -2.25141079e-01, 8.55239543e-02, + -5.64991535e-01, -1.11243253e+00, -1.48334114e+00, 2.85484662e-01, -5.98357857e-01, + -5.62005083e-01, 5.18476929e-02, 7.20785662e-01, -9.21464830e-01, -4.17295452e-01, + -7.06470111e-01, -2.07423207e+00, -2.82738840e-01, -7.05765425e-01, 5.71154019e-01, + 1.41402308e+00, 7.15224885e-01, -9.01571406e-01, -1.78966537e-01, -9.57855925e-01, + 1.92815188e+00, 3.67644067e-01, -7.77398627e-01, 3.75573158e-01, -1.27570871e+00, + -1.56269598e-01, -1.20126128e+00, 5.64996896e-01, -1.45388556e+00, -4.64414199e-01, + 1.88714704e+00, 1.47969578e+00, -1.96063537e-01, 5.18755530e-01, 2.68937808e+00, + -1.69730122e+00, -5.36576005e-01, 1.04962410e+00, 4.65512668e-01, 1.47912174e+00, + 8.46469352e-01, 8.08058567e-01, 1.13879268e+00, 6.34831145e-01, 1.43535434e+00, + 2.04580992e+00, 7.90686500e-04, 1.19722827e+00, -1.42644546e+00, 1.92405610e-01, + 8.14926140e-02, -2.36223884e-01, 1.16089456e+00, 2.24765430e-01, -1.32752285e+00, + 1.36642599e+00, -5.36742312e-01, 4.98821954e-01, 6.00651182e-01, -2.56801229e+00, + -2.36250226e-01, -8.57842968e-01, -3.00915036e-01, 2.41807890e+00, 7.24711670e-01, + 1.36799087e+00, -1.78428862e-01, -3.59900038e-01, 3.42306822e-01, -3.98271527e-01, + -1.30912096e-01, -5.36751004e-01, -6.45495166e-01, 3.16360509e-02, -6.38708513e-01, + 1.33860162e+00, 7.16436859e-01, 8.83639989e-01, -2.87900422e-01, -1.77363177e-01, + 1.75217790e-01, -2.41654433e+00, -8.13755792e-02, -7.71741152e-01, 1.33456387e+00, + -5.10830196e-01, -1.10584683e+00, -1.31689363e+00, 1.17583053e+00, 6.77964594e-01, + 2.99895744e-01, 5.12719967e-01, 2.06867244e+00, -2.89182146e+00, 1.84494668e+00, + 3.10415200e-01, 1.64179666e+00, -2.18044104e+00, -9.27575571e-01, -8.07814665e-01, + -1.85157068e-01, 5.86693996e-01, 1.60605927e+00, -1.03758631e-01, -9.65958485e-01, + -9.06979038e-01, 5.61735019e-01, 3.35132784e-01, 6.02021180e-01, 1.76689554e-01, + -3.36488706e-02, 1.45021360e+00, 6.70122973e-01, -1.71792295e-01, 8.29616451e-01, + -8.05614322e-01, -2.58079407e+00, 1.01873565e+00, -3.81060235e-01, 1.00130704e+00, + 1.55674172e+00, 2.02125219e+00, -7.48802492e-01, 1.06649929e+00, -9.65493892e-01, + -3.98926995e-01, 1.08567030e+00, -1.04009627e+00, 1.41394914e+00, 1.80976669e+00, + -4.38932124e-01, -9.96116646e-01, 2.93325605e+00, -2.65850173e+00, -2.86627210e-01, + -1.13380351e+00, 1.01776593e+00, 3.82798024e-01, -2.03015905e+00, -4.77705377e-01, + -1.52497126e-01, -3.08097496e-01, -1.22388367e+00, 7.72589230e-01, -1.18620576e+00, + 7.03396905e-01, -6.07914021e-01, 1.36665589e+00, 3.05885200e-01, 8.68021103e-01, + 7.85645067e-01, 6.86344886e-01, 6.60054397e-02, 6.72872685e-01, -1.72147672e+00, + -3.35687107e-01, 6.40280686e-01, 1.90765562e-01, -1.19759420e+00, 3.98723557e-01, + 1.01300503e+00, 3.15092859e-01, -7.48716523e-01, -6.31490429e-01, 5.03478302e-01, + -7.97737020e-01, -3.64328563e-01, -6.84865111e-01, -5.96889804e-01, 8.97320299e-01, + -2.74447207e-01, 8.96041854e-01, 8.62447243e-01, 1.14171036e+00, 1.89620219e+00, + -2.03086042e-01, 1.21863991e+00, -7.08332672e-01, 8.65474351e-01, 8.84794271e-02, + -7.38048949e-01, -3.29738572e-01, 6.25639096e-01, 8.73860305e-01, 1.32892575e+00, + -1.08731164e+00, 7.42722680e-02, 1.10376262e+00, -2.70446460e-01, 4.84230480e-01, + -7.49397372e-01, -1.22773789e-01, -1.73175160e+00, 1.00419017e+00, 4.18612640e-01, + -1.19265354e+00, 1.89942453e+00, 2.16924392e-01, 1.98456504e+00, -4.47127896e-02, + -8.13751338e-01, -1.57721515e+00, -1.51087464e+00, 1.49149818e-01, 3.34518489e-01, + -1.49643992e+00, 3.14649899e-01, 2.07634343e+00, -6.04070136e-01, 1.87721508e+00, + -4.06863898e-01, -7.83918757e-01, 2.03531050e-01, -7.64354284e-02, 3.31824344e-01, + 4.79012974e-01, 1.83535358e+00, 9.02286124e-01, -1.15207026e+00, 1.28672254e-01, + -8.26157812e-01, 1.90407166e+00, -3.96264466e-01, 1.94392469e-01, -8.73100373e-01, + -3.37468953e-03, 9.76466097e-01, 6.23291758e-02, -2.37497472e-01, 1.07993508e+00, + -3.14201676e-01, 1.70621222e+00, -9.90965410e-02, 1.20753777e-01, -6.38441546e-01, + 1.41774776e+00, -5.80882309e-01, 1.09405908e+00, 3.93716017e-01, -1.28958167e+00, + 4.24488630e-01, 9.55061213e-01, 1.29635151e+00, -1.96475095e-01, 1.27366715e-01, + 1.13693192e-01, -1.99660506e+00, -7.38934810e-01, 1.27623410e+00, 1.67534486e+00, + 2.98512870e-01, 1.48183369e+00, 1.03842506e+00, -1.05881112e+00, 3.59296217e+00, + 2.33641006e+00, -4.44058636e-01, -7.05099765e-02, 3.21036779e-01, -1.92001349e-01, + -1.42762638e+00, -4.05688476e-01, 4.80851634e-01, 4.74839401e-01, 1.26185094e+00, + -1.05552598e-01, 5.56910980e-01, -5.32621114e-01, 9.34349181e-02, 2.56314544e-01, + -1.74582311e+00, 4.17470989e-01, 2.29528051e+00, 2.62392322e-01, 3.18772657e-01, + 8.17214811e-01, -8.16325438e-01, -4.19774898e-01, -1.79953350e-02, 2.52742913e+00, + -2.79795924e-02, -8.35211211e-01, -3.49992939e-01, 1.17976432e+00, 1.06455248e+00, + 4.99693771e-01, -3.25404106e-01, -1.19518002e+00, -1.12107657e+00, 7.08571829e-01, + -1.32836392e+00, -4.05940531e-01, -1.62901886e+00, 1.94474528e-01, 5.69560181e-01, + -1.16097389e+00, -9.55882892e-01, 8.43738270e-01, 9.60068854e-01, 3.04930133e-02, + 1.09691130e-01, 5.31002976e-01, -7.96127056e-02, -2.90684090e-02, -2.90427758e-01, + 6.26093036e-01, 6.57694112e-01, -4.85835995e-01, 1.80074318e-01, 1.12303284e+00, + 5.23912334e-01, 5.85300514e-01, 6.21565032e-01, -6.88438319e-01, 1.76104297e+00, + 4.69681129e-01, -1.50756131e+00, -2.35433970e+00, 2.20926618e-01, -1.59035655e+00, + -2.16680752e-01, -1.09766225e+00, -3.66108880e-01, 6.72549669e-01, -1.39966389e+00, + -2.64964223e-01, -4.47757200e-01, 5.31233808e-01, 1.84834139e+00, -6.02818313e-01, + -1.44473483e+00, 1.52776447e-02, -7.93366554e-01, -1.90159337e+00, 1.74463595e-01, + -2.11499652e+00, -2.25655780e+00, 1.18038845e+00, -3.70794733e-01, -8.67093500e-01, + 1.43290672e+00, -1.38210097e-01, 1.14792213e+00, 1.06670774e+00, 1.03103438e+00, + -9.00433225e-02, -5.34357708e-01, -1.22908335e+00, -4.72611965e-01, 2.46111190e-01, + -1.70561610e+00, 3.92682358e-01, -1.55756928e+00, -2.37928227e-01, 2.03059408e+00, + -9.84120137e-01, -2.11053290e+00, 6.16981710e-01, -1.12243752e-01, -1.10029159e-02, + 9.02048435e-01, 8.56294718e-01, 1.13642549e+00, -1.50782750e+00, -3.72301949e-01, + -1.66280307e+00, -1.38174795e+00, 8.97950650e-02, 5.55623559e-01, -6.05980874e-01, + -7.05479352e-01, 7.04832792e-01, -3.20169261e-02, -5.46153623e-01, -4.23996939e-01, + -1.87522120e+00, -4.41626784e-01, 2.28022755e+00, 1.41852748e+00, 7.22573260e-01, + 2.28863935e+00, 1.32648450e+00, -1.20732385e+00, 6.48320570e-01, -5.97367023e-02, + 1.26207462e-01, -2.04798081e+00, 1.13007921e+00, -1.71585140e-01, 3.14833129e-02, + 1.71558970e-01, 2.30236146e-01, -2.69742619e+00, 1.36832193e+00, -4.09947214e-01, + -2.00570514e-01, 8.31050179e-01, 1.40744357e+00, -2.34268444e+00, -7.42098732e-03, + 1.03611120e+00, 2.06373254e+00, -5.02279592e-01, -7.01081635e-01, 1.25847835e-01, + 6.02231279e-02, -4.08815632e-01, -3.34433187e-01, 1.42676664e+00, -1.49454672e+00, + -1.24564490e+00, 1.71269292e+00, 6.82206821e-01, 8.72601070e-01, -9.22460387e-01, + 4.55740724e-02, 1.33030508e+00, 6.53585708e-02, 3.13993497e-01, -2.11648823e+00, + -1.36475580e-02, 2.51552262e+00, 9.25969768e-01, -6.52019962e-01, 2.03940799e+00, + 2.55910092e-01, -7.26525412e-01, -1.00207723e+00, 1.31950793e+00, -1.82967630e+00, + -4.92805660e-01, 4.07867808e-01, 6.11026922e-02, -2.11979237e-01, -2.87253727e-01, + 1.11856203e+00, -2.21720426e-01, 1.84350017e+00, 7.84784426e-01, -1.49696700e+00, + 9.09038266e-01, -1.27156936e+00, 9.56717220e-02, -4.15656486e-01, 4.19788418e-01, + -2.61691637e-01, -1.56861006e+00, -6.47659675e-01, -6.83293713e-01, 2.51621894e+00, + -4.44034798e-01, 1.78185380e+00, 4.60785269e-01, -2.68311726e-01, 1.04600391e+00, + -5.67576324e-01, 1.13507042e+00, -1.78393940e+00, -1.82719464e+00, -1.84508388e+00, + -1.29303124e+00, 1.35664029e+00, -9.17173260e-01, 9.85863915e-01, 1.07223755e+00, + 8.84707496e-01, -1.37852063e+00, 6.19459586e-01, -2.93677966e-02, -3.18737198e-01, + 1.03094159e+00, 4.89778531e-01, 1.73667810e+00, -2.03090079e-01, 3.64701299e-01, + 3.48172075e-01, -1.54091587e+00, 1.04498049e+00, -1.28639737e+00, -4.71319136e-01, + 8.61169102e-01, 1.61610909e+00, 7.69597251e-01, 7.68227380e-01, 1.11224694e+00, + 8.48919769e-01, 3.12294367e-01, -4.93201021e-01, 6.42746189e-01, -2.27293413e-01, + 2.16505068e-01, 5.52193787e-01, -1.76108774e+00, -4.43454137e-01, -1.10836243e+00, + 7.49078941e-01, -5.26434049e-02, 4.23300776e-01, -1.66554395e+00, 3.10524219e-01, + 1.19480829e+00, -6.29200409e-01, 6.41552685e-01, 7.60530128e-01, -1.44429069e+00, + -2.98038448e-01, 5.01177628e-01, 3.97341120e-01, 4.53467676e-01, -1.35725377e+00, + 9.43314195e-01, 2.15143758e+00, 3.94302672e-01, 2.26509780e-01, 9.59313828e-01, + -1.66404768e-01, 1.65207595e-01, -2.39340233e+00, 3.14543001e+00, 1.05218765e+00, + -8.14714579e-01, -3.05710147e-01, -1.74531477e+00, -3.64151538e-01, -2.09140760e-01, + 2.23739053e+00, 6.09477113e-01, 1.16899879e+00, 5.92967924e-01, -8.17673149e-01, + -1.10420428e+00, 4.65350290e-01, 2.11023040e-03, 8.14863971e-01, 1.08315984e+00, + -7.25860590e-02, -4.59896403e-01, 1.38164252e+00, 5.89336792e-01, 1.34519891e+00, + -3.63277304e-01, 9.08232031e-01, 2.05775821e-01, 1.01268871e+00, 2.25900629e-01, + 1.11195741e+00, 1.46383492e+00, 1.15712737e+00, 1.37285918e+00, -3.27123406e-01, + 2.10121867e+00, 3.63728898e-01, -9.64451543e-01, 7.50304023e-02, 2.26045537e+00, + -1.07848463e-01, -5.55058232e-01, 6.46210385e-01, -3.82173868e-01, 1.02724203e+00, + 4.75226625e-01, 2.63486832e-01, -1.87720616e-01, 2.66714045e+00, -1.37046410e-01, + -9.47273326e-01, -2.21070556e+00, 5.16910020e-01, -1.00019802e+00, -6.10344773e-01, + -1.23626760e-01, -7.78025616e-01, 3.54873800e-01, 1.32409224e+00, -4.96383871e-01, + -8.45650299e-01, -7.06777204e-01, 7.74296088e-01, 5.40594697e-01, -2.35323920e+00, + 1.10574355e+00, -2.71490739e-01, 3.89486537e-01, -2.25716891e+00, 1.08161436e+00, + -7.61396029e-01, -6.43902282e-01, 2.07071361e-01, -1.24311778e+00, 1.66718154e+00, + -1.12540846e+00, 4.04848060e-01, 9.82172410e-01, -2.22704668e-01, -4.41651091e-01, + 8.11339257e-01, -1.71211605e+00, -6.16208091e-02, 8.56110168e-01, 5.66390166e-01, + 6.39785155e-01, 1.39973994e+00, -6.88244744e-01, 2.42634138e+00, 3.24544610e-01, + 4.48313772e-01, 7.45142689e-01, -7.23045807e-02, 1.83704141e-01, -1.47171323e+00, + -7.09077372e-01, -6.01038702e-01, -8.75281454e-01, 5.13919915e-01, -6.60822470e-01, + -1.43487765e+00, 7.49938057e-01, 2.83635875e-01, 3.07045512e-01, 1.48936195e+00, + -2.17046249e-01, 2.04101206e+00, 6.02181940e-01, -1.78421830e-01, -8.17580831e-01, + 6.13386299e-01, 1.46247756e-01, -1.42514706e+00, -1.93940896e+00, -8.65275710e-01, + 1.47462311e-01, -4.02301576e-01, -9.63675890e-01, -1.84120948e+00, 8.14102917e-01, + 3.80760496e-01, 3.25900148e-01, -4.87843594e-01, -1.03508268e+00, 3.57676231e-01, + -6.47622001e-01, 2.14181936e+00, -3.34827796e-01, -8.07284435e-01, -8.49708166e-01, + -8.31736592e-01, 6.33904552e-01, 4.35249821e-01, -9.13698624e-01, -2.96290563e-01, + 3.77906357e-02, -1.16936544e+00, -3.14920460e-03, -1.18537362e+00, 2.99624644e-01, + 1.76247250e+00, -6.49375825e-01, -1.89211809e-01, -1.00974570e+00, 1.47455608e+00, + 1.72728137e+00, 2.18072141e+00, -7.62571173e-01, -1.23504812e+00, 2.14290218e-01, + -7.46888683e-01, 5.53627395e-01, -7.82076567e-03, 1.56933507e+00, 1.07155739e+00, + -6.42903166e-01, -9.85900335e-01, -6.31873346e-01, -9.85430080e-01, 3.97933623e-01, + -2.07587828e+00, 2.76612669e-01, -1.22060249e+00, -2.25139829e-01, 1.80572908e+00, + -5.58028004e-01, -8.45859723e-01, -1.30829100e+00, -1.65904870e+00, -9.78603426e-01, + -3.70256932e-01, 6.40194479e-01, 1.29842617e+00, 5.79764541e-01, -2.18955795e+00, + -6.34491122e-01, 2.83457214e-01, 2.71316544e-01, 5.79996139e-01, -1.90426727e+00, + -2.20898199e+00, 5.67839219e-01, -1.04623710e+00, 1.01192986e+00, 1.18567472e+00, + -1.73342893e+00, -2.65618016e+00, 3.03138568e-01, -1.02196040e+00, -2.21750759e-01, + -1.72682912e+00, -1.23679339e+00, 3.32640475e-01, -4.60601000e-01, -7.81932128e-02, + 4.11906483e+00, -1.89283131e+00, -3.88776684e-01, 1.80199833e+00, 1.96404455e+00, + 3.43852965e-01, -6.23609543e-01, 1.81733087e-01, 5.72130123e-01, 1.20715657e+00, + -9.16486162e-01, -5.61833245e-01, 1.67641549e-01, -1.75329878e+00, 2.02727673e+00, + -2.28164354e-01, 8.44422552e-01, -1.51806276e+00, 1.11571422e+00, -6.35541493e-01, + -7.89951282e-02, 4.72008590e-01, -8.35642565e-01, 3.68813724e-01, -7.06411185e-01, + -2.06091646e-01, 1.16843231e+00, 2.22169824e+00, -2.13768098e+00, 2.32776602e-01, + 2.52900016e-01, -1.14185849e+00, 1.66528537e-01, 1.98871626e+00, 6.88624657e-01, + 1.86755853e-01, -2.60746884e-01, 2.14480822e-01, 5.74795125e-01, -1.38808062e-01, + 6.23677175e-01, -2.74784978e+00, -8.37018300e-02, -3.22071295e-01, 3.66767660e-01, + -8.23091717e-01, -7.47733613e-02, 1.51128334e+00, -1.74266371e+00, -2.99285140e-01, + -5.11163366e-01, 6.42039600e-01, 2.76048507e-01, -7.37616832e-01, 1.22339395e+00, + -2.67566663e-01, -7.51730239e-02, 2.01868691e-01, 7.07868632e-01, -1.21711787e+00, + -1.85687375e+00, 1.05200890e+00, 1.47295756e+00, 2.54890967e-01, -1.24936980e+00, + -2.57051185e+00, 3.98733877e-01, -7.23513377e-01, 1.21540059e+00, 8.12283422e-01, + 1.65554595e+00, -1.17091747e+00, 1.34992672e-01, -1.26490262e+00, 1.90743067e+00, + 1.26996550e+00, 6.84984124e-01, -2.42826181e+00, 5.82274924e-01, -6.03997807e-02, + -2.34897259e-01, -2.82126477e+00, 6.99213914e-01, -6.24173822e-01, 9.13698195e-01, + 2.30096444e+00, -7.69519522e-01, -2.05936269e+00, -5.04623275e-01, 9.51572220e-01, + -1.04990530e+00, 9.29427177e-01, -1.00119016e+00, 5.58533219e-01, -1.96190366e+00, + -2.19649662e+00, 2.76351981e-01, 1.00882502e+00, 1.77184378e+00, 1.52844587e+00, + -6.11090570e-01, 8.38972820e-01, -1.19408219e+00, 1.09833108e+00, 1.79335203e+00, + 9.50652921e-01, 2.03016606e-01, -7.05328950e-01, 2.63976431e+00, 1.32128813e+00, + -3.26324584e-01, -6.03144462e-01, -1.15795682e+00, -2.84347500e-01, -2.70637624e+00, + 8.99588322e-01, 1.16243638e+00, 6.23042073e-01, -1.05633172e+00, 7.74870856e-01, + 1.11703946e+00, 7.31498949e-01, 4.88889866e-02, 5.18543386e-01, -1.15303239e-01, + -3.72740004e-01, 7.18707005e-01, -1.10160673e-02, -3.42219376e-01, -4.07108891e-01, + 1.46297984e+00, 2.21343521e+00, 1.36672760e+00, -1.42677666e+00, -1.53701751e+00, + 1.20834078e+00, 5.34986888e-01, -1.09136550e-01, 4.83101030e-01, 7.86715435e-01, + 1.04015999e-01, 6.21976525e-01, -2.08139696e+00, 6.95530731e-01, 1.03483749e+00, + -1.35308249e+00, 4.56603819e-02, -2.25926466e-01, 2.43326854e-01, 6.16818669e-01, + 6.94683652e-02, -2.33814385e-01, -2.22136024e+00, 1.86899901e+00, 1.10748320e+00, + 1.16927626e+00, -2.45241826e+00, 1.27914126e+00, 1.60261128e+00, -1.94906569e+00, + 1.97845616e+00, -4.46554806e-01, -8.02072809e-01, -1.96479219e+00, 3.59615459e-01, + -5.74916548e-01, -1.86520891e-01, 1.24436447e+00, -7.48666778e-01, -2.45964718e+00, + -2.48723344e-01, 1.49576775e+00, 1.18547459e-01, -1.24812482e+00, 1.65059802e+00, + -8.75251737e-01, -3.00917161e+00, -9.70460069e-01, -6.87370120e-01, -1.39008336e+00, + -4.98646683e-01, 1.53959956e+00, 1.34417230e+00, 7.25609309e-01, -7.97696169e-01, + -8.26531057e-01, -2.73695934e+00, 2.27172885e+00, 1.58063398e-01, -5.75734209e-01, + -1.20968554e+00, 8.79594164e-01, -1.97505063e-01, 6.07633769e-01, -5.23534759e-01, + 5.39579521e-01, -1.43180248e+00, -1.31573180e+00, 2.06689061e-01, 8.44228287e-01, + 1.01539177e-01, 8.50313924e-01, 1.13773193e+00, -6.09337003e-01, 1.22573408e+00, + 1.60308325e+00, -3.58368736e+00, -1.44948284e+00, -1.41743392e+00, -5.61340107e-01, + -9.68290606e-01, -2.02739053e+00, 2.71090499e-01, 2.51806453e+00, -9.34553301e-02, + 5.98489523e-01, 1.00383713e-01, 1.47096663e+00, -1.87702008e+00, -9.71287935e-01, + 1.36813300e+00, -1.05133427e-01, -7.45511518e-01, 1.15482681e-02, 7.41538344e-01, + 4.89211699e-01, 1.78611375e-01, -3.22591658e-01, -6.62753734e-01, -6.79941629e-01, + -1.56662518e+00, -1.30972025e+00, -9.95839674e-01, 5.78534201e-01, -3.55251735e-01, + -4.20144708e-02, 2.11099051e-01, -1.37500178e+00, 3.05860052e-01, 2.39801447e+00, + 1.06806434e-01, -4.31891309e-02, -5.92778723e-01, -2.33810000e-01, 2.73379933e-01, + -8.91777478e-01, -5.54188105e-01, -7.29232486e-01, -2.61636425e-02, -2.56123061e+00, + -1.82546639e+00 ] +

+ + [ 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, 3.67494322e+03, + 3.67494322e+03, 3.67494322e+03, 3.67494322e+03 ] + + + [ H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2, H2, H2, + H2, H2, H2 ] + +
+ 100000 + + [ 3.37259417e+01, 2.06511833e-15, 2.06511833e-15, 0.00000000e+00, 3.37259417e+01, + 2.06511833e-15, 0.00000000e+00, 0.00000000e+00, 3.37259417e+01 ] + + + + 31415 + + + + + [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, + kinetic_cv{kelvin}, pressure_cv{megapascal}, volume ] + + [ atom_f{piconewton}(atom=0;bead=0) ] + positions{angstrom} + + + + + [ 2687888409, 4059721984, 529212847, 1944050140, 549951740, + 753730274, 4256902940, 3644633819, 1619935418, 2926854959, + 3845596702, 3377185214, 672656208, 1522275289, 2252162595, + 3840064745, 4027492069, 3675681571, 2579879846, 1816332499, + 4032401752, 1911816378, 303445975, 1468438718, 4013747657, + 1340600813, 2333908485, 2694837801, 4170600699, 2510847348, + 3039951471, 3744192067, 1926386446, 1272375545, 1414207521, + 66179398, 4083890893, 4151044133, 576437212, 1676792606, + 434309634, 1907904212, 552501071, 2721977900, 1774218030, + 2379944892, 895572049, 964207007, 855123501, 322370220, + 2071560835, 311075834, 2622627631, 3049706185, 2343013325, + 68709345, 1862864050, 3480897554, 1688711674, 3849088037, + 2335410691, 2553458415, 3853338058, 2210199727, 2794071459, + 2398176951, 3934057850, 1698758425, 1011318686, 1806201471, + 1034736815, 3855360847, 835665231, 2475925733, 233924796, + 3024757758, 2198530484, 3673044703, 1249768122, 3962863565, + 3357863236, 2995035040, 307264231, 726406611, 2449569067, + 2105792248, 2511154863, 1776943467, 1288186977, 1069459630, + 4142069906, 2662399901, 2976669074, 3587203732, 2374529826, + 1425481845, 228954896, 829104572, 3792121363, 2155121068, + 4012537920, 4004560763, 1828234324, 523136808, 212778594, + 2400962328, 2941249333, 941934455, 1185399473, 1989697055, + 3876270640, 2356595322, 2240658826, 1455744954, 1294764103, + 197281598, 3596260716, 1784450322, 4229237399, 2625160461, + 3437563840, 99534139, 4231199313, 4186457231, 1356327267, + 11955050, 694326214, 3281619587, 1501920361, 4047724237, + 254407815, 1209336385, 2469757968, 3247917043, 467877924, + 714928015, 1424369871, 2112691093, 961450464, 1302826015, + 1508195287, 2682046824, 1166405749, 130758490, 669915191, + 3325468865, 2863429703, 99481154, 2455859519, 3512819878, + 2058734245, 713709489, 92681358, 1270820689, 2875258344, + 4089059727, 2319856617, 3246994482, 2375401460, 3526989769, + 2037481502, 1523778672, 4277357577, 3378312673, 1761280988, + 385602812, 2806072191, 263793228, 3893867788, 1122562696, + 3292179677, 196613098, 1412940405, 437753556, 2089537898, + 3093827021, 2543771523, 2707596589, 4247024898, 423016972, + 1950202748, 619404510, 1524092033, 2603783903, 1668886628, + 1610491330, 203643004, 378998824, 3077420296, 1135622483, + 1741156718, 4043803158, 134627695, 3826076900, 2236198903, + 1299249975, 1841801847, 1664600294, 3214378313, 4189671272, + 3480243241, 2314880827, 726164864, 1258895459, 1021877225, + 57278710, 2540601428, 2729779922, 1740214549, 1640865107, + 1355185385, 2109593488, 2195506700, 672372257, 2178115007, + 1875949822, 1689867492, 385658740, 2445406785, 271863064, + 988127097, 1025468932, 2359419817, 30505704, 3740615491, + 302654725, 68322970, 3937476624, 1133164597, 2115798914, + 320399345, 783710429, 2653212426, 3534685928, 1799928422, + 3374564924, 140092188, 2838741355, 118331603, 3274090979, + 2536288199, 424964681, 2624886533, 930882804, 2205394448, + 2184146172, 676812400, 3846276446, 3664199786, 1428020191, + 174713762, 1742043028, 1988587715, 250315220, 3460710952, + 518855886, 3301263820, 3376830340, 1924596217, 3991359611, + 4018324691, 2736101407, 3348220756, 4134954748, 1014806456, + 811815211, 2969949177, 1648717003, 1095340695, 3941199066, + 1442177871, 2118024477, 3440070762, 2652513624, 2449760687, + 3263443330, 2902806218, 3234417117, 1849567332, 947381041, + 3667048364, 951549915, 3479164436, 3858250612, 331400252, + 2281345388, 2762215954, 3082365401, 683228175, 3454398927, + 970279118, 2070406438, 3049304524, 1693733059, 175159517, + 1769171565, 2762326718, 2494712358, 1596534753, 696283870, + 2018059673, 92137961, 494184422, 392011733, 1385029818, + 934252405, 333359117, 3764822796, 1330799844, 1968964095, + 1099463842, 3602247127, 2198538609, 99239880, 3666952197, + 1538751175, 687515492, 1759850188, 1784319556, 219306934, + 3607066683, 3549791334, 1244006176, 3168276190, 2506130029, + 934365798, 4125460139, 2267772610, 4123099235, 3145641762, + 2282867996, 947174487, 2735752579, 1153570283, 1214198797, + 3843855592, 226542409, 1556151146, 2140750114, 173612017, + 3793649149, 513160329, 1696259753, 2196908248, 4236321655, + 3978054768, 3076169778, 1237756707, 794294503, 2478806329, + 3270485108, 21511829, 3648378180, 2173244083, 390728983, + 1613278496, 245589104, 1871555825, 840092166, 2005126608, + 2086709055, 346538249, 755528088, 4150217063, 1800593080, + 2996189003, 223378615, 26641502, 1408725657, 1055486622, + 2783260926, 2418422845, 1425876347, 2681749907, 689577833, + 2439224882, 1119191698, 3284738598, 3248369824, 2184806341, + 3827067703, 1403375638, 2039560728, 2026930258, 1439858255, + 3646642925, 357706083, 801162144, 200302113, 843383109, + 3953988752, 803642989, 133507707, 1890262095, 2010928680, + 153102298, 62155903, 277159866, 3184049271, 3470490419, + 1263803797, 1744789719, 291191777, 2104793752, 3710673355, + 690715888, 3985842110, 2609560703, 850539005, 86744360, + 1737104979, 1863808169, 1774594416, 295814460, 349948339, + 2998856642, 2965669633, 1901828086, 3978738887, 1547972061, + 3099911135, 2005717380, 567557764, 4005749125, 2160875982, + 3708061218, 71131479, 4020136758, 2494015768, 1649237263, + 3904477723, 398737933, 1060721700, 1863476301, 370356512, + 3071414126, 2579819024, 1413367122, 2902740002, 111597792, + 3291486874, 2640531015, 3168695648, 2512654909, 3959449531, + 2099836667, 1724339088, 1513859793, 1867797563, 72940112, + 150365030, 2695841664, 1822792143, 1313669546, 2967322181, + 520611643, 353667991, 2717535171, 3765848346, 388428102, + 1356267895, 3512676772, 370279636, 3846898162, 230096495, + 1637173159, 611261822, 1005164736, 269482378, 3515088803, + 3384787851, 219854487, 3527128574, 1621986556, 2351564858, + 1464556636, 3969432414, 4241153635, 3481875215, 2028710485, + 2552303669, 398357876, 502240174, 2783848798, 3029135000, + 3389310739, 2505116094, 142532114, 3164584552, 2476051612, + 3402430270, 3909441351, 3427500434, 334653597, 3680534388, + 994471388, 3554495285, 1194116172, 2229772907, 1080120321, + 764714490, 2033099135, 14870392, 1699063853, 4063486208, + 1292743360, 2032090912, 72238972, 161094465, 1452285444, + 2672671278, 1692937611, 1323803845, 3240748400, 4018998180, + 747254077, 236045767, 3239449578, 983232024, 3337514013, + 1251769771, 3333700522, 410670915, 987407435, 2475716801, + 2872258033, 4098868775, 1252507952, 3804640001, 1349395704, + 3776831082, 2921973556, 4089719272, 2209056770, 4132418611, + 1349045766, 1096167788, 946557058, 2742739413, 675697683, + 981116951, 3762459934, 735892043, 2820765771, 3285067216, + 2160644040, 3791763118, 3326789900, 4049571064, 2680776632, + 3569204094, 65929649, 3389067210, 3597945585, 1844146738, + 2700511765, 329482853, 1760204187, 923334769, 4064120545, + 3501525441, 185277522, 1241941790, 3591317416, 417403194, + 1300287444, 568015210, 1937417620, 1293297106, 1132926831, + 2866724791, 3257502829, 2947848120, 3895316838, 522557077, + 3227142004, 3090084150, 1099385887, 281296826, 1305525858, + 4048212751, 1083053479, 1851665893, 2417839863, 1623516667, + 3571192609, 3711731288, 2688150423, 1385750380, 3001410324, + 3992036671, 438613795, 1675062808, 126103207, 3806023665, + 3378609204, 3872710810, 3254661971, 3271656093, 2954958773, + 2955771203, 943499290, 1783244758, 27256593, 2736330207, + 2854314347, 1414980118, 3499653814, 2716003330, 1906739972, + 2097871403, 833490830, 860249641, 1359898654, 681385897, + 768010275, 1337229341, 2176361026, 1243749829, 2535464086, + 3587794549, 257320265, 1799338138, 2326145708 ] + + 12345 + 432 + -8.30560467e-01 + + + 0 + + + 250 + + 250 + + + 1.03353433e+03 + 2.24648494e-02 + + 4.13413730e+01 + 7.91703800e-05 + +
diff --git a/tools/i-pi/examples/tutorial/tutorial-2/tutorial-2b.xml b/tools/i-pi/examples/tutorial/tutorial-2/tutorial-2b.xml new file mode 100755 index 000000000..d90bbc3e3 --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-2/tutorial-2b.xml @@ -0,0 +1,33 @@ + + + tutorial-1_RESTART + + + [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, kinetic_cv{kelvin}, pressure_cv{megapascal}, volume ] + [atom_f{piconewton}(atom=0;bead=0)] + positions{angstrom} + + + 100000 + 31415 + + +
localhost
+ 31415 +
+
+ + + + 250 + + 250 + + + 25 + + 1 + 25 + 0 + +
diff --git a/tools/i-pi/examples/tutorial/tutorial-3/our_ref.pdb b/tools/i-pi/examples/tutorial/tutorial-3/our_ref.pdb new file mode 100755 index 000000000..4734f8061 --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-3/our_ref.pdb @@ -0,0 +1,174 @@ +CRYST1 39.115 39.115 39.115 90.00 90.00 90.00 P 1 1 +ATOM 1 H2 1 1 0.000 0.000 0.000 0.00 0.00 0 +ATOM 2 H2 1 1 5.582 5.582 0.000 0.00 0.00 0 +ATOM 3 H2 1 1 5.582 0.000 5.582 0.00 0.00 0 +ATOM 4 H2 1 1 0.000 5.582 5.582 0.00 0.00 0 +ATOM 5 H2 1 1 0.000 0.000 11.165 0.00 0.00 0 +ATOM 6 H2 1 1 5.582 5.582 11.165 0.00 0.00 0 +ATOM 7 H2 1 1 5.582 0.000 16.747 0.00 0.00 0 +ATOM 8 H2 1 1 0.000 5.582 16.747 0.00 0.00 0 +ATOM 9 H2 1 1 0.000 0.000 22.330 0.00 0.00 0 +ATOM 10 H2 1 1 5.582 5.582 22.330 0.00 0.00 0 +ATOM 11 H2 1 1 5.582 0.000 27.912 0.00 0.00 0 +ATOM 12 H2 1 1 0.000 5.582 27.912 0.00 0.00 0 +ATOM 13 H2 1 1 0.000 0.000 33.495 0.00 0.00 0 +ATOM 14 H2 1 1 5.582 5.582 33.495 0.00 0.00 0 +ATOM 15 H2 1 1 0.000 11.165 0.000 0.00 0.00 0 +ATOM 16 H2 1 1 5.582 16.747 0.000 0.00 0.00 0 +ATOM 17 H2 1 1 5.582 11.165 5.582 0.00 0.00 0 +ATOM 18 H2 1 1 0.000 16.747 5.582 0.00 0.00 0 +ATOM 19 H2 1 1 0.000 11.165 11.165 0.00 0.00 0 +ATOM 20 H2 1 1 5.582 16.747 11.165 0.00 0.00 0 +ATOM 21 H2 1 1 5.582 11.165 16.747 0.00 0.00 0 +ATOM 22 H2 1 1 0.000 16.747 16.747 0.00 0.00 0 +ATOM 23 H2 1 1 0.000 11.165 22.330 0.00 0.00 0 +ATOM 24 H2 1 1 5.582 16.747 22.330 0.00 0.00 0 +ATOM 25 H2 1 1 5.582 11.165 27.912 0.00 0.00 0 +ATOM 26 H2 1 1 0.000 16.747 27.912 0.00 0.00 0 +ATOM 27 H2 1 1 0.000 11.165 33.495 0.00 0.00 0 +ATOM 28 H2 1 1 5.582 16.747 33.495 0.00 0.00 0 +ATOM 29 H2 1 1 0.000 22.330 0.000 0.00 0.00 0 +ATOM 30 H2 1 1 5.582 27.912 0.000 0.00 0.00 0 +ATOM 31 H2 1 1 5.582 22.330 5.582 0.00 0.00 0 +ATOM 32 H2 1 1 0.000 27.912 5.582 0.00 0.00 0 +ATOM 33 H2 1 1 0.000 22.330 11.165 0.00 0.00 0 +ATOM 34 H2 1 1 5.582 27.912 11.165 0.00 0.00 0 +ATOM 35 H2 1 1 5.582 22.330 16.747 0.00 0.00 0 +ATOM 36 H2 1 1 0.000 27.912 16.747 0.00 0.00 0 +ATOM 37 H2 1 1 0.000 22.330 22.330 0.00 0.00 0 +ATOM 38 H2 1 1 5.582 27.912 22.330 0.00 0.00 0 +ATOM 39 H2 1 1 5.582 22.330 27.912 0.00 0.00 0 +ATOM 40 H2 1 1 0.000 27.912 27.912 0.00 0.00 0 +ATOM 41 H2 1 1 0.000 22.330 33.495 0.00 0.00 0 +ATOM 42 H2 1 1 5.582 27.912 33.495 0.00 0.00 0 +ATOM 43 H2 1 1 0.000 33.495 0.000 0.00 0.00 0 +ATOM 44 H2 1 1 5.582 33.495 5.582 0.00 0.00 0 +ATOM 45 H2 1 1 0.000 33.495 11.165 0.00 0.00 0 +ATOM 46 H2 1 1 5.582 33.495 16.747 0.00 0.00 0 +ATOM 47 H2 1 1 0.000 33.495 22.330 0.00 0.00 0 +ATOM 48 H2 1 1 5.582 33.495 27.912 0.00 0.00 0 +ATOM 49 H2 1 1 0.000 33.495 33.495 0.00 0.00 0 +ATOM 50 H2 1 1 11.165 0.000 0.000 0.00 0.00 0 +ATOM 51 H2 1 1 16.747 5.582 0.000 0.00 0.00 0 +ATOM 52 H2 1 1 16.747 0.000 5.582 0.00 0.00 0 +ATOM 53 H2 1 1 11.165 5.582 5.582 0.00 0.00 0 +ATOM 54 H2 1 1 11.165 0.000 11.165 0.00 0.00 0 +ATOM 55 H2 1 1 16.747 5.582 11.165 0.00 0.00 0 +ATOM 56 H2 1 1 16.747 0.000 16.747 0.00 0.00 0 +ATOM 57 H2 1 1 11.165 5.582 16.747 0.00 0.00 0 +ATOM 58 H2 1 1 11.165 0.000 22.330 0.00 0.00 0 +ATOM 59 H2 1 1 16.747 5.582 22.330 0.00 0.00 0 +ATOM 60 H2 1 1 16.747 0.000 27.912 0.00 0.00 0 +ATOM 61 H2 1 1 11.165 5.582 27.912 0.00 0.00 0 +ATOM 62 H2 1 1 11.165 0.000 33.495 0.00 0.00 0 +ATOM 63 H2 1 1 16.747 5.582 33.495 0.00 0.00 0 +ATOM 64 H2 1 1 11.165 11.165 0.000 0.00 0.00 0 +ATOM 65 H2 1 1 16.747 16.747 0.000 0.00 0.00 0 +ATOM 66 H2 1 1 16.747 11.165 5.582 0.00 0.00 0 +ATOM 67 H2 1 1 11.165 16.747 5.582 0.00 0.00 0 +ATOM 68 H2 1 1 11.165 11.165 11.165 0.00 0.00 0 +ATOM 69 H2 1 1 16.747 16.747 11.165 0.00 0.00 0 +ATOM 70 H2 1 1 16.747 11.165 16.747 0.00 0.00 0 +ATOM 71 H2 1 1 11.165 16.747 16.747 0.00 0.00 0 +ATOM 72 H2 1 1 11.165 11.165 22.330 0.00 0.00 0 +ATOM 73 H2 1 1 16.747 16.747 22.330 0.00 0.00 0 +ATOM 74 H2 1 1 16.747 11.165 27.912 0.00 0.00 0 +ATOM 75 H2 1 1 11.165 16.747 27.912 0.00 0.00 0 +ATOM 76 H2 1 1 11.165 11.165 33.495 0.00 0.00 0 +ATOM 77 H2 1 1 16.747 16.747 33.495 0.00 0.00 0 +ATOM 78 H2 1 1 11.165 22.330 0.000 0.00 0.00 0 +ATOM 79 H2 1 1 16.747 27.912 0.000 0.00 0.00 0 +ATOM 80 H2 1 1 16.747 22.330 5.582 0.00 0.00 0 +ATOM 81 H2 1 1 11.165 27.912 5.582 0.00 0.00 0 +ATOM 82 H2 1 1 11.165 22.330 11.165 0.00 0.00 0 +ATOM 83 H2 1 1 16.747 27.912 11.165 0.00 0.00 0 +ATOM 84 H2 1 1 16.747 22.330 16.747 0.00 0.00 0 +ATOM 85 H2 1 1 11.165 27.912 16.747 0.00 0.00 0 +ATOM 86 H2 1 1 11.165 22.330 22.330 0.00 0.00 0 +ATOM 87 H2 1 1 16.747 27.912 22.330 0.00 0.00 0 +ATOM 88 H2 1 1 16.747 22.330 27.912 0.00 0.00 0 +ATOM 89 H2 1 1 11.165 27.912 27.912 0.00 0.00 0 +ATOM 90 H2 1 1 11.165 22.330 33.495 0.00 0.00 0 +ATOM 91 H2 1 1 16.747 27.912 33.495 0.00 0.00 0 +ATOM 92 H2 1 1 11.165 33.495 0.000 0.00 0.00 0 +ATOM 93 H2 1 1 16.747 33.495 5.582 0.00 0.00 0 +ATOM 94 H2 1 1 11.165 33.495 11.165 0.00 0.00 0 +ATOM 95 H2 1 1 16.747 33.495 16.747 0.00 0.00 0 +ATOM 96 H2 1 1 11.165 33.495 22.330 0.00 0.00 0 +ATOM 97 H2 1 1 16.747 33.495 27.912 0.00 0.00 0 +ATOM 98 H2 1 1 11.165 33.495 33.495 0.00 0.00 0 +ATOM 99 H2 1 1 22.330 0.000 0.000 0.00 0.00 0 +ATOM 100 H2 1 1 27.912 5.582 0.000 0.00 0.00 0 +ATOM 101 H2 1 1 27.912 0.000 5.582 0.00 0.00 0 +ATOM 102 H2 1 1 22.330 5.582 5.582 0.00 0.00 0 +ATOM 103 H2 1 1 22.330 0.000 11.165 0.00 0.00 0 +ATOM 104 H2 1 1 27.912 5.582 11.165 0.00 0.00 0 +ATOM 105 H2 1 1 27.912 0.000 16.747 0.00 0.00 0 +ATOM 106 H2 1 1 22.330 5.582 16.747 0.00 0.00 0 +ATOM 107 H2 1 1 22.330 0.000 22.330 0.00 0.00 0 +ATOM 108 H2 1 1 27.912 5.582 22.330 0.00 0.00 0 +ATOM 109 H2 1 1 27.912 0.000 27.912 0.00 0.00 0 +ATOM 110 H2 1 1 22.330 5.582 27.912 0.00 0.00 0 +ATOM 111 H2 1 1 22.330 0.000 33.495 0.00 0.00 0 +ATOM 112 H2 1 1 27.912 5.582 33.495 0.00 0.00 0 +ATOM 113 H2 1 1 22.330 11.165 0.000 0.00 0.00 0 +ATOM 114 H2 1 1 27.912 16.747 0.000 0.00 0.00 0 +ATOM 115 H2 1 1 27.912 11.165 5.582 0.00 0.00 0 +ATOM 116 H2 1 1 22.330 16.747 5.582 0.00 0.00 0 +ATOM 117 H2 1 1 22.330 11.165 11.165 0.00 0.00 0 +ATOM 118 H2 1 1 27.912 16.747 11.165 0.00 0.00 0 +ATOM 119 H2 1 1 27.912 11.165 16.747 0.00 0.00 0 +ATOM 120 H2 1 1 22.330 16.747 16.747 0.00 0.00 0 +ATOM 121 H2 1 1 22.330 11.165 22.330 0.00 0.00 0 +ATOM 122 H2 1 1 27.912 16.747 22.330 0.00 0.00 0 +ATOM 123 H2 1 1 27.912 11.165 27.912 0.00 0.00 0 +ATOM 124 H2 1 1 22.330 16.747 27.912 0.00 0.00 0 +ATOM 125 H2 1 1 22.330 11.165 33.495 0.00 0.00 0 +ATOM 126 H2 1 1 27.912 16.747 33.495 0.00 0.00 0 +ATOM 127 H2 1 1 22.330 22.330 0.000 0.00 0.00 0 +ATOM 128 H2 1 1 27.912 27.912 0.000 0.00 0.00 0 +ATOM 129 H2 1 1 27.912 22.330 5.582 0.00 0.00 0 +ATOM 130 H2 1 1 22.330 27.912 5.582 0.00 0.00 0 +ATOM 131 H2 1 1 22.330 22.330 11.165 0.00 0.00 0 +ATOM 132 H2 1 1 27.912 27.912 11.165 0.00 0.00 0 +ATOM 133 H2 1 1 27.912 22.330 16.747 0.00 0.00 0 +ATOM 134 H2 1 1 22.330 27.912 16.747 0.00 0.00 0 +ATOM 135 H2 1 1 22.330 22.330 22.330 0.00 0.00 0 +ATOM 136 H2 1 1 27.912 27.912 22.330 0.00 0.00 0 +ATOM 137 H2 1 1 27.912 22.330 27.912 0.00 0.00 0 +ATOM 138 H2 1 1 22.330 27.912 27.912 0.00 0.00 0 +ATOM 139 H2 1 1 22.330 22.330 33.495 0.00 0.00 0 +ATOM 140 H2 1 1 27.912 27.912 33.495 0.00 0.00 0 +ATOM 141 H2 1 1 22.330 33.495 0.000 0.00 0.00 0 +ATOM 142 H2 1 1 27.912 33.495 5.582 0.00 0.00 0 +ATOM 143 H2 1 1 22.330 33.495 11.165 0.00 0.00 0 +ATOM 144 H2 1 1 27.912 33.495 16.747 0.00 0.00 0 +ATOM 145 H2 1 1 22.330 33.495 22.330 0.00 0.00 0 +ATOM 146 H2 1 1 27.912 33.495 27.912 0.00 0.00 0 +ATOM 147 H2 1 1 22.330 33.495 33.495 0.00 0.00 0 +ATOM 148 H2 1 1 33.495 0.000 0.000 0.00 0.00 0 +ATOM 149 H2 1 1 33.495 5.582 5.582 0.00 0.00 0 +ATOM 150 H2 1 1 33.495 0.000 11.165 0.00 0.00 0 +ATOM 151 H2 1 1 33.495 5.582 16.747 0.00 0.00 0 +ATOM 152 H2 1 1 33.495 0.000 22.330 0.00 0.00 0 +ATOM 153 H2 1 1 33.495 5.582 27.912 0.00 0.00 0 +ATOM 154 H2 1 1 33.495 0.000 33.495 0.00 0.00 0 +ATOM 155 H2 1 1 33.495 11.165 0.000 0.00 0.00 0 +ATOM 156 H2 1 1 33.495 16.747 5.582 0.00 0.00 0 +ATOM 157 H2 1 1 33.495 11.165 11.165 0.00 0.00 0 +ATOM 158 H2 1 1 33.495 16.747 16.747 0.00 0.00 0 +ATOM 159 H2 1 1 33.495 11.165 22.330 0.00 0.00 0 +ATOM 160 H2 1 1 33.495 16.747 27.912 0.00 0.00 0 +ATOM 161 H2 1 1 33.495 11.165 33.495 0.00 0.00 0 +ATOM 162 H2 1 1 33.495 22.330 0.000 0.00 0.00 0 +ATOM 163 H2 1 1 33.495 27.912 5.582 0.00 0.00 0 +ATOM 164 H2 1 1 33.495 22.330 11.165 0.00 0.00 0 +ATOM 165 H2 1 1 33.495 27.912 16.747 0.00 0.00 0 +ATOM 166 H2 1 1 33.495 22.330 22.330 0.00 0.00 0 +ATOM 167 H2 1 1 33.495 27.912 27.912 0.00 0.00 0 +ATOM 168 H2 1 1 33.495 22.330 33.495 0.00 0.00 0 +ATOM 169 H2 1 1 33.495 33.495 0.000 0.00 0.00 0 +ATOM 170 H2 1 1 33.495 33.495 11.165 0.00 0.00 0 +ATOM 171 H2 1 1 33.495 33.495 22.330 0.00 0.00 0 +ATOM 172 H2 1 1 33.495 33.495 33.495 0.00 0.00 0 +END diff --git a/tools/i-pi/examples/tutorial/tutorial-3/tutorial-3_npt.xml b/tools/i-pi/examples/tutorial/tutorial-3/tutorial-3_npt.xml new file mode 100755 index 000000000..2392797e0 --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-3/tutorial-3_npt.xml @@ -0,0 +1,31 @@ + + + tutorial-3_RESTART + + + [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, kinetic_cv{kelvin}, pressure_cv{megapascal}, volume ] + positions{angstrom} + + + ??? + + +
localhost
+ 31415 +
+
+ + + + ??? + + ??? + + + ??? + + ??? + 25 + 0 + +
diff --git a/tools/i-pi/examples/tutorial/tutorial-3/tutorial-3_nvt.xml b/tools/i-pi/examples/tutorial/tutorial-3/tutorial-3_nvt.xml new file mode 100755 index 000000000..7a333be0f --- /dev/null +++ b/tools/i-pi/examples/tutorial/tutorial-3/tutorial-3_nvt.xml @@ -0,0 +1,25 @@ + + + our_ref.pdb + ??? + + + [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, kinetic_cv{kelvin}, pressure_cv{megapascal} ] + positions{angstrom} + + + ??? + + +
localhost
+ 31415 +
+
+ + + ??? + + ??? + 25 + +
diff --git a/tools/i-pi/i-pi b/tools/i-pi/i-pi new file mode 100755 index 000000000..fa6a1ae62 --- /dev/null +++ b/tools/i-pi/i-pi @@ -0,0 +1,60 @@ +#!/usr/bin/python + +"""Main script from which the simulation is run. + +Deals with creation of the simulation object, reading the input file and +initialising the system. + +Run using: + i-pi input_file.xml + +Where 'input_file.xml' should be replaced by the name of the xml input file from +which the system data will be read. For a description of how the input file +should be formatted, see the reference manual. + +Functions: + main: Runs the simulation. +""" + +import sys +from ipi.engine import simulation +from ipi.inputs.simulation import InputSimulation +from ipi.utils.io.io_xml import * +from ipi.utils.messages import banner, help, verbosity + +def main(file_name): + """Runs the simulation. + + Will run automatically when the module is used as a script. + """ + + ifile = open(file_name,"r") + xmlrestart = xml_parse_file(ifile) # Parses the file. + ifile.close() + + simrestart = InputSimulation() + # Checks the input and partitions it appropriately. + simrestart.parse(xmlrestart.fields[0][1]) + # Here we must do this manually; from here on everything should be automated by the messages classes + if simrestart.verbosity.fetch() != "quiet" : + banner() + print " # i-pi starting from input file: ", file_name + if simrestart.verbosity.fetch() != "quiet" and simrestart.verbosity.fetch() != "low" : + print " --- begin input file content --- " + ifile = open(file_name,"r") + for line in ifile.readlines(): + print line, + ifile.close() + print " --- end input file content --- " + + simul = simrestart.fetch() # Creates the appropriate simulation object. + simul.run() + + del simul + +#This is what is run if the file is run as a script. +if __name__ == '__main__': + if (len(sys.argv) != 2): + help() + else: + main(sys.argv[1]) diff --git a/tools/i-pi/ipi/README b/tools/i-pi/ipi/README new file mode 100644 index 000000000..a775b2066 --- /dev/null +++ b/tools/i-pi/ipi/README @@ -0,0 +1,14 @@ + -- Source code directory -- + + * This is the main source directory. + + * Files: + - i-pi: Runs the simulation. + + * Directories: + - engine: Holds the modules containing the objects used during the + simulation. + - interfaces: Holds the modules containing the socket interface code. + - utils: Holds the modules containing utility functions. + - inputs: Holds the modules that deals with reading the input and the + restart mechanism. diff --git a/tools/i-pi/ipi/__init__.py b/tools/i-pi/ipi/__init__.py new file mode 100644 index 000000000..0ed5b4dbf --- /dev/null +++ b/tools/i-pi/ipi/__init__.py @@ -0,0 +1 @@ +__all__ = ["engine", "inputs", "interfaces", "utils"] diff --git a/tools/i-pi/ipi/engine/README b/tools/i-pi/ipi/engine/README new file mode 100644 index 000000000..0ce3661b3 --- /dev/null +++ b/tools/i-pi/ipi/engine/README @@ -0,0 +1,18 @@ + -- Engine code directory -- + + * This is the directory containing all the major class definitions. + + * Files: + - atoms.py: Deals with classical simulations. + - barostats.py: Deals with constant pressure simulations. + - beads.py: Deals with quantum simulations. + - cell.py: Deals with the simulation box. + - ensembles.py: Deals with the different ensembles. + - forces.py: Deals with creating the jobs to send to the driver code. + - initializer.py: Deals with initialization of the simulation. + - normalmodes.py: Deals with the normal mode transformations. + - outputs.py: Deals with the output files. + - properties.py: Deals with calculating all the output properties. + - simulation.py: Deals with all the top level information, such as + input/output. + - thermostats.py: Deals with constant temperature simulations. diff --git a/tools/i-pi/ipi/engine/__init__.py b/tools/i-pi/ipi/engine/__init__.py new file mode 100644 index 000000000..609556a5e --- /dev/null +++ b/tools/i-pi/ipi/engine/__init__.py @@ -0,0 +1,3 @@ +__all__ = ["atoms", "cell", "simulation", "forces", "ensembles", "properties", + "thermostats", "barostats", "beads", "outputs", "normalmodes", + "initializer" ] diff --git a/tools/i-pi/ipi/engine/atoms.py b/tools/i-pi/ipi/engine/atoms.py new file mode 100644 index 000000000..02ffcd755 --- /dev/null +++ b/tools/i-pi/ipi/engine/atoms.py @@ -0,0 +1,269 @@ +"""Contains the classes which deal with the atoms. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Used for holding information about the atoms, including their positions, masses +momenta and kinetic energy. Has separate classes for accessing the global +arrays of atoms and for individual atoms. + +Classes: + Atom: Class with methods dealing with individual atoms. + Atoms: Class with methods dealing with all the atoms. +""" + +__all__ = ['Atoms', 'Atom'] + +import numpy as np +from ipi.utils.depend import * +from ipi.utils import units + +class Atom(dobject): + """Represent an atom, with position, velocity, mass and related properties. + + This is actually only an interface to the Atoms class, i.e. only stores + views of the large arrays which contain all the coordinates. + + Attributes: + kin: The kinetic energy of the atom. + kstress: The contribution of the atom to the kinetic stress tensor. + + Depend objects: + p: The three components of the momentum of the atom. + q: The three components of the position of the atom. + m: The mass of the atom. + name: The name of the atom. + m3: An array of 3 elements with each element being the mass of the atom. + Used when each degree of freedom needs to be divided by the mass. + """ + + def __init__(self, system, index): + """Initialises Atom. + + Args: + system: An Atoms object containing the required atom. + index: An integer giving the index of the required atom in the atoms + list. Note that indices start from 0. + """ + + dset(self,"p",system.p[3*index:3*index+3]) + dset(self,"q",system.q[3*index:3*index+3]) + dset(self,"m",system.m[index:index+1]) + dset(self,"name",system.names[index:index+1]) + dset(self,"m3",system.m3[3*index:3*index+3]) + + @property + def kin(self): + """Calculates the contribution of the atom to the kinetic energy.""" + + return np.dot(self.p,self.p)/(2.0*self.m) + + @property + def kstress(self): + """Calculates the contribution of the atom to the kinetic stress + tensor. + """ + + p = depstrip(self.p) + ks = numpy.zeros((3,3),float) + for i in range(3): + for j in range(i,3): + ks[i,j] = p[i]*p[j] + return ks/self.m + + +class Atoms(dobject): + """Storage for the atoms' positions, masses and velocities. + + Everything is stored as 3*n sized contiguous arrays, + and a convenience-access is provided through a list of Atom objects. + + Attributes: + natoms: The number of atoms. + + Depend objects: + p: An array giving the components of the atom positions. + q: An array giving the components of the atom momenta. + m: An array giving the atom masses. + names: An array giving the atom names. + m3: An array of 3*n elements where each element of m has been copied + three times. Used when each degree of freedom needs to be divided + by the mass. + M: The total mass of all the atoms. + kin: The total kinetic energy of the atoms. Depends on p and m3. + kstress: The contribution of the atoms to the kinetic stress tensor. + Depends on px, py, pz and m. + qx: An array giving the x components of the positions. + qy: An array giving the y components of the positions. + qz: An array giving the z components of the positions. + px: An array giving the x components of the momenta. + py: An array giving the y components of the momenta. + pz: An array giving the z components of the momenta. + """ + + + def __init__(self, natoms, _prebind=None): + """Initialises Atoms. + + Each replica and the centroid coordinate are all held as Atoms objects, + and so slices of the global position and momentum arrays must be used in + the initialisation so that they always agree with each other. + + Args: + natoms: An integer giving the number of atoms. + _prebind: An optional tuple of four elements; a depend_array of length + 3*natoms for the positions, another for the momenta, a depend_array + of length natoms for the masses and another for the names. + """ + + self.natoms = natoms + + if _prebind is None: + dset(self,"q",depend_array(name="q",value=np.zeros(3*natoms, float))) + dset(self,"p",depend_array(name="p",value=np.zeros(3*natoms, float))) + dset(self,"m",depend_array(name="m",value=np.zeros(natoms, float))) + dset(self,"names", + depend_array(name="names",value=np.zeros(natoms, np.dtype('|S6')))) + else: + dset(self,"q",_prebind[0]) + dset(self,"p",_prebind[1]) + dset(self,"m",_prebind[2]) + dset(self,"names",_prebind[3]) + + self.px = self.p[0:3*natoms:3] + self.py = self.p[1:3*natoms:3] + self.pz = self.p[2:3*natoms:3] + self.qx = self.q[0:3*natoms:3] + self.qy = self.q[1:3*natoms:3] + self.qz = self.q[2:3*natoms:3] + + dset(self,"m3", + depend_array(name="m3",value=np.zeros(3*natoms, float),func=self.mtom3, + dependencies=[dget(self,"m")])) + + dset(self,"M", + depend_value(name="M",func=self.get_msum, + dependencies=[dget(self,"m")]) ) + dset(self,"kin", + depend_value(name="kin",func=self.get_kin, + dependencies=[dget(self,"p"),dget(self,"m3")]) ) + dset(self,"kstress", + depend_value(name="kstress",func=self.get_kstress, + dependencies=[dget(self,"px"),dget(self,"py"),dget(self,"pz"),dget(self,"m")]) ) + + def copy(self): + """Creates a new Atoms object. + + Returns: + An Atoms object with the same q, p, m and names arrays as the original. + """ + + newat = Atoms(self.natoms) + newat.q[:] = self.q + newat.p[:] = self.p + newat.m[:] = self.m + newat.names[:] = self.names + return newat + + def __len__(self): + """Length function. + + This is called whenever the standard function len(atoms) is used. + + Returns: + The number of atoms. + """ + + return self.natoms + + def __getitem__(self,index): + """Overwrites standard getting function. + + This is called whenever the standard function atoms[index] is used. + Returns an Atom object with the appropriate position and momenta arrays. + Note that they are dynamically generated each time an Atom needs to be + accessed, as this reduces the number of depend objects that need to be + held at any one time. + + Args: + index: The index of the atom to be accessed. + + Returns: + The atom given by the index. + """ + + return Atom(self,index) + + def __setitem__(self,index,value): + """Overwrites standard setting function. + + This is called whenever the standard function atoms[index]=value is used. + Changes the position and momenta of the appropriate slice of the global + position and momentum arrays to those given by value. + Note that they are dynamically generated each time an Atom needs to be + accessed, as this reduces the number of depend objects that need to be + held at any one time. + + Args: + index: The atom to be changed. + value: The Atom object that holds the new values. + """ + + pat = Atom(self,index) + pat.p = value.p + pat.q = value.q + pat.m = value.m + pat.name = value.name + + def get_msum(self): + """Calculates the total mass.""" + + return self.m.sum() + + def mtom3(self): + """Returns a 3*n mass array. + + Returns: + An array of 3*n elements where each element of m has been copied + three times. Used when each degree of freedom needs to be divided + by the mass. + """ + + m3 = np.zeros(3*self.natoms,float) + m3[0:3*self.natoms:3] = self.m + m3[1:3*self.natoms:3] = m3[0:3*self.natoms:3] + m3[2:3*self.natoms:3] = m3[0:3*self.natoms:3] + return m3 + + def get_kin(self): + """Calculates the total kinetic energy of the system.""" + + p = depstrip(self.p) + return 0.5*np.dot(p,p/depstrip(self.m3)) + + def get_kstress(self): + """Calculates the total contribution of the atoms to the kinetic stress + tensor -- not volume-scaled + """ + + ks = np.zeros((3,3),float) + ks[0,0] = np.dot(self.px,self.px/self.m) + ks[1,1] = np.dot(self.py,self.py/self.m) + ks[2,2] = np.dot(self.pz,self.pz/self.m) + ks[0,1] = np.dot(self.px,self.py/self.m) + ks[0,2] = np.dot(self.px,self.pz/self.m) + ks[1,2] = np.dot(self.py,self.pz/self.m) + return ks diff --git a/tools/i-pi/ipi/engine/barostats.py b/tools/i-pi/ipi/engine/barostats.py new file mode 100644 index 000000000..5dbc6049d --- /dev/null +++ b/tools/i-pi/ipi/engine/barostats.py @@ -0,0 +1,450 @@ +"""Contains the classes that deal with constant pressure dynamics. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Contains the algorithms which propagate the position and momenta steps in the +constant pressure ensemble. Holds the properties directly related to +these ensembles, such as the internal and external pressure and stress. + +Classes: + Barostat: Base barostat class with the generic methods and attributes. + BaroBZP: Generates dynamics with a stochastic barostat -- see + Ceriotti, More, Manolopoulos, Comp. Phys. Comm. 2013 for + implementation details. +""" + +# NB: this file also contains a 'BaroMHT' class, that follows more closely the +# Martyna, Hughes, Tuckerman implementation of a PIMD barostat. However it is so +# close to the BZP implementation that we disabled it for the sake of simplicity +# BaroMHT: Generates dynamics according to the method of G. Martyna, A. +# Hughes and M. Tuckerman, J. Chem. Phys., 110, 3275. + +__all__ = ['Barostat', 'BaroBZP'] + +import numpy as np +from ipi.utils.depend import * +from ipi.utils.units import * +from ipi.utils.mathtools import eigensystem_ut3x3, invert_ut3x3, exp_ut3x3, det_ut3x3 +from ipi.inputs.thermostats import InputThermo +from ipi.engine.thermostats import Thermostat + +class Barostat(dobject): + """Base barostat class. + + Gives the standard methods and attributes needed in all the barostat classes. + + Attributes: + beads: A beads object giving the atoms positions + cell: A cell object giving the system box. + forces: A forces object giving the virial and the forces acting on + each bead. + nm: An object to do the normal mode transformation. + thermostat: A thermostat coupled to the barostat degrees of freedom. + mdof: The number of atomic degrees of freedom + + Depend objects: + dt: The time step used in the algorithms. Depends on the simulation dt. + temp: The (classical) simulation temperature. Higher than the physical + temperature by a factor of the number of beads. + tau: The timescale associated with the piston + pext: The external pressure + ebaro: The conserved quantity associated with the barostat. + pot: The potential energy associated with the barostat. + kstress: The system kinetic stress tensor. + stress: The system stress tensor. + press: The system pressure. + """ + + def __init__(self, dt=None, temp=None, pext=None, tau=None, ebaro=None, thermostat=None): + """Initialises base barostat class. + + Note that the external stress and the external pressure are synchronized. + This makes most sense going from the stress to the pressure, but if you + must go in the other direction the stress is assumed to be isotropic. + + Args: + dt: Optional float giving the time step for the algorithms. Defaults + to the simulation dt. + temp: Optional float giving the temperature for the thermostat. + Defaults to the simulation temp. + pext: Optional float giving the external pressure. + tau: Optional float giving the time scale associated with the barostat. + ebaro: Optional float giving the conserved quantity already stored + in the barostat initially. Used on restart. + thermostat: The thermostat connected to the barostat degree of freedom. + """ + + dset(self,"dt",depend_value(name='dt')) + if not dt is None: + self.dt = dt + else: self.dt = 1.0 + + dset(self, "temp", depend_value(name="temp")) + if not temp is None: + self.temp = temp + else: self.temp = 1.0 + + dset(self,"tau",depend_value(name='tau')) + if not tau is None: + self.tau = tau + else: self.tau = 1.0 + + dset(self,"pext",depend_value(name='pext')) + if not pext is None: + self.pext = pext + else: self.pext = 0.0 + + dset(self,"ebaro",depend_value(name='ebaro')) + if not ebaro is None: + self.ebaro = ebaro + else: self.ebaro = 0.0 + + if thermostat is None: + thermostat = Thermostat() + self.thermostat = thermostat + + # pipes timestep and temperature to the thermostat + deppipe(self,"dt", self.thermostat, "dt") + deppipe(self, "temp", self.thermostat,"temp") + + + def bind(self, beads, nm, cell, forces, prng=None, fixdof=None): + """Binds beads, cell and forces to the barostat. + + This takes a beads object, a cell object and a forcefield object and + makes them members of the barostat. It also then creates the objects that + will hold the data needed in the barostat algorithms and the dependency + network. + + Args: + beads: The beads object from which the bead positions are taken. + nm: The normal modes propagator object + cell: The cell object from which the system box is taken. + forces: The forcefield object from which the force and virial are + taken. + prng: The parent PRNG to bind the thermostat to + fixdof: The number of blocked degrees of freedom. + """ + + self.beads = beads + self.cell = cell + self.forces = forces + self.nm = nm + + dset(self,"pot", + depend_value(name='pot', func=self.get_pot, + dependencies=[ dget(cell,"V"), dget(self,"pext") ])) + dset(self,"kstress", + depend_value(name='kstress', func=self.get_kstress, + dependencies=[ dget(beads,"q"), dget(beads,"qc"), dget(beads,"pc"), dget(forces,"f") ])) + dset(self,"stress", + depend_value(name='stress', func=self.get_stress, + dependencies=[ dget(self,"kstress"), dget(cell,"V"), dget(forces,"vir") ])) + dset(self,"press", + depend_value(name='press', func=self.get_press, + dependencies=[ dget(self,"stress") ])) + + if fixdof is None: + self.mdof = float(self.beads.natoms)*3.0 + else: + self.mdof = float(self.beads.natoms)*3.0 - float(fixdof) + + def get_pot(self): + """Calculates the elastic strain energy of the cell.""" + + # NOTE: since there are nbeads replicas of the unit cell, the enthalpy contains a nbeads factor + return self.cell.V*self.pext*self.beads.nbeads + + def get_kstress(self): + """Calculates the quantum centroid virial kinetic stress tensor + estimator. + """ + + kst = np.zeros((3,3),float) + q = depstrip(self.beads.q) + qc = depstrip(self.beads.qc) + pc = depstrip(self.beads.pc) + m = depstrip(self.beads.m) + na3 = 3*self.beads.natoms + fall = depstrip(self.forces.f) + + for b in range(self.beads.nbeads): + for i in range(3): + for j in range(i,3): + kst[i,j] -= np.dot(q[b,i:na3:3] - qc[i:na3:3], + fall[b,j:na3:3]) + + # NOTE: In order to have a well-defined conserved quantity, the Nf kT term in the + # diagonal stress estimator must be taken from the centroid kinetic energy. + for i in range(3): + kst[i,i] += np.dot(pc[i:na3:3],pc[i:na3:3]/m) *self.beads.nbeads + + return kst + + def get_stress(self): + """Calculates the internal stress tensor.""" + + return (self.kstress + self.forces.vir)/self.cell.V + + def get_press(self): + """Calculates the internal pressure.""" + + return np.trace(self.stress)/3.0 + + def pstep(self): + """Dummy momenta propagator step.""" + + pass + + def qcstep(self): + """Dummy centroid position propagator step.""" + + pass + + +class BaroBZP(Barostat): + """Bussi-Zykova-Parrinello barostat class. + + Just extends the standard class adding finite-dt propagators for the barostat + velocities, positions, piston. + + Depend objects: + p: The momentum associated with the volume degree of freedom. + m: The mass associated with the volume degree of freedom. + """ + + def __init__(self, dt=None, temp=None, pext=None, tau=None, ebaro=None, thermostat=None, p=None): + """Initializes BZP barostat. + + Args: + dt: Optional float giving the time step for the algorithms. Defaults + to the simulation dt. + temp: Optional float giving the temperature for the thermostat. + Defaults to the simulation temp. + pext: Optional float giving the external pressure. + tau: Optional float giving the time scale associated with the barostat. + ebaro: Optional float giving the conserved quantity already stored + in the barostat initially. Used on restart. + thermostat: The thermostat connected to the barostat degree of freedom. + p: Optional initial volume conjugate momentum. Defaults to 0. + """ + + + super(BaroBZP, self).__init__(dt, temp, pext, tau, ebaro, thermostat) + + dset(self,"p", depend_array(name='p', value=np.atleast_1d(0.0))) + + if not p is None: + self.p = np.asarray([p]) + else: + self.p = 0.0 + + def bind(self, beads, nm, cell, forces, prng=None, fixdof=None): + """Binds beads, cell and forces to the barostat. + + This takes a beads object, a cell object and a forcefield object and + makes them members of the barostat. It also then creates the objects that + will hold the data needed in the barostat algorithms and the dependency + network. + + Args: + beads: The beads object from which the bead positions are taken. + nm: The normal modes propagator object + cell: The cell object from which the system box is taken. + forces: The forcefield object from which the force and virial are + taken. + prng: The parent PRNG to bind the thermostat to + fixdof: The number of blocked degrees of freedom. + """ + + super(BaroBZP, self).bind(beads, nm, cell, forces, prng, fixdof) + + # obtain the thermostat mass from the given time constant + # note that the barostat temperature is nbeads times the physical T + dset(self,"m", depend_array(name='m', value=np.atleast_1d(0.0), + func=(lambda:np.asarray([self.tau**2*3*self.beads.natoms*Constants.kb*self.temp])), + dependencies=[ dget(self,"tau"), dget(self,"temp") ] )) + + # binds the thermostat to the piston degrees of freedom + self.thermostat.bind(pm=[ self.p, self.m ], prng=prng) + + dset(self,"kin",depend_value(name='kin', + func=(lambda:0.5*self.p[0]**2/self.m[0]), + dependencies= [dget(self,"p"), dget(self,"m")] ) ) + + # the barostat energy must be computed from bits & pieces (overwrite the default) + dset(self, "ebaro", depend_value(name='ebaro', func=self.get_ebaro, + dependencies=[ dget(self, "kin"), dget(self, "pot"), + dget(self.cell, "V"), dget(self, "temp"), + dget(self.thermostat,"ethermo")] )) + + def get_ebaro(self): + """Calculates the barostat conserved quantity.""" + + return self.thermostat.ethermo + self.kin + self.pot - np.log(self.cell.V)*Constants.kb*self.temp + + + def pstep(self): + """Propagates the momenta for half a time step.""" + + dthalf = self.dt*0.5 + dthalf2 = dthalf**2 + dthalf3 = dthalf**3/3.0 + + # This differs from the BZP thermostat in that it uses just one kT in the propagator. + # This leads to an ensemble equaivalent to Martyna-Hughes-Tuckermann for both fixed and moving COM + # Anyway, it is a small correction so whatever. + self.p += dthalf*3.0*( self.cell.V* ( self.press - self.beads.nbeads*self.pext ) + + Constants.kb*self.temp ) + + fc = np.sum(depstrip(self.forces.f),0)/self.beads.nbeads + m = depstrip(self.beads.m3)[0] + pc = depstrip(self.beads.pc) + + # I am not 100% sure, but these higher-order terms come from integrating the pressure virial term, + # so they should need to be multiplied by nbeads to be consistent with the equations of motion in the PI context + # again, these are tiny tiny terms so whatever. + self.p += (dthalf2*np.dot(pc,fc/m) + dthalf3*np.dot(fc,fc/m)) * self.beads.nbeads + + self.beads.p += depstrip(self.forces.f)*dthalf + + def qcstep(self): + """Propagates the centroid position and momentum and the volume.""" + + v = self.p[0]/self.m[0] + expq, expp = (np.exp(v*self.dt), np.exp(-v*self.dt)) + + m = depstrip(self.beads.m3)[0] + + self.nm.qnm[0,:] *= expq + self.nm.qnm[0,:] += ((expq-expp)/(2.0*v))* (depstrip(self.nm.pnm)[0,:]/m) + self.nm.pnm[0,:] *= expp + + self.cell.h *= expq + + +class BaroMHT(Barostat): + """Martyna-Hughes-Tuckerman barostat class. + + Just extends the standard class adding finite-dt propagators for the barostat + velocities, positions, piston. + + Depend objects: + p: The momentum associated with the volume degree of freedom. + m: The mass associated with the volume degree of freedom. + """ + + def __init__(self, dt=None, temp=None, pext=None, tau=None, ebaro=None, thermostat=None, p=None): + """Initializes MHT barostat. + + Args: + dt: Optional float giving the time step for the algorithms. Defaults + to the simulation dt. + temp: Optional float giving the temperature for the thermostat. + Defaults to the simulation temp. + pext: Optional float giving the external pressure. + tau: Optional float giving the time scale associated with the barostat. + ebaro: Optional float giving the conserved quantity already stored + in the barostat initially. Used on restart. + thermostat: The thermostat connected to the barostat degree of freedom. + p: Optional initial volume conjugate momentum. Defaults to 0. + """ + + super(BaroMHT, self).__init__(dt, temp, pext, tau, ebaro, thermostat) + + dset(self,"p", depend_array(name='p', value=np.atleast_1d(0.0))) + + if not p is None: + self.p = np.asarray([p]) + else: + self.p = 0.0 + + def bind(self, beads, nm, cell, forces, prng=None, fixdof=None): + """Binds beads, cell and forces to the barostat. + + This takes a beads object, a cell object and a forcefield object and + makes them members of the barostat. It also then creates the objects that + will hold the data needed in the barostat algorithms and the dependency + network. + + Args: + beads: The beads object from which the bead positions are taken. + nm: The normal modes propagator object + cell: The cell object from which the system box is taken. + forces: The forcefield object from which the force and virial are + taken. + prng: The parent PRNG to bind the thermostat to + fixdof: The number of blocked degrees of freedom. + """ + + super(BaroMHT, self).bind(beads, nm, cell, forces, prng, fixdof) + + # obtain the thermostat mass from the given time constant + # note that the barostat temperature is nbeads times the physical T + dset(self,"m", depend_array(name='m', value=np.atleast_1d(0.0), + func=(lambda:np.asarray([self.tau**2*3*self.beads.natoms*Constants.kb*self.temp])), + dependencies=[ dget(self,"tau"), dget(self,"temp") ] )) + + # binds the thermostat to the piston degrees of freedom + self.thermostat.bind(pm=[ self.p, self.m ], prng=prng) + + dset(self,"kin",depend_value(name='kin', + func=(lambda:0.5*self.p[0]**2/self.m[0]), + dependencies=[dget(self,"p"), dget(self,"m")] ) ) + + # the barostat energy must be computed from bits & pieces (overwrite the default) + dset(self, "ebaro", depend_value(name='ebaro', func=self.get_ebaro, + dependencies=[ dget(self, "kin"), dget(self, "pot"), + dget(self.cell, "V"), dget(self, "temp"), + dget(self.thermostat,"ethermo")])) + + def get_ebaro(self): + """Calculates the barostat conserved quantity.""" + + return self.thermostat.ethermo + self.kin + self.pot + + def pstep(self): + """Propagates the momenta for half a time step.""" + + dthalf = self.dt*0.5 + dthalf2 = dthalf**2 + dthalf3 = dthalf**3/3.0 + + fc = np.sum(depstrip(self.forces.f),0)/float(self.beads.nbeads) + m = depstrip(self.beads.m3)[0] + pc = depstrip(self.beads.pc) + + self.p += dthalf*3.0*( self.cell.V* ( self.press - self.beads.nbeads*self.pext ) + + float(self.beads.nbeads)/self.mdof*np.dot(pc,pc/m) ) + + self.beads.p += depstrip(self.forces.f)*dthalf + + def qcstep(self): + """Propagates the centroid position and momentum and the volume.""" + + v = self.p[0]/self.m[0] + adof = (1 + 3.0/self.mdof) + expq, expp = (np.exp(v*self.dt), np.exp( -v*self.dt * adof ) ) + + m = depstrip(self.beads.m3)[0] + + self.nm.qnm[0,:] *= expq + self.nm.qnm[0,:] += ((expq-expp)/(v*(1+adof)) * + (depstrip(self.nm.pnm)[0,:])/m) + self.nm.pnm[0,:] *= expp + + self.cell.h *= expq diff --git a/tools/i-pi/ipi/engine/beads.py b/tools/i-pi/ipi/engine/beads.py new file mode 100644 index 000000000..ba4ddf150 --- /dev/null +++ b/tools/i-pi/ipi/engine/beads.py @@ -0,0 +1,323 @@ +"""Contains the classes which deal with all the beads. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Used for holding information about the beads, including their positions, masses +momenta and kinetic energy. Has different objects for the position and normal +mode representations, and has a special centroid atoms object for when the +centroid coordinate is required. + +Classes: + Beads: Class with methods dealing with all the beads. +""" + +__all__ = ['Beads'] + +import numpy as np +from ipi.utils.depend import * +from ipi.engine.atoms import Atoms +from ipi.utils import units + +class Beads(dobject): + """Storage for the beads positions and velocities. + + Everything is stored as (nbeads,3*natoms) sized contiguous arrays, + and a convenience-access to each replica of the system is provided through a + list of Atoms objects. Contains arrays of both the normal mode representation + and the position representation, and various sized arrays for the atom + labels and masses. Also contains the potential and force between + neighbouring replicas. + + Attributes: + natoms: The number of atoms. + nbeads: The number of beads. + _blist: A list of Atoms objects for each replica of the system. Each + replica is assumed to have the same mass and atom label. + centroid: An atoms object giving the centroid coordinate of the beads. + + Depend objects: + names: An array giving the atom names. + m: An array giving the atom masses. + m3: An array giving the mass associated with each degree of freedom. + sm3: An array giving the square root of m3. + q: An array giving all the bead positions. + p: An array giving all the bead momenta. + qc: An array giving the centroid positions. Depends on qnm. + pc: An array giving the centroid momenta. Depends on pnm. + vpath: The spring potential between the beads, divided by omegan**2. + Depends on q. + fpath: The spring force between the beads, divided by omegan**2. + Depends on q. + kins: A list of the kinetic energy of each replica. + kin: The total kinetic energy of the system. Note that this is not the + same as the estimate of the kinetic energy of the system, which is + contained in the properties module. + kstress: The total kinetic stress tensor for the system. + rg: An array giving the radius of gyration of each atom. + """ + + def __init__(self, natoms, nbeads): + """Initialises Beads. + + Args: + natoms: Number of atoms. + nbeads: Number of beads. + """ + + self.resize(natoms, nbeads) + + def resize(self, natoms, nbeads): + """Creates all the data arrays needed in the simulation. + + Effectively initializes the whole Beads object, according to the + specified number of atoms and beads. Is also used, as the name suggests, + to resize the data to a new number of beads when this is necessary, for + example in initialization from a simulation with a different number of + beads. + + Also creates, or recreates, the dependency network, as this requires + the data arrays to be created for it to work. + + Args: + natoms: The number of atoms. + nbeads: The number of beads. + """ + + self.natoms = natoms + self.nbeads = nbeads + + dset(self,"names", + depend_array(name="names",value=np.zeros(natoms, np.dtype('|S6'))) ) + + # atom masses, and mass-related arrays + dset(self,"m",depend_array(name="m",value=np.zeros(natoms, float)) ) # this is the prototype mass array (just one independent of bead n) + dset(self,"m3", + depend_array(name="m3",value=np.zeros((nbeads,3*natoms), float), # this is m conveniently replicated to be (nb,3*nat) + func=self.mtom3, dependencies=[dget(self,"m")])) + dset(self,"sm3", + depend_array(name="sm3",value=np.zeros((nbeads,3*natoms), float), # this is just the square root of m3 + func=self.m3tosm3, dependencies=[dget(self,"m3")])) + + # positions and momenta. bead representation, base storage used everywhere + dset(self,"q", + depend_array(name="q",value=np.zeros((nbeads,3*natoms), float)) ) + dset(self,"p", + depend_array(name="p",value=np.zeros((nbeads,3*natoms), float)) ) + + # position and momentum of the centroid + dset(self,"qc", + depend_array(name="qc",value=np.zeros(3*natoms, float), + func=self.get_qc, dependencies=[dget(self,"q")] ) ) + dset(self,"pc", + depend_array(name="pc",value=np.zeros(3*natoms, float), + func=self.get_pc, dependencies=[dget(self,"p")] ) ) + + # create proxies to access the centroid and the individual beads as Atoms objects + self.centroid = Atoms(natoms, _prebind=(self.qc, self.pc, self.m, self.names)) + self._blist = [Atoms(natoms, _prebind=( self.q[i,:], self.p[i,:], self.m, self.names )) for i in range(nbeads) ] + + # path springs potential and force + dset(self,"vpath", + depend_value(name="vpath", func=self.get_vpath, + dependencies=[dget(self,"q")])) + dset(self,"fpath", + depend_array(name="fpath", value=np.zeros((nbeads,3*natoms), float), + func=self.get_fpath, dependencies=[dget(self,"q")])) + + # kinetic energies of thhe beads, and total (classical) kinetic stress tensor + dset(self,"kins", + depend_array(name="kins",value=np.zeros(nbeads, float), + func=self.kin_gather, + dependencies=[dget(b,"kin") for b in self._blist])) + dset(self,"kin", + depend_value(name="kin", func=self.get_kin, + dependencies=[dget(self,"kins")])) + dset(self,"kstress", + depend_array(name="kstress",value=np.zeros((3,3), float), + func=self.get_kstress, + dependencies=[dget(b,"kstress") for b in self._blist])) + + def copy(self): + """Creates a new beads object from the original. + + Returns: + A Beads object with the same q, p, m and names arrays as the original. + """ + + newbd = Beads(self.natoms, self.nbeads) + newbd.q[:] = self.q + newbd.p[:] = self.p + newbd.m[:] = self.m + newbd.names[:] = self.names + return newbd + + + def m3tosm3(self): + """Takes the mass array and returns the square rooted mass array.""" + + return np.sqrt(depstrip(self.m3)) + + def mtom3(self): + """Takes the mass array for each bead and returns one with an element + for each degree of freedom. + + Returns: + An array of size (nbeads,3*natoms), with each element corresponding + to the mass associated with the appropriate degree of freedom in q. + """ + + m3 = np.zeros((self.nbeads,3*self.natoms),float) + m3[:,0:3*self.natoms:3] = self.m + m3[:,1:3*self.natoms:3] = m3[:,0:3*self.natoms:3] + m3[:,2:3*self.natoms:3] = m3[:,0:3*self.natoms:3] + return m3 + + def get_qc(self): + """Gets the centroid coordinates.""" + + return np.dot(np.ones(self.nbeads,float),depstrip(self.q))/float(self.nbeads) + + def get_pc(self): + """Gets the centroid momenta.""" + + return np.dot(np.ones(self.nbeads,float),depstrip(self.p))/float(self.nbeads) + + def kin_gather(self): + """Gets the kinetic energy for all the replicas. + + Returns: + A list of the kinetic energy for each system. + """ + + return np.array([b.kin for b in self._blist]) + + def get_kin(self): + """Gets the total kinetic energy of all the replicas. + + Note that this does not correspond to the total kinetic energy estimate + for the system. + + Returns: + The sum of the kinetic energy of each replica. + """ + + return self.kins.sum() + + def get_kstress(self): + """Calculates the total kinetic stress tensor of all the replicas. + + Note that this does not correspond to the quantum kinetic stress tensor + estimate for the system. + + Returns: + The sum of the kinetic stress tensor of each replica. + """ + + ks = np.zeros((3,3),float) + for b in range(self.nbeads): + ks += self[b].kstress + return ks + + def get_vpath(self): + """Calculates the spring potential between the replicas. + + Note that this is actually the harmonic potential without being + multiplied by the factor omegan**2, which is only available in the + ensemble as the temperature is required to calculate it. + """ + + epath = 0.0 + q = depstrip(self.q) + m = depstrip(self.m3)[0] + for b in range(self.nbeads): + if b > 0: + dq = q[b,:] - q[b-1,:] + else: + dq = q[b,:] - q[self.nbeads-1,:] + epath += np.dot(dq, m*dq) + return epath*0.5 + + def get_fpath(self): + """Calculates the spring force between the replicas. + + Note that this is actually the harmonic force without being + multiplied by the factor omegan**2, which is only available in the + ensemble as the temperature is required to calculate it. + """ + + nbeads = self.nbeads + natoms = self.natoms + f = np.zeros((nbeads,3*natoms),float) + + q = depstrip(self.q) + m = depstrip(self.m3)[0] + for b in range(nbeads): + if b > 0: + dq = q[b,:] - q[b-1,:] + else: + dq = q[b,:] - q[self.nbeads-1,:] + dq *= m + f[b] -= dq + if b > 0: + f[b-1] += dq + else: + f[nbeads-1] += dq + return f + + # A set of functions to access individual beads as Atoms objects + def __len__(self): + """Length function. + + This is called whenever the standard function len(beads) is used. + + Returns: + The number of beads. + """ + + return self.nbeads + + def __getitem__(self,index): + """Overwrites standard getting function. + + This is called whenever the standard function beads[index] is used. + Returns an Atoms object with the appropriate position and momenta arrays. + + Args: + index: The index of the replica of the system to be accessed. + + Returns: + The replica of the system given by the index. + """ + + return self._blist[index] + + def __setitem__(self,index,value): + """Overwrites standard setting function. + + This is called whenever the standard function beads[index]=value is used. + Changes the position and momenta of the appropriate slice of the global + position and momentum arrays to those given by value. + + Args: + index: The replica of the system to be changed. + value: The Atoms object that holds the new values. + """ + + self._blist[index].p[:] = value.p + self._blist[index].q[:] = value.q + self._blist[index].m[:] = value.m + self._blist[index].names[:] = value.names diff --git a/tools/i-pi/ipi/engine/cell.py b/tools/i-pi/ipi/engine/cell.py new file mode 100644 index 000000000..e9bf81350 --- /dev/null +++ b/tools/i-pi/ipi/engine/cell.py @@ -0,0 +1,140 @@ +"""Contains the classes which deal with the system box. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Used for implementing the minimum image convention. + +Classes: + Cell: Base cell class with the generic methods and attributes. +""" + +__all__ = ['Cell'] + +import numpy as np +from ipi.utils.depend import * +from ipi.utils.mathtools import * +from ipi.utils import units + + +class Cell(dobject): + """Base class to represent the simulation cell in a periodic system. + + This class has the base attributes required for either flexible or + isotropic cell dynamics. Uses an upper triangular lattice vector matrix to + represent the cell. + + Depend objects: + h: An array giving the lattice vector matrix. + ih: An array giving the inverse of the lattice vector matrix. + V: The volume of the cell. + """ + + def __init__(self, h=None): + """Initialises base cell class. + + Args: + h: Optional array giving the initial lattice vector matrix. The + reference cell matrix is set equal to this. Must be an upper + triangular 3*3 matrix. Defaults to a 3*3 zeroes matrix. + """ + + if h is None: + #h = np.identity(3,float) + h = np.zeros((3,3), float) + dset(self,"h",depend_array(name = 'h', value = h) ) + + dset(self,"ih", + depend_array(name = "ih", value = np.zeros((3,3),float), + func=self.get_ih, dependencies=[dget(self,"h")]) ) + dset(self,"V", + depend_value(name = 'V', func=self.get_volume, + dependencies=[dget(self,"h")]) ) + + def get_ih(self): + """Inverts the lattice vector matrix.""" + + return invert_ut3x3(self.h) + + def get_volume(self): + """Calculates the volume of the system box.""" + + return det_ut3x3(self.h) + + def apply_pbc(self, atom): + """Uses the minimum image convention to return a particle to the + unit cell. + + Args: + atom: An Atom object. + + Returns: + An array giving the position of the image that is inside the + system box. + """ + + s = np.dot(self.ih,atom.q) + + + for i in range(3): + s[i] = s[i] - round(s[i]) + + return np.dot(self.h,s) + + def array_pbc(self, pos): + """Uses the minimum image convention to return a list of particles to the + unit cell. + + Args: + atom: An Atom object. + + Returns: + An array giving the position of the image that is inside the + system box. + """ + + s = depstrip(pos).copy() + s.shape = (len(pos)/3,3) + + s = np.dot(depstrip(self.ih),s.T) + s = s - np.round(s) + + s = np.dot(depstrip(self.h),s).T + + pos[:] = s.reshape((len(s)*3)) + + def minimum_distance(self, atom1, atom2): + """Takes two atoms and tries to find the smallest vector between two + images. + + This is only rigorously accurate in the case of a cubic cell, + but gives the correct results as long as the cut-off radius is defined + as smaller than the smallest width between parallel faces even for + triclinic cells. + + Args: + atom1: An Atom object. + atom2: An Atom object. + + Returns: + An array giving the minimum distance between the positions of atoms + atom1 and atom2 in the minimum image convention. + """ + + s = np.dot(self.ih,atom1.q-atom2.q) + for i in range(3): + s[i] -= round(s[i]) + return np.dot(self.h, s) diff --git a/tools/i-pi/ipi/engine/ensembles.py b/tools/i-pi/ipi/engine/ensembles.py new file mode 100644 index 000000000..9660ca983 --- /dev/null +++ b/tools/i-pi/ipi/engine/ensembles.py @@ -0,0 +1,565 @@ +"""Contains the classes that deal with the different dynamics required in +different types of ensembles. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Holds the algorithms required for normal mode propagators, and the objects to +do the constant temperature and pressure algorithms. Also calculates the +appropriate conserved energy quantity for the ensemble of choice. + +Classes: + Ensemble: Base ensemble class with generic methods and attributes. + NVEEnsemble: Deals with constant energy dynamics. + NVTEnsemble: Deals with constant temperature dynamics. + NPTEnsemble: Deals with constant pressure dynamics. + ReplayEnsemble: Takes a trajectory, and simply sets the atom positions to + match it, rather than doing dynamics. In this way new properties can + be calculated on an old simulation, without having to rerun it from + scratch. +""" + +__all__ = ['Ensemble', 'NVEEnsemble', 'NVTEnsemble', 'NPTEnsemble', 'ReplayEnsemble'] + +import numpy as np +import time + +from ipi.utils.depend import * +from ipi.utils import units +from ipi.utils.softexit import softexit +from ipi.utils.io.io_xyz import read_xyz +from ipi.utils.io.io_pdb import read_pdb +from ipi.utils.io.io_xml import xml_parse_file +from ipi.utils.units import Constants, unit_to_internal +from ipi.inputs.thermostats import InputThermo +from ipi.inputs.barostats import InputBaro +from ipi.engine.thermostats import * +from ipi.engine.barostats import * + + +class Ensemble(dobject): + """Base ensemble class. + + Gives the standard methods and attributes needed in all the + ensemble classes. + + Attributes: + beads: A beads object giving the atoms positions. + cell: A cell object giving the system box. + forces: A forces object giving the virial and the forces acting on + each bead. + prng: A random number generator object. + nm: An object which does the normal modes transformation. + fixcom: A boolean which decides whether the centre of mass + motion will be constrained or not. + + Depend objects: + econs: The conserved energy quantity appropriate to the given + ensemble. Depends on the various energy terms which make it up, + which are different depending on the ensemble. + temp: The system temperature. + dt: The timestep for the algorithms. + ntemp: The simulation temperature. Will be nbeads times higher than + the system temperature as PIMD calculations are done at this + effective classical temperature. + """ + + def __init__(self, dt, temp, fixcom=False): + """Initialises Ensemble. + + Args: + dt: The timestep of the simulation algorithms. + temp: The temperature. + fixcom: An optional boolean which decides whether the centre of mass + motion will be constrained or not. Defaults to False. + """ + + dset(self, "econs", depend_value(name='econs', func=self.get_econs)) + dset(self, "temp", depend_value(name='temp', value=temp)) + dset(self, "dt", depend_value(name='dt', value=dt)) + self.fixcom = fixcom + + + def bind(self, beads, nm, cell, bforce, prng): + """Binds beads, cell, bforce and prng to the ensemble. + + This takes a beads object, a cell object, a forcefield object and a + random number generator object and makes them members of the ensemble. + It also then creates the objects that will hold the data needed in the + ensemble algorithms and the dependency network. Note that the conserved + quantity is defined in the init, but as each ensemble has a different + conserved quantity the dependencies are defined in bind. + + Args: + beads: The beads object from whcih the bead positions are taken. + nm: A normal modes object used to do the normal modes transformation. + cell: The cell object from which the system box is taken. + bforce: The forcefield object from which the force and virial are + taken. + prng: The random number generator object which controls random number + generation. + """ + + # store local references to the different bits of the simulation + self.beads = beads + self.cell = cell + self.forces = bforce + self.prng = prng + self.nm = nm + + # n times the temperature + dset(self,"ntemp", depend_value(name='ntemp',func=self.get_ntemp, + dependencies=[dget(self,"temp")])) + + # dependencies of the conserved quantity + dget(self,"econs").add_dependency(dget(self.beads, "kin")) + dget(self,"econs").add_dependency(dget(self.forces, "pot")) + dget(self,"econs").add_dependency(dget(self.beads, "vpath")) + + + def get_ntemp(self): + """Returns the PI simulation temperature (P times the physical T).""" + + return self.temp*self.beads.nbeads + + + def pstep(self): + """Dummy momenta propagator which does nothing.""" + + pass + + def qcstep(self): + """Dummy centroid position propagator which does nothing.""" + + pass + + def step(self): + """Dummy simulation time step which does nothing.""" + + pass + + def get_econs(self): + """Calculates the conserved energy quantity for constant energy + ensembles. + """ + + return self.beads.vpath*self.nm.omegan2 + self.nm.kin + self.forces.pot + + +class NVEEnsemble(Ensemble): + """Ensemble object for constant energy simulations. + + Has the relevant conserved quantity and normal mode propagator for the + constant energy ensemble. Note that a temperature of some kind must be + defined so that the spring potential can be calculated. + + Attributes: + ptime: The time taken in updating the velocities. + qtime: The time taken in updating the positions. + ttime: The time taken in applying the thermostat steps. + + Depend objects: + econs: Conserved energy quantity. Depends on the bead kinetic and + potential energy, and the spring potential energy. + """ + + def __init__(self, dt, temp, fixcom=False): + """Initialises NVEEnsemble. + + Args: + dt: The simulation timestep. + temp: The system temperature. + fixcom: An optional boolean which decides whether the centre of mass + motion will be constrained or not. Defaults to False. + """ + + super(NVEEnsemble,self).__init__(dt=dt,temp=temp, fixcom=fixcom) + + def rmcom(self): + """This removes the centre of mass contribution to the kinetic energy. + + Calculates the centre of mass momenta, then removes the mass weighted + contribution from each atom. If the ensemble defines a thermostat, then + the contribution to the conserved quantity due to this subtraction is + added to the thermostat heat energy, as it is assumed that the centre of + mass motion is due to the thermostat. + + If there is a choice of thermostats, the thermostat + connected to the centroid is chosen. + """ + + if (self.fixcom): + pcom = np.zeros(3,float); + + na3 = self.beads.natoms*3 + nb = self.beads.nbeads + p = depstrip(self.beads.p) + m = depstrip(self.beads.m3)[:,0:na3:3] + M = self.beads[0].M + + for i in range(3): + pcom[i] = p[:,i:na3:3].sum() + + if hasattr(self,"thermostat"): + if hasattr(self.thermostat, "_thermos"): + self.thermostat._thermos[0].ethermo += np.dot(pcom,pcom)/(2.0*M*nb) + else: + self.thermostat.ethermo += np.dot(pcom,pcom)/(2.0*M*nb) + + # subtracts COM _velocity_ + pcom *= 1.0/(nb*M) + for i in range(3): + self.beads.p[:,i:na3:3] -= m*pcom[i] + + def pstep(self): + """Velocity Verlet momenta propagator.""" + + self.beads.p += depstrip(self.forces.f)*(self.dt*0.5) + + def qcstep(self): + """Velocity Verlet centroid position propagator.""" + + self.nm.qnm[0,:] += depstrip(self.nm.pnm)[0,:]/depstrip(self.beads.m3)[0]*self.dt + + def step(self): + """Does one simulation time step.""" + + self.ptime = -time.time() + self.pstep() + self.ptime += time.time() + + self.qtime = -time.time() + self.qcstep() + + self.nm.free_qstep() + self.qtime += time.time() + + self.ptime -= time.time() + self.pstep() + self.ptime += time.time() + + self.ttime = -time.time() + self.rmcom() + self.ttime += time.time() + + +class NVTEnsemble(NVEEnsemble): + """Ensemble object for constant temperature simulations. + + Has the relevant conserved quantity and normal mode propagator for the + constant temperature ensemble. Contains a thermostat object containing the + algorithms to keep the temperature constant. + + Attributes: + thermostat: A thermostat object to keep the temperature constant. + + Depend objects: + econs: Conserved energy quantity. Depends on the bead kinetic and + potential energy, the spring potential energy and the heat + transferred to the thermostat. + """ + + def __init__(self, dt, temp, thermostat=None, fixcom=False): + """Initialises NVTEnsemble. + + Args: + dt: The simulation timestep. + temp: The system temperature. + thermostat: A thermostat object to keep the temperature constant. + Defaults to Thermostat() + fixcom: An optional boolean which decides whether the centre of mass + motion will be constrained or not. Defaults to False. + """ + + super(NVTEnsemble,self).__init__(dt=dt,temp=temp, fixcom=fixcom) + + if thermostat is None: + self.thermostat = Thermostat() + else: + self.thermostat = thermostat + + def bind(self, beads, nm, cell, bforce, prng): + """Binds beads, cell, bforce and prng to the ensemble. + + This takes a beads object, a cell object, a forcefield object and a + random number generator object and makes them members of the ensemble. + It also then creates the objects that will hold the data needed in the + ensemble algorithms and the dependency network. Also note that the + thermostat timestep and temperature are defined relative to the system + temperature, and the the thermostat temperature is held at the + higher simulation temperature, as is appropriate. + + Args: + beads: The beads object from whcih the bead positions are taken. + nm: A normal modes object used to do the normal modes transformation. + cell: The cell object from which the system box is taken. + bforce: The forcefield object from which the force and virial are + taken. + prng: The random number generator object which controls random number + generation. + """ + + super(NVTEnsemble,self).bind(beads, nm, cell, bforce, prng) + fixdof = None + if self.fixcom: + fixdof = 3 + + # first makes sure that the thermostat has the correct temperature, then proceed with binding it. + deppipe(self,"ntemp", self.thermostat,"temp") + deppipe(self,"dt", self.thermostat, "dt") + + #decides whether the thermostat will work in the normal mode or + #the bead representation. + if isinstance(self.thermostat,ThermoNMGLE) or isinstance(self.thermostat,ThermoNMGLEG) or isinstance(self.thermostat,ThermoPILE_L) or isinstance(self.thermostat,ThermoPILE_G): + self.thermostat.bind(nm=self.nm,prng=prng,fixdof=fixdof ) + else: + self.thermostat.bind(beads=self.beads,prng=prng, fixdof=fixdof) + + dget(self,"econs").add_dependency(dget(self.thermostat, "ethermo")) + + def step(self): + """Does one simulation time step.""" + + self.ttime = -time.time() + self.thermostat.step() + self.rmcom() + self.ttime += time.time() + + self.ptime = -time.time() + self.pstep() + self.ptime += time.time() + + self.qtime = -time.time() + self.qcstep() + self.nm.free_qstep() + self.qtime += time.time() + + self.ptime -= time.time() + self.pstep() + self.ptime += time.time() + + self.ttime -= time.time() + self.thermostat.step() + self.rmcom() + self.ttime += time.time() + + def get_econs(self): + """Calculates the conserved energy quantity for constant temperature + ensemble. + """ + + return NVEEnsemble.get_econs(self) + self.thermostat.ethermo + + +class NPTEnsemble(NVTEnsemble): + """Ensemble object for constant pressure simulations. + + Has the relevant conserved quantity and normal mode propagator for the + constant pressure ensemble. Contains a thermostat object containing the + algorithms to keep the temperature constant, and a barostat to keep the + pressure constant. + + Attributes: + barostat: A barostat object to keep the pressure constant. + + Depend objects: + econs: Conserved energy quantity. Depends on the bead and cell kinetic + and potential energy, the spring potential energy, the heat + transferred to the beads and cell thermostat, the temperature and + the cell volume. + pext: External pressure. + """ + + def __init__(self, dt, temp, pext, thermostat=None, barostat=None, fixcom=False): + """Initialises NPTEnsemble. + + Args: + dt: The simulation timestep. + temp: The system temperature. + pext: The external pressure. + thermostat: A thermostat object to keep the temperature constant. + Defaults to Thermostat(). + barostat: A barostat object to keep the pressure constant. + Defaults to Barostat(). + fixcom: An optional boolean which decides whether the centre of mass + motion will be constrained or not. Defaults to False. + """ + + super(NPTEnsemble,self).__init__(dt, temp, thermostat, fixcom=fixcom) + if barostat == None: + self.barostat = Barostat() + else: + self.barostat = barostat + + dset(self,"pext",depend_value(name='pext')) + if not pext is None: + self.pext = pext + else: self.pext = 0.0 + + + def bind(self, beads, nm, cell, bforce, prng): + """Binds beads, cell, bforce and prng to the ensemble. + + This takes a beads object, a cell object, a forcefield object and a + random number generator object and makes them members of the ensemble. + It also then creates the objects that will hold the data needed in the + ensemble algorithms and the dependency network. Also note that the cell + thermostat timesteps and temperatures are defined relative to the system + temperature, and the the thermostat temperatures are held at the + higher simulation temperature, as is appropriate. + + Args: + beads: The beads object from whcih the bead positions are taken. + nm: A normal modes object used to do the normal modes transformation. + cell: The cell object from which the system box is taken. + bforce: The forcefield object from which the force and virial are + taken. + prng: The random number generator object which controls random number + generation. + """ + + + fixdof = None + if self.fixcom: + fixdof = 3 + + super(NPTEnsemble,self).bind(beads, nm, cell, bforce, prng) + self.barostat.bind(beads, nm, cell, bforce, prng=prng, fixdof=fixdof) + + + deppipe(self,"ntemp", self.barostat, "temp") + deppipe(self,"dt", self.barostat, "dt") + deppipe(self,"pext", self.barostat, "pext") + dget(self,"econs").add_dependency(dget(self.barostat, "ebaro")) + + def get_econs(self): + """Calculates the conserved energy quantity for the constant pressure + ensemble. + """ + + return NVTEnsemble.get_econs(self) + self.barostat.ebaro + + def step(self): + """NPT time step. + + Note that the barostat only propagates the centroid coordinates. If this + approximation is made a centroid virial pressure and stress estimator can + be defined, so this gives the best statistical convergence. This is + allowed as the normal mode propagation is approximately unaffected + by volume fluctuations as long as the system box is much larger than + the radius of gyration of the ring polymers. + """ + + self.ttime = -time.time() + self.thermostat.step() + self.barostat.thermostat.step() + self.rmcom() + self.ttime += time.time() + + self.ptime = -time.time() + self.barostat.pstep() + self.ptime += time.time() + + self.qtime = -time.time() + self.barostat.qcstep() + self.nm.free_qstep() + self.qtime += time.time() + + self.ptime -= time.time() + self.barostat.pstep() + self.ptime += time.time() + + self.ttime -= time.time() + self.barostat.thermostat.step() + self.thermostat.step() + self.rmcom() + self.ttime += time.time() + + +class ReplayEnsemble(Ensemble): + """Ensemble object that just loads snapshots from an external file in sequence. + + Has the relevant conserved quantity and normal mode propagator for the + constant energy ensemble. Note that a temperature of some kind must be + defined so that the spring potential can be calculated. + + Attributes: + intraj: The input trajectory file. + ptime: The time taken in updating the velocities. + qtime: The time taken in updating the positions. + ttime: The time taken in applying the thermostat steps. + + Depend objects: + econs: Conserved energy quantity. Depends on the bead kinetic and + potential energy, and the spring potential energy. + """ + + def __init__(self, dt, temp, fixcom=False, intraj=None): + """Initialises ReplayEnsemble. + + Args: + dt: The simulation timestep. + temp: The system temperature. + fixcom: An optional boolean which decides whether the centre of mass + motion will be constrained or not. Defaults to False. + intraj: The input trajectory file. + """ + + super(ReplayEnsemble,self).__init__(dt=dt,temp=temp,fixcom=fixcom) + if intraj == None: + raise ValueError("Must provide an initialized InitFile object to read trajectory from") + self.intraj = intraj + if intraj.mode == "manual": + raise ValueError("Replay can only read from PDB or XYZ files -- or a single frame from a CHK file") + self.rfile = open(self.intraj.value,"r") + + def step(self): + """Does one simulation time step.""" + + self.ptime = self.ttime = 0 + self.qtime = -time.time() + + try: + if (self.intraj.mode == "xyz"): + for b in self.beads: + myatoms = read_xyz(self.rfile) + myatoms.q *= unit_to_internal("length",self.intraj.units,1.0) + b.q[:] = myatoms.q + elif (self.intraj.mode == "pdb"): + for b in self.beads: + myatoms, mycell = read_pdb(self.rfile) + myatoms.q *= unit_to_internal("length",self.intraj.units,1.0) + mycell.h *= unit_to_internal("length",self.intraj.units,1.0) + b.q[:] = myatoms.q + self.cell.h[:] = mycell.h + elif (self.intraj.mode == "chk" or self.intraj.mode == "checkpoint"): + # reads configuration from a checkpoint file + xmlchk = xml_parse_file(self.rfile) # Parses the file. + + from ipi.inputs.simulation import InputSimulation + simchk = InputSimulation() + simchk.parse(xmlchk.fields[0][1]) + mycell = simchk.cell.fetch() + mybeads = simchk.beads.fetch() + self.cell.h[:] = mycell.h + self.beads.q[:] = mybeads.q + softexit.trigger(" # Read single checkpoint") + except EOFError: + softexit.trigger(" # Finished reading re-run trajectory") + + self.qtime += time.time() + + diff --git a/tools/i-pi/ipi/engine/forces.py b/tools/i-pi/ipi/engine/forces.py new file mode 100644 index 000000000..58987f1e4 --- /dev/null +++ b/tools/i-pi/ipi/engine/forces.py @@ -0,0 +1,781 @@ +"""Contains the classes that connect the driver to the python code. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Communicates with the driver code, obtaining the force, virial and potential. +Deals with creating the jobs that will be sent to the driver, and +returning the results to the python code. + +Classes: + ForceField: Base forcefield class with the generic methods and attributes. + FFSocket: Deals with a single replica of the system + ForceBeads: Deals with the parallelization of the force calculation over + different beads. + Forces: Deals with the parallelizatoin of the force calculation over + different forcefields. +""" + +__all__ = ['ForceField', 'ForceBeads', 'Forces', 'FFSocket'] + +import numpy as np +import time +from ipi.utils.softexit import softexit +from ipi.utils.messages import verbosity, warning +from ipi.utils.depend import * +from ipi.utils.nmtransform import nm_rescale +from ipi.interfaces.sockets import InterfaceSocket +from ipi.engine.beads import Beads + +class ForceField(dobject): + """Base forcefield class. + + Gives the standard methods and quantities needed in all the forcefield + classes. + + Attributes: + atoms: An Atoms object containing all the atom positions. + cell: A Cell object containing the system box. + + Depend objects: + ufvx: A list of the form [pot, f, vir]. These quantities are calculated + all at one time by the driver, so are collected together. Each separate + object is then taken from the list. Depends on the atom positions and + the system box. + extra: A string containing some formatted output returned by the client. Depends on ufvx. + pot: A float giving the potential energy of the system. Depends on ufvx. + f: An array containing all the components of the force. Depends on ufvx. + fx: A slice of f containing only the x components of the forces. + fy: A slice of f containing only the y components of the forces. + fz: A slice of f containing only the z components of the forces. + vir: An array containing the components of the virial tensor in upper + triangular form, not divided by the volume. Depends on ufvx. + """ + + def __init__(self): + """Initialises ForceField.""" + + # ufvx is a list [ u, f, vir, extra ] which stores the results of the force + #calculation + dset(self,"ufvx", depend_value(name="ufvx", func=self.get_all)) + + def copy(self): + """Creates a deep copy without the bound objects. + + Used in ForceBeads to create a ForceField for each replica of the system. + + Returns: + A ForceField object without atoms or cell attributes. + """ + + return type(self)(self.nbeads, self.weight) + + def bind(self, atoms, cell): + """Binds atoms and cell to the forcefield. + + This takes an atoms object and a cell object and makes them members of + the forcefield. It also then creates the objects that will hold the data + that the driver returns and the dependency network. + + Args: + atoms: The Atoms object from which the atom positions are taken. + cell: The Cell object from which the system box is taken. + """ + + # stores a reference to the atoms and cell we are computing forces for + self.atoms = atoms + self.cell = cell + + # ufv depends on the atomic positions and on the cell + dget(self,"ufvx").add_dependency(dget(self.atoms,"q")) + dget(self,"ufvx").add_dependency(dget(self.cell,"h")) + + # potential and virial are to be extracted very simply from ufv + dset(self,"pot", + depend_value(name="pot", func=self.get_pot, + dependencies=[dget(self,"ufvx")])) + + dset(self,"vir", + depend_array(name="vir", value=np.zeros((3,3),float),func=self.get_vir, + dependencies=[dget(self,"ufvx")])) + + # NB: the force requires a bit more work, to define shortcuts to xyz + # slices without calculating the force at this point. + fbase = np.zeros(atoms.natoms*3, float) + dset(self,"f", + depend_array(name="f", value=fbase, func=self.get_f, + dependencies=[dget(self,"ufvx")])) + + dset(self,"extra", + depend_value(name="extra", func=self.get_extra, + dependencies=[dget(self,"ufvx")])) + + dset(self,"fx", depend_array(name="fx", value=fbase[0:3*atoms.natoms:3])) + dset(self,"fy", depend_array(name="fy", value=fbase[1:3*atoms.natoms:3])) + dset(self,"fz", depend_array(name="fz", value=fbase[2:3*atoms.natoms:3])) + depcopy(self,"f", self,"fx") + depcopy(self,"f", self,"fy") + depcopy(self,"f", self,"fz") + + def queue(self): + """Dummy queueing method.""" + + pass + + def stop(self): + """Dummy queueing method.""" + + pass + + def run(self): + """Dummy queueing method.""" + + pass + + def get_all(self): + """Dummy driver routine. + + Returns: + A list of the form [potential, force, virial] where the potential + and all components of the force and virial have been set to zero. + """ + + return [0.0, np.zeros(3*self.atoms.natoms), np.zeros((3,3),float), ""] + + def get_pot(self): + """Calls get_all routine of forcefield to update potential. + + Returns: + Potential energy. + """ + + return self.ufvx[0] + + def get_f(self): + """Calls get_all routine of forcefield to update force. + + Returns: + An array containing all the components of the force. + """ + + return depstrip(self.ufvx[1]) + + def get_vir(self): + """Calls get_all routine of forcefield to update virial. + + Returns: + An array containing the virial in upper triangular form, not divided + by the volume. + """ + + vir = depstrip(self.ufvx[2]) + vir[1,0] = 0.0 + vir[2,0:2] = 0.0 + return vir + + def get_extra(self): + """Calls get_all routine of forcefield to update potential. + + Returns: + A string containing all formatted additional output that the + client might have produced. + """ + + return self.ufvx[3] + + +class FFSocket(ForceField): + """Interface between the PIMD code and the socket for a single replica. + + Deals with an individual replica of the system, obtaining the potential + force and virial appropriate to this system. Deals with the distribution of + jobs to the interface. + + Attributes: + parameters: A dictionary of the parameters used by the driver. Of the + form {'name': value}. + socket: The interface object which contains the socket through which + communication between the forcefield and the driver is done. + request: During the force calculation step this holds a dictionary + containing the relevant data for determining the progress of the step. + Of the form {'atoms': atoms, 'cell': cell, 'pars': parameters, + 'status': status, 'result': result, 'id': bead id, + 'start': starting time}. + """ + + def __init__(self, pars=None, interface=None): + """Initialises FFSocket. + + Args: + pars: Optional dictionary, giving the parameters needed by the driver. + interface: Optional Interface object, which contains the socket. + """ + + # a socket to the communication library is created or linked + super(FFSocket,self).__init__() + if interface is None: + self.socket = InterfaceSocket() + else: + self.socket = interface + + if pars is None: + self.pars = {} + else: + self.pars = pars + self.request = None + + def bind(self, atoms, cell): + """Pass on the binding request from ForceBeads. + + Also makes sure to set the socket's softexit. + + Args: + atoms: Atoms object from which the bead positions are taken. + cell: Cell object from which the system box is taken. + """ + + super(FFSocket,self).bind(atoms, cell) + + def copy(self): + """Creates a deep copy without the bound objects. + + Used in ForceBeads to create a FFSocket for each replica of the system. + + Returns: + A FFSocket object without atoms or cell attributes. + """ + + # does not copy the bound objects + # (i.e., the returned forcefield must be bound before use) + return type(self)(self.pars, self.socket) + + def get_all(self): + """Driver routine. + + When one of the force, potential or virial are called, this sends the + atoms and cell to the driver through the interface, requesting that the + driver does the calculation. This then waits until the driver is finished, + and then returns the ufvx list. + + Returns: + A list of the form [potential, force, virial, extra]. + """ + + # this is converting the distribution library requests into [ u, f, v ] lists + if self.request is None: + self.request = self.socket.queue(self.atoms, self.cell, pars=self.pars, reqid=-1) + while self.request["status"] != "Done": + if self.request["status"] == "Exit": + break + time.sleep(self.socket.latency) + if self.request["status"] == "Exit": + softexit.trigger(" @Force: Requested returned a Exit status") + + # data has been collected, so the request can be released and a slot + #freed up for new calculations + self.socket.release(self.request) + result = self.request["result"] + self.request = None + + return result + + def queue(self, reqid=-1): + """Sends the job to the interface queue directly. + + Allows the ForceBeads object to ask for the ufvx list of each replica + directly without going through the get_all function. This allows + all the jobs to be sent at once, allowing them to be parallelized. + + Args: + reqid: An optional integer that indentifies requests of the same type, + e.g. the bead index. + """ + + if self.request is None and dget(self,"ufvx").tainted(): + self.request = self.socket.queue(self.atoms, self.cell, pars=self.pars, reqid=reqid) + + def run(self): + """Makes the socket start looking for driver codes. + + Tells the interface code to start the thread that looks for + connection from the driver codes in a loop. Until this point no + jobs can be queued. + """ + + if not self.socket.started(): + self.socket.start_thread() + + def stop(self): + """Makes the socket stop looking for driver codes. + + Tells the interface code to stop the thread that looks for + connection from the driver codes in a loop. After this point no + jobs can be queued. + """ + + if self.socket.started(): + self.socket.end_thread() + + +class ForceBeads(dobject): + """Class that gathers the forces for each replica together. + + Deals with splitting the bead representation into + separate replicas, and collecting the data from each replica. + + Attributes: + natoms: An integer giving the number of atoms. + nbeads: An integer giving the number of beads. + f_model: A model used to create the forcefield objects for each replica + of the system. + _forces: A list of the forcefield objects for all the replicas. + weight: A float that will be used to weight the contribution of this + forcefield to the total force. + + Depend objects: + f: An array containing the components of the force. Depends on each + replica's ufvx list. + pots: A list containing the potential energy for each system replica. + Depends on each replica's ufvx list. + virs: A list containing the virial tensor for each system replica. + Depends on each replica's ufvx list. + pot: The sum of the potential energy of the replicas. + vir: The sum of the virial tensor of the replicas. + extras: Strings containing some formatted output returned by the client. + Depends on each replica's ufvx list. + """ + + def __init__(self, model, nbeads=0, weight=1.0): + """Initializes ForceBeads + + Args: + model: A model to be used to create the forcefield objects for all + the replicas of the system. + nbeads: The number of replicas. + weight: A relative weight to be given to the values obtained with this + forcefield. When the contribution of all the forcefields is + combined to give a total force, the contribution of this forcefield + will be weighted by this factor. + """ + + self.f_model = model + self.nbeads = nbeads + self.weight = weight + + def copy(self): + """Creates a deep copy without the bound objects. + + Used so that we can create multiple Forces objects from the same + Forcebeads model, without binding a particular ForceBeads object twice. + + Returns: + A ForceBeads object without beads or cell attributes. + """ + + # does not copy the bound objects (i.e., the returned forcefield must be bound before use) + return type(self)(self.f_model, self.nbeads, self.weight) + + + def bind(self, beads, cell): + """Binds beads, cell and force to the forcefield. + + Takes the beads, cell objects and makes them members of the forcefield. + Also takes the force object and copies it once for each replica of the + system, then binds each replica to one of the copies so that the force + calculation can be parallelized. Creates the objects that will + hold the data that the driver returns and the dependency network. + + Args: + beads: Beads object from which the bead positions are taken. + cell: Cell object from which the system box is taken. + """ + + # stores a copy of the number of atoms and of beads + #!TODO! make them read-only properties + self.natoms = beads.natoms + if (self.nbeads != beads.nbeads): + raise ValueError("Binding together a Beads and a ForceBeads objects with different numbers of beads") + + # creates an array of force objects, which are bound to the beads + #and the cell + self._forces = []; + for b in range(self.nbeads): + new_force = self.f_model.copy() + new_force.bind(beads[b], cell) + self._forces.append(new_force) + + # f is a big array which assembles the forces on individual beads + dset(self,"f", + depend_array(name="f",value=np.zeros((self.nbeads,3*self.natoms)), + func=self.f_gather, + dependencies=[dget(self._forces[b],"f") for b in range(self.nbeads)])) + + # collection of pots and virs from individual beads + dset(self,"pots", + depend_array(name="pots", value=np.zeros(self.nbeads,float), + func=self.pot_gather, + dependencies=[dget(self._forces[b],"pot") for b in range(self.nbeads)])) + dset(self,"virs", + depend_array(name="virs", value=np.zeros((self.nbeads,3,3),float), + func=self.vir_gather, + dependencies=[dget(self._forces[b],"vir") for b in range(self.nbeads)])) + dset(self,"extras", + depend_value(name="extras", value=np.zeros(self.nbeads,float), + func=self.extra_gather, + dependencies=[dget(self._forces[b],"extra") for b in range(self.nbeads)])) + + # total potential and total virial + dset(self,"pot", + depend_value(name="pot", func=(lambda: self.pots.sum()), + dependencies=[dget(self,"pots")])) + dset(self,"vir", + depend_array(name="vir", func=self.get_vir, value=np.zeros((3,3)), + dependencies=[dget(self,"virs")])) + + def run(self): + """Makes the socket start looking for driver codes. + + Tells the interface code to start the thread that looks for + connection from the driver codes in a loop. Until this point no + jobs can be queued. + """ + + for b in range(self.nbeads): + self._forces[b].run() + + def stop(self): + """Makes the socket stop looking for driver codes. + + Tells the interface code to stop the thread that looks for + connection from the driver codes in a loop. After this point no + jobs can be queued. + """ + + for b in range(self.nbeads): + self._forces[b].stop() + + def queue(self): + """Submits all the required force calculations to the interface.""" + + # this should be called in functions which access u,v,f for ALL the beads, + # before accessing them. it is basically pre-queueing so that the + # distributed-computing magic can work + for b in range(self.nbeads): + self._forces[b].queue(reqid=b) + + def pot_gather(self): + """Obtains the potential energy for each replica. + + Returns: + A list of the potential energy of each replica of the system. + """ + + self.queue() + return np.array([b.pot for b in self._forces], float) + + def extra_gather(self): + """Obtains the potential energy for each replica. + + Returns: + A list of the potential energy of each replica of the system. + """ + + self.queue() + return [b.extra for b in self._forces] + + def vir_gather(self): + """Obtains the virial for each replica. + + Returns: + A list of the virial of each replica of the system. + """ + + self.queue() + return np.array([b.vir for b in self._forces], float) + + def f_gather(self): + """Obtains the force vector for each replica. + + Returns: + An array with all the components of the force. Row i gives the force + array for replica i of the system. + """ + + newf = np.zeros((self.nbeads,3*self.natoms),float) + + self.queue() + for b in range(self.nbeads): + newf[b] = depstrip(self._forces[b].f) + + return newf + + #serial +# for b in range(self.nbeads): newf[b]=self._forces[b].f + # threaded +# bthreads=[] +# print "starting threads" +# for b in range(self.nbeads): +# thread=threading.Thread(target=self._getbead, args=(b,newf,)) +# thread.start() +# bthreads.append(thread) + +# print "waiting threads" +# for b in range(self.nbeads): bthreads[b].join() +# print "threads joined in" + + def get_vir(self): + """Sums the virial of each replica. + + Not the actual system virial, as it has not been divided by either the + number of beads or the cell volume. + + Returns: + Virial sum. + """ + + vir = np.zeros((3,3)) + for v in depstrip(self.virs): + vir += v + return vir + + def __len__(self): + """Length function. + + This is called whenever the standard function len(forcebeads) is used. + + Returns: + The number of beads. + """ + + return self.nbeads + + def __getitem__(self,index): + """Overwrites standard getting function. + + This is called whenever the standard function forcebeads[index] is used. + Returns the force on bead index. + + Args: + index: The index of the replica of the system to be accessed. + + Returns: + The forces acting on the replica of the system given by the index. + """ + + return self._forces[index] + + +class Forces(dobject): + """Class that gathers all the forces together. + + Collects many forcefield instances and parallelizes getting the forces + in a PIMD environment. + + Attributes: + natoms: An integer giving the number of atoms. + nbeads: An integer giving the number of beads. + nforces: An integer giving the number of ForceBeads objects. + mforces: A list of all the forcefield objects. + mbeads: A list of all the beads objects. Some of these may be contracted + ring polymers, with a smaller number of beads than of the simulation. + mweights: A list of the weights of all the forcefields. + mrpc: A list of the objects containing the functions required to + contract the ring polymers of the different forcefields. + + Depend objects: + f: An array containing the components of the force. Depends on each + replica's ufvx list. + pots: A list containing the potential energy for each system replica. + Depends on each replica's ufvx list. + virs: A list containing the virial tensor for each system replica. + Depends on each replica's ufvx list. + extras: A list containing the "extra" strings for each replica. + pot: The sum of the potential energy of the replicas. + vir: The sum of the virial tensor of the replicas. + """ + + def bind(self, beads, cell, flist): + + self.natoms = beads.natoms + self.nbeads = beads.nbeads + self.nforces = len(flist) + + # flist should be a list of tuples containing ( "name", forcebeads) + self.mforces = [] + self.mbeads = [] + self.mweights = [] + self.mrpc = [] + + # a "function factory" to generate functions to automatically update + #contracted paths + def make_rpc(rpc, beads): + return lambda: rpc.b1tob2(depstrip(beads.q)) + + # creates new force objects, possibly acting on contracted path + #representations + for (ftype, fbeads) in flist: + + # creates an automatically-updated contracted beads object + newb = fbeads.nbeads + newforce = fbeads.copy() + newweight = fbeads.weight + + # if the number of beads for this force component is unspecified, + #assume full force evaluation + if newb == 0: + newb = beads.nbeads + newforce.nbeads = newb + + newbeads = Beads(beads.natoms, newb) + newrpc = nm_rescale(beads.nbeads, newb) + + dget(newbeads,"q")._func = make_rpc(newrpc, beads) + for b in newbeads: + # must update also indirect access to the beads coordinates + dget(b,"q")._func = dget(newbeads,"q")._func + + # makes newbeads.q depend from beads.q + dget(beads,"q").add_dependant(dget(newbeads,"q")) + + #now we create a new forcebeads which is bound to newbeads! + newforce.bind(newbeads, cell) + + #adds information we will later need to the appropriate lists. + self.mweights.append(newweight) + self.mbeads.append(newbeads) + self.mforces.append(newforce) + self.mrpc.append(newrpc) + + #now must expose an interface that gives overall forces + dset(self,"f", + depend_array(name="f",value=np.zeros((self.nbeads,3*self.natoms)), + func=self.f_combine, + dependencies=[dget(ff, "f") for ff in self.mforces] ) ) + + # collection of pots and virs from individual ff objects + dset(self,"pots", + depend_array(name="pots", value=np.zeros(self.nbeads,float), + func=self.pot_combine, + dependencies=[dget(ff, "pots") for ff in self.mforces]) ) + + # must take care of the virials! + dset(self,"virs", + depend_array(name="virs", value=np.zeros((self.nbeads,3,3),float), + func=self.vir_combine, + dependencies=[dget(ff, "virs") for ff in self.mforces]) ) + + dset(self,"extras", + depend_value(name="extras", value=np.zeros(self.nbeads,float), + func=self.extra_combine, + dependencies=[dget(ff, "extras") for ff in self.mforces])) + + # total potential and total virial + dset(self,"pot", + depend_value(name="pot", func=(lambda: self.pots.sum()), + dependencies=[dget(self,"pots")])) + dset(self,"vir", + depend_array(name="vir", func=self.get_vir, value=np.zeros((3,3)), + dependencies=[dget(self,"virs")])) + + def run(self): + """Makes the socket start looking for driver codes. + + Tells the interface code to start the thread that looks for + connection from the driver codes in a loop. Until this point no + jobs can be queued. + """ + + for ff in self.mforces: + ff.run() + + def stop(self): + """Makes the socket stop looking for driver codes. + + Tells the interface code to stop the thread that looks for + connection from the driver codes in a loop. After this point no + jobs can be queued. + """ + + for ff in self.mforces: + ff.stop() + + def queue(self): + """Submits all the required force calculations to the forcefields.""" + + for ff in self.mforces: + ff.queue() + + def get_vir(self): + """Sums the virial of each forcefield. + + Not the actual system virial. + + Returns: + Virial sum. + """ + + vir = np.zeros((3,3)) + for v in depstrip(self.virs): + vir += v + return vir + + def f_combine(self): + """Obtains the total force vector.""" + + self.queue() + rf = np.zeros((self.nbeads,3*self.natoms),float) + for k in range(self.nforces): + # "expand" to the total number of beads the forces from the + #contracted one + rf += self.mweights[k]*self.mrpc[k].b2tob1(depstrip(self.mforces[k].f)) + return rf + + def pot_combine(self): + """Obtains the potential energy for each forcefield.""" + + self.queue() + rp = np.zeros(self.nbeads,float) + for k in range(self.nforces): + # "expand" to the total number of beads the potentials from the + #contracted one + rp += self.mweights[k]*self.mrpc[k].b2tob1(self.mforces[k].pots) + return rp + + def extra_combine(self): + """Obtains the potential energy for each forcefield.""" + + self.queue() + rp = [ "" for b in range(self.nbeads) ] + for k in range(self.nforces): + # "expand" to the total number of beads the potentials from the + #contracted one + for b in range(self.nbeads): + rp[b] += self.mforces[k].extras[b] + return rp + + def vir_combine(self): + """Obtains the virial tensor for each forcefield.""" + + self.queue() + rp = np.zeros((self.nbeads,3,3),float) + for k in range(self.nforces): + virs = depstrip(self.mforces[k].virs) + # "expand" to the total number of beads the virials from the + #contracted one, element by element + for i in range(3): + for j in range(3): + rp[:,i,j] += self.mweights[k]*self.mrpc[k].b2tob1(virs[:,i,j]) + return rp diff --git a/tools/i-pi/ipi/engine/initializer.py b/tools/i-pi/ipi/engine/initializer.py new file mode 100644 index 000000000..466677938 --- /dev/null +++ b/tools/i-pi/ipi/engine/initializer.py @@ -0,0 +1,549 @@ +"""Contains the classes that are used to initialize data in the simulation. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +These classes can either be used to restart a simulation with some different +data or used to start a calculation. Any data given in these classes will +overwrite data given elsewhere. + +Classes: + Initializer: Holds the functions that are required to initialize objects in + the code. Data can be initialized from a file, or according to a + particular parameter. An example of the former would be initializing + the configurations from a xyz file, an example of the latter would be + initializing the velocities according to the physical temperature. + InitBase: Simple class that reads data from a string or file. + InitIndexed: The same as init base, but can also optionally hold + information about which atom or bead to initialize from. + +Functions: + init_xyz: Reads beads data from a xyz file. + init_pdb: Reads beads and cell data from a pdb file. + init_chk: Reads beads, cell and thermostat data from a checkpoint file. + init_beads: Initializes a beads object from an Initializer object. + init_vector: Initializes a vector from an Initializer object. + set_vector: Initializes a vector from another vector. +""" + +import numpy as np + +from ipi.engine.beads import Beads +from ipi.engine.cell import Cell +from ipi.engine.normalmodes import NormalModes +from ipi.engine.ensembles import Ensemble +from ipi.utils.io.io_xyz import read_xyz +from ipi.utils.io.io_pdb import read_pdb +from ipi.utils.io.io_xml import xml_parse_file +from ipi.utils.depend import dobject +from ipi.utils.units import Constants, unit_to_internal +from ipi.utils.nmtransform import nm_rescale +from ipi.utils.messages import verbosity, warning, info + +__all__ = ['Initializer', 'InitBase', 'InitIndexed'] + +class InitBase(dobject): + """Base class for initializer objects. + + Attributes: + value: A duck-typed stored value. + mode: A string that determines how the value is to be interpreted. + units: A string giving which unit the value is in. + """ + + def __init__(self, value="", mode="", units="", **others): + """Initializes InitFile. + + Args: + value: A string which specifies what value to initialize the + simulation property to. + mode: A string specifiying what style of initialization should be + used to read the data. + units: A string giving which unit the value is in. + """ + + self.value = value + self.mode = mode + self.units = units + + for (o, v) in others.items(): + self.__dict__[o] = v + + +class InitIndexed(InitBase): + """Class to initialize objects which can be set for a particular bead. + + Attributes: + index: Which atom to initialize the value of. + bead: Which bead to initialize the value of. + """ + + def __init__(self, value="", mode="", units="", index=-1, bead=-1): + """Initializes InitFile. + + Args: + value: A string which specifies what value to initialize the + simulation property to. + mode: A string specifiying what style of initialization should be + used to read the data. + units: A string giving which unit the value is in. + index: Which atom to initialize the value of. + bead: Which bead to initialize the value of. + """ + + super(InitIndexed,self).__init__(value=value, mode=mode, units=units, index=index, bead=bead) + + +def init_xyz(filename): + """Reads an xyz file and returns the data contained in it. + + Args: + filename: A string giving the name of the xyz file to be read from. + + Returns: + A list of Atoms objects as read from each frame of the xyz file. + """ + + rfile = open(filename,"r") + ratoms = [] + while True: + #while loop, so that more than one configuration can be given + #so multiple beads can be initialized at once. + try: + myatoms = read_xyz(rfile) + except EOFError: + break + ratoms.append(myatoms) + return ratoms + +def init_pdb(filename): + """Reads an pdb file and returns the data contained in it. + + Args: + filename: A string giving the name of the pdb file to be read from. + + Returns: + A list of Atoms objects as read from each frame of the pdb file, and + a Cell object as read from the final pdb frame. + """ + + rfile = open(filename,"r") + ratoms = [] + while True: + #while loop, so that more than one configuration can be given + #so multiple beads can be initialized at once. + try: + myatoms, rcell = read_pdb(rfile) + except EOFError: + break + ratoms.append(myatoms) + return ( ratoms, rcell ) # if multiple frames, the last cell is returned + +def init_chk(filename): + """Reads an checkpoint file and returns the data contained in it. + + Args: + filename: A string giving the name of the checkpoint file to be read from. + + Returns: + A Beads object, Cell object and Thermostat object as read from the + checkpoint file. + """ + + # reads configuration from a checkpoint file + rfile = open(filename,"r") + xmlchk = xml_parse_file(rfile) # Parses the file. + + from ipi.inputs.simulation import InputSimulation + simchk = InputSimulation() + simchk.parse(xmlchk.fields[0][1]) + rcell = simchk.cell.fetch() + rbeads = simchk.beads.fetch() + rthermo = simchk.ensemble.thermostat.fetch() + + return (rbeads, rcell, rthermo) + +def init_beads(iif, nbeads): + """A file to initialize a beads object from an appropriate initializer + object. + + Args: + iif: An Initializer object which has information on the bead positions. + nbeads: The number of beads. + + Raises: + ValueError: If called using an Initializer object with a 'manual' mode. + """ + + mode = iif.mode; value = iif.value + if mode == "xyz" or mode == "pdb": + if mode == "xyz": ratoms = init_xyz(value) + if mode == "pdb": ratoms = init_pdb(value)[0] + rbeads = Beads(ratoms[0].natoms,len(ratoms)) + for i in range(len(ratoms)): rbeads[i] = ratoms[i] + elif mode == "chk": + rbeads = init_chk(value)[0] + elif mode == "manual": + raise ValueError("Cannot initialize manually a whole beads object.") + + return rbeads + +def init_vector(iif, nbeads, momenta=False): + """A file to initialize a vector from an appropriate initializer + object. + + Args: + iif: An Initializer object specifying the value of a vector. + nbeads: The number of beads. + momenta: If bead momenta rather than positions are being initialized + from a checkpoint file, this is set to True. + """ + + mode = iif.mode; value = iif.value + if mode == "xyz" or mode == "pdb": + rq = init_beads(iif, nbeads).q + elif mode == "chk": + if momenta: rq = init_beads(iif, nbeads).p + else: rq = init_beads(iif, nbeads).q + elif mode == "manual": + rq = value + + # determines the size of the input data + if mode == "manual": + if iif.bead >= 0: # if there is a bead specifier then we return a single bead slice + nbeads = 1 + natoms = len(rq)/nbeads/3 + rq.shape = (nbeads,3*natoms) + + return rq + +def set_vector(iif, dq, rq): + """A file to initialize a vector from an another vector. + + If the first dimension is different, i.e. the two vectors correspond + to a different number of beads, then the ring polymer contraction/expansion + is used to rescale the original vector to the one used in the simulation, + as described in the paper T. E. Markland and D. E. Manolopoulos, J. Chem. + Phys. 129, 024105, (2008). + + Args: + iif: An Initializer object specifying the value of a vector. + dq: The vector to be initialized. + rq: The vector to initialize from. + """ + + (nbeads, natoms) = rq.shape; natoms /= 3 + (dbeads, datoms) = dq.shape; datoms /= 3 + + # Check that indices make sense + if iif.index < 0 and natoms != datoms: + raise ValueError("Initialization tries to mix up structures with different atom numbers.") + if iif.index >= datoms: + raise ValueError("Cannot initialize single atom as atom index %d is larger than the number of atoms" % iif.index) + if iif.bead >= dbeads: + raise ValueError("Cannot initialize single bead as bead index %d is larger than the number of beads" % iif.bead) + + if iif.bead < 0: # we are initializing the path + res = nm_rescale(nbeads,dbeads) # path rescaler + if nbeads != dbeads: + info(" # Initialize is rescaling from %5d beads to %5d beads" % (nbeads, dbeads), verbosity.low) + if iif.index < 0: + dq[:] = res.b1tob2(rq) + else: # we are initializing a specific atom + dq[:,3*iif.index:3*(iif.index+1)] = res.b1tob2(rq) + else: # we are initializing a specific bead + if iif.index < 0: + dq[iif.bead] = rq + else: + dq[iif.bead,3*iif.index:3*(iif.index+1)] = rq + +class Initializer(dobject): + """Class that deals with the initialization of data. + + This can either be used to initialize the atom positions and the cell data + from a file, or to initialize them from a beads, atoms or cell object. + + Currently, we use a ring polymer contraction scheme to create a new beads + object from one given in initialize if they have different numbers of beads, + as described in the paper T. E. Markland and D. E. Manolopoulos, J. Chem. + Phys. 129, 024105, (2008). If the new beads object has more beads than + the beads object it was initialized from, we set the higher ring polymer + normal modes to zero. + + Attributes: + queue: A list of things to initialize. Each member of the list is a tuple + of the form ('type', 'object'), where 'type' specifies what kind of + initialization is being done, and 'object' gives the data to + initialize it from. + """ + + def __init__(self, nbeads=0, queue=None): + """Initializes Initializer. + + Arguments: + nbeads: The number of beads that we need in the simulation. Not + necessarily the same as the number of beads of the objects we are + initializing the data from. + queue: A list of things to initialize. Each member of the list is a + tuple of the form ('type', 'object'), where 'type' specifies what + kind of initialization is being done, and 'object' gives the data to + initialize it from. + """ + + self.nbeads = nbeads + + if queue is None: + self.queue = [] + else: + self.queue = queue + + def init_stage1(self, simul): + """Initializes the simulation -- first stage. + + Takes a simulation object, and uses all the data in the initialization + queue to fill up the beads and cell data needed to run the simulation. + + Args: + simul: A simulation object to be initialized. + + Raises: + ValueError: Raised if there is a problem with the initialization, + if something that should have been has not been, or if the objects + that have been specified are not compatible with each other. + """ + + if simul.beads.nbeads == 0: + fpos = fmom = fmass = flab = fcell = False # we don't have an explicitly defined beads object yet + else: + fpos = fmom = fmass = flab = fcell = True + + for (k,v) in self.queue: + info(" # Initializer (stage 1) parsing " + str(k) + " object.", verbosity.high) + + if k == "cell": + if fcell : + warning("Overwriting previous cell parameters", verbosity.medium) + if v.mode == "pdb": + rh = init_pdb(v.value)[1].h + elif v.mode == "chk": + rh = init_chk(v.value)[1].h + else: + rh = v.value.reshape((3,3)) + rh *= unit_to_internal("length",v.units,1.0) + + simul.cell.h = rh + if simul.cell.V == 0.0: + ValueError("Cell provided has zero volume") + + fcell = True + elif k == "masses": + if simul.beads.nbeads == 0: + raise ValueError("Cannot initialize the masses before the size of the system is known") + if fmass: + warning("Overwriting previous atomic masses", verbosity.medium) + if v.mode == "manual": + rm = v.value + else: + rm = init_beads(v, self.nbeads).m + rm *= unit_to_internal("mass",v.units,1.0) + + if v.bead < 0: # we are initializing the path + if (fmom and fmass): + warning("Rescaling momenta to make up for changed mass", verbosity.medium) + simul.beads.p /= simul.beads.sm3 # go to mass-scaled momenta, that are mass-invariant + if v.index < 0: + simul.beads.m = rm + else: # we are initializing a specific atom + simul.beads.m[v.index:v.index+1] = rm + if (fmom and fmass): # finishes correcting the momenta + simul.beads.p *= simul.beads.sm3 # back to normal momenta + else: + raise ValueError("Cannot change the mass of a single bead") + fmass = True + + elif k == "labels": + if simul.beads.nbeads == 0: + raise ValueError("Cannot initialize the labels before the size of the system is known") + if flab: + warning("Overwriting previous atomic labels", verbosity.medium) + if v.mode == "manual": + rn = v.value + else: + rn = init_beads(v, self.nbeads).names + + if v.bead < 0: # we are initializing the path + if v.index < 0: + simul.beads.names = rn + else: # we are initializing a specific atom + simul.beads.names[v.index:v.index+1] = rn + else: + raise ValueError("Cannot change the label of a single bead") + flab = True + + elif k == "positions": + if fpos: + warning("Overwriting previous atomic positions", verbosity.medium) + # read the atomic positions as a vector + rq = init_vector(v, self.nbeads) + rq *= unit_to_internal("length",v.units,1.0) + (nbeads, natoms) = rq.shape; natoms /= 3 + + # check if we must initialize the simulation beads + if simul.beads.nbeads == 0: + if v.index >= 0: + raise ValueError("Cannot initialize single atoms before the size of the system is known") + simul.beads.resize(natoms,self.nbeads) + + set_vector(v, simul.beads.q, rq) + fpos = True + + elif (k == "velocities" or k == "momenta") and v.mode == "thermal" : # intercept here thermal initialization, so we don't need to check further down + if fmom: + warning("Overwriting previous atomic momenta", verbosity.medium) + if simul.beads.natoms == 0: + raise ValueError("Cannot initialize momenta before the size of the system is known.") + if not fmass: + raise ValueError("Trying to resample velocities before having masses.") + + rtemp = v.value * unit_to_internal("temperature",v.units,1.0) + if rtemp <= 0: + warning("Using the simulation temperature to resample velocities", verbosity.low) + rtemp = simul.ensemble.temp + else: + info(" # Resampling velocities at temperature %s %s" % (v.value, v.units), verbosity.low) + + # pull together a mock initialization to get NM masses right + #without too much code duplication + if v.bead >= 0: + raise ValueError("Cannot thermalize a single bead") + if v.index >= 0: + rnatoms = 1 + else: + rnatoms = simul.beads.natoms + rbeads = Beads(rnatoms, simul.beads.nbeads) + if v.index < 0: + rbeads.m[:] = simul.beads.m + else: + rbeads.m[:] = simul.beads.m[v.index] + rnm = NormalModes(mode=simul.nm.mode, transform_method=simul.nm.transform_method, freqs=simul.nm.nm_freqs) + rens = Ensemble(dt=simul.ensemble.dt, temp=simul.ensemble.temp) + rnm.bind(rbeads,rens) + # then we exploit the sync magic to do a complicated initialization + # in the NM representation + # with (possibly) shifted-frequencies NM + rnm.pnm = simul.prng.gvec((rbeads.nbeads,3*rbeads.natoms))*np.sqrt(rnm.dynm3)*np.sqrt(rbeads.nbeads*rtemp*Constants.kb) + + if v.index < 0: + simul.beads.p = rbeads.p + else: + simul.beads.p[:,3*v.index:3*(v.index+1)] = rbeads.p + fmom = True + + elif k == "momenta": + if fmom: + warning("Overwriting previous atomic momenta", verbosity.medium) + # read the atomic momenta as a vector + rp = init_vector(v, self.nbeads, momenta = True) + rp *= unit_to_internal("momentum",v.units,1.0) + (nbeads, natoms) = rp.shape; natoms /= 3 + + # checks if we must initialize the simulation beads + if simul.beads.nbeads == 0: + if v.index >= 0 : + raise ValueError("Cannot initialize single atoms before the size of the system is known") + simul.beads.resize(natoms,self.nbeads) + + rp *= np.sqrt(self.nbeads/nbeads) + set_vector(v, simul.beads.p, rp) + fmom = True + + elif k == "velocities": + if fmom: + warning("Overwriting previous atomic momenta", verbosity.medium) + # read the atomic velocities as a vector + rv = init_vector(v, self.nbeads) + rv *= unit_to_internal("velocity",v.units,1.0) + (nbeads, natoms) = rv.shape; natoms /= 3 + + # checks if we must initialize the simulation beads + if simul.beads.nbeads == 0 or not fmass: + ValueError("Cannot initialize velocities before the masses of the atoms are known") + simul.beads.resize(natoms,self.nbeads) + + warning("Initializing from velocities uses the previously defined masses -- not the masses inferred from the file -- to build momenta", verbosity.low) + if v.index >= 0: + rv *= simul.beads.m[v.index] + elif v.bead >= 0: + rv *= simul.beads.m3[0] + else: + rv *= simul.beads.m3 + rv *= np.sqrt(self.nbeads/nbeads) + set_vector(v, simul.beads.p, rv) + fmom = True + elif k == "thermostat": pass # thermostats must be initialised in a second stage + + if simul.beads.natoms == 0: + raise ValueError("Initializer could not initialize the atomic positions") + if simul.cell.V == 0: + raise ValueError("Initializer could not initialize the cell") + for i in range(simul.beads.natoms): + if simul.beads.m[i] <= 0: + raise ValueError("Initializer could not initialize the masses") + if simul.beads.names[i] == "": + raise ValueError("Initializer could not initialize the atom labels") + if not fmom: + warning("Momenta not specified in initialize. Will start with zero velocity if they are not specified in beads.", verbosity.low) + + def init_stage2(self, simul): + """Initializes the simulation -- second stage. + + Takes a simulation object which has been fully generated, + and restarts additional information such as the thermostat internal state. + + Args: + simul: A simulation object to be initialized. + + Raises: + ValueError: Raised if there is a problem with the initialization, + if something that should have been has not been, or if the objects + that have been specified are not compatible with each other. + """ + + for (k,v) in self.queue: + info(" # Initializer (stage 2) parsing " + str(k) + " object.", verbosity.high) + + if k == "gle": + # read thermostat parameters from file + if not ( hasattr(simul.ensemble, "thermostat") ): + raise ValueError("Ensemble does not have a thermostat to initialize") + if not ( hasattr(simul.ensemble.thermostat, "s") ): + raise ValueError("There is nothing to initialize in non-GLE thermostats") + ssimul = simul.ensemble.thermostat.s + if v.mode == "manual": + sinput = v.value.copy() + if (sinput.size() != ssimul.size() ): + raise ValueError("Size mismatch in thermostat initialization data") + sinput.shape = ssimul.shape + elif v.mode == "chk": + rthermo = init_chk(v.value)[2] + if not hasattr(rthermo,"s"): + raise ValueError("Checkpoint file does not contain usable thermostat data") + sinput = rthermo.s.copy() + if sinput.shape != ssimul.shape : + raise ValueError("Shape mismatch in thermostat initialization data") + + # if all the preliminary checks are good, we can initialize the s's + ssimul[:] = sinput diff --git a/tools/i-pi/ipi/engine/normalmodes.py b/tools/i-pi/ipi/engine/normalmodes.py new file mode 100644 index 000000000..38566736f --- /dev/null +++ b/tools/i-pi/ipi/engine/normalmodes.py @@ -0,0 +1,400 @@ +"""Contains the classes that deal with the normal mode representation. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Deals with the normal mode transformation, including the complications +introduced by PA-CMD when the bead masses are rescaled. Also deals with +the change in the dynamics introduced by this mass-scaling, and has its +own functions to calculate the kinetic energy, and the exact propagator +in the normal mode representation under the ring polymer Hamiltonian. + +Classes: + NormalModes: Deals with the normal mode transformation in RPMD and PA-CMD. +""" + +import numpy as np +from ipi.utils.depend import * +from ipi.utils import units +from ipi.utils import nmtransform +from ipi.utils.messages import verbosity, warning, info + +__all__ = [ "NormalModes" ] + +class NormalModes(dobject): + """ A helper class to manipulate the path NM. + + Normal-modes transformation, determination of path frequencies, + dynamical mass matrix change, etc. + + Attributes: + natoms: The number of atoms. + nbeads: The number of beads. + beads: The beads object for which the normal mode transformation should + be done. + ensemble: The ensemble object, specifying the temperature to hold the + system to. + transform: A nm_trans object that contains the functions that are + required for the normal mode transformation. + + Depend objects: + mode: A string specifying how the bead masses are chosen. + transform_method: A string specifying how to do the normal mode + transformation. + nm_freqs: An array that specifies how the normal mode frequencies + of the ring polymers are to be calculated, and thus how the + bead masses should be chosen. + qnm: The bead positions in the normal mode representation. Depends on + beads.q. + pnm: The bead momenta in the normal mode representation. Depends on + beads.p. + omegan: The effective vibrational frequency for the interaction + between the replicas. Depends on the simulation temperature. + omegan2: omegan**2. + omegak: The normal mode frequencies for the free ring polymer. + Depends on omegan. + prop_pq: An array holding the exact normal mode propagator for the + free ring polymer, using mass scaled coordinates. + See J. Chem. Phys. 133, 124101 (2010). Depends on the bead masses + and the timestep. + nm_factor: An array of dynamical mass factors associated with each of + the normal modes. Depends on nm_freqs and mode. + dynm3: An array that gives the dynamical masses of individual atoms in the + normal modes representation. Depends on nm_factor and beads.m3. + dynomegak: The scaled vibrational frequencies. Depends on nm_factor and + omegak. + kins: A list of the kinetic energy for each normal mode, as + calculated in the normal mode representation, using the + dynamical mass factors. Depends on beads.sm3, beads.p and nm_factor. + kin: The total kinetic energy, as calculated in the normal mode + representation, using the dynamical mass factors. + kstress: The kinetic stress tensor, as calculated in the normal mode + representation, using the dynamical mass factors. Depends on + beads.sm3, beads.p and nm_factor. + """ + + def __init__(self, mode="rpmd", transform_method="fft", freqs=None): + """Initializes NormalModes. + + Sets the options for the normal mode transform. + + Args: + mode: A string specifying how to calculate the bead masses. + transform_method: A string specifying how to do the normal mode + transformation. + freqs: A list of data used to calculate the dynamical mass factors. + """ + + if freqs is None: + freqs = [] + dset(self,"mode", depend_value(name='mode', value=mode)) + dset(self,"transform_method", + depend_value(name='transform_method', value=transform_method)) + dset(self,"nm_freqs", + depend_array(name="nm_freqs",value=np.asarray(freqs, float) ) ) + + def bind(self, beads, ensemble): + """ Initializes the normal modes object and binds to beads and ensemble. + + Do all the work down here as we need a full-formed necklace and ensemble + to know how this should be done. + + Args: + beads: A beads object to be bound. + ensemble: An ensemble object to be bound. + """ + + self.nbeads = beads.nbeads + self.natoms = beads.natoms + + # stores a reference to the bound beads and ensemble objects + self.beads = beads + self.ensemble = ensemble + + # sets up what's necessary to perform nm transformation. + if self.transform_method == "fft": + self.transform = nmtransform.nm_fft(nbeads=self.nbeads, natoms=self.natoms) + elif self.transform_method == "matrix": + self.transform = nmtransform.nm_trans(nbeads=self.nbeads) + + # creates arrays to store normal modes representation of the path. + # must do a lot of piping to create "ex post" a synchronization between the beads and the nm + sync_q = synchronizer() + sync_p = synchronizer() + dset(self,"qnm", + depend_array(name="qnm", + value=np.zeros((self.nbeads,3*self.natoms), float), + func={"q": (lambda : self.transform.b2nm(depstrip(self.beads.q)) ) }, + synchro=sync_q ) ) + dset(self,"pnm", + depend_array(name="pnm", + value=np.zeros((self.nbeads,3*self.natoms), float), + func={"p": (lambda : self.transform.b2nm(depstrip(self.beads.p)) ) }, + synchro=sync_p ) ) + + # must overwrite the functions + dget(self.beads, "q")._func = { "qnm": (lambda : self.transform.nm2b(depstrip(self.qnm)) ) } + dget(self.beads, "p")._func = { "pnm": (lambda : self.transform.nm2b(depstrip(self.pnm)) ) } + dget(self.beads, "q").add_synchro(sync_q) + dget(self.beads, "p").add_synchro(sync_p) + + # also within the "atomic" interface to beads + for b in range(self.nbeads): + dget(self.beads._blist[b],"q")._func = { "qnm": (lambda : self.transform.nm2b(depstrip(self.qnm)) ) } + dget(self.beads._blist[b],"p")._func = { "pnm": (lambda : self.transform.nm2b(depstrip(self.pnm)) ) } + dget(self.beads._blist[b],"q").add_synchro(sync_q) + dget(self.beads._blist[b],"p").add_synchro(sync_p) + + + # finally, we mark the beads as those containing the set positions + dget(self.beads, "q").update_man() + dget(self.beads, "p").update_man() + + # create path-frequencies related properties + dset(self,"omegan", + depend_value(name='omegan', func=self.get_omegan, + dependencies=[dget(self.ensemble,"temp")]) ) + dset(self,"omegan2", depend_value(name='omegan2',func=self.get_omegan2, + dependencies=[dget(self,"omegan")]) ) + dset(self,"omegak", depend_array(name='omegak', + value=np.zeros(self.beads.nbeads,float), + func=self.get_omegak, dependencies=[dget(self,"omegan")]) ) + + # sets up "dynamical" masses -- mass-scalings to give the correct RPMD/CMD dynamics + dset(self,"nm_factor", depend_array(name="nmm", + value=np.zeros(self.nbeads, float), func=self.get_nmm, + dependencies=[dget(self,"nm_freqs"), dget(self,"mode") ]) ) + dset(self,"dynm3", depend_array(name="dm3", + value=np.zeros((self.nbeads,3*self.natoms), float),func=self.get_dynm3, + dependencies=[dget(self,"nm_factor"), dget(self.beads, "m3")] ) ) + dset(self,"dynomegak", depend_array(name="dynomegak", + value=np.zeros(self.nbeads, float), func=self.get_dynwk, + dependencies=[dget(self,"nm_factor"), dget(self,"omegak") ]) ) + + dset(self,"prop_pq", + depend_array(name='prop_pq',value=np.zeros((self.beads.nbeads,2,2)), + func=self.get_prop_pq, + dependencies=[dget(self,"omegak"), dget(self,"nm_factor"), dget(self.ensemble,"dt")]) ) + + # if the mass matrix is not the RPMD one, the MD kinetic energy can't be + # obtained in the bead representation because the masses are all mixed up + dset(self,"kins", + depend_array(name="kins",value=np.zeros(self.nbeads, float), + func=self.get_kins, + dependencies=[dget(self,"pnm"), dget(self.beads,"sm3"), dget(self, "nm_factor") ] )) + dset(self,"kin", + depend_value(name="kin", func=self.get_kin, + dependencies=[dget(self,"kins")] )) + dset(self,"kstress", + depend_array(name="kstress",value=np.zeros((3,3), float), + func=self.get_kstress, + dependencies=[dget(self,"pnm"), dget(self.beads,"sm3"), dget(self, "nm_factor") ] )) + + def get_omegan(self): + """Returns the effective vibrational frequency for the interaction + between replicas. + """ + + return self.ensemble.temp*self.nbeads*units.Constants.kb/units.Constants.hbar + + def get_omegan2(self): + """Returns omegan**2.""" + + return self.omegan**2 + + def get_omegak(self): + """Gets the normal mode frequencies. + + Returns: + A list of the normal mode frequencies for the free ring polymer. + The first element is the centroid frequency (0.0). + """ + + return 2*self.omegan*np.array([np.sin(k*np.pi/self.nbeads) for k in range(self.nbeads)]) + + def get_dynwk(self): + """Gets the dynamical normal mode frequencies. + + Returns: + A list of the scaled normal mode frequencies for the free ring polymer. + The first element is the centroid frequency (0.0). + """ + + return self.omegak/np.sqrt(self.nm_factor) + + def get_prop_pq(self): + """Gets the normal mode propagator matrix. + + Note the special treatment for the centroid normal mode, which is + propagated using the standard velocity Verlet algorithm as required. + Note that both the normal mode positions and momenta are propagated + using this matrix. + + Returns: + An array of the form (nbeads, 2, 2). Each 2*2 array prop_pq[i,:,:] + gives the exact propagator for the i-th normal mode of the + ring polymer. + """ + + dt = self.ensemble.dt + pqk = np.zeros((self.nbeads,2,2), float) + pqk[0] = np.array([[1,0], [dt,1]]) + + for b in range(1, self.nbeads): + sk = np.sqrt(self.nm_factor[b]) # NOTE THAT THE PROPAGATOR USES MASS-SCALED MOMENTA! + + dtomegak = self.omegak[b]*dt/sk + c = np.cos(dtomegak) + s = np.sin(dtomegak) + pqk[b,0,0] = c + pqk[b,1,1] = c + pqk[b,0,1] = -s*self.omegak[b]*sk + pqk[b,1,0] = s/(self.omegak[b]*sk) + + return pqk + + def get_nmm(self): + """Returns dynamical mass factors, i.e. the scaling of normal mode + masses that determine the path dynamics (but not statics).""" + + # also checks that the frequencies and the mode given in init are + # consistent with the beads and ensemble + + dmf = np.zeros(self.nbeads,float) + dmf[:] = 1.0 + if self.mode == "rpmd": + if len(self.nm_freqs) > 0: + warning("nm.frequencies will be ignored for RPMD mode.", verbosity.low) + elif self.mode == "manual": + if len(self.nm_freqs) != self.nbeads-1: + raise ValueError("Manual path mode requires (nbeads-1) frequencies, one for each internal mode of the path.") + for b in range(1, self.nbeads): + sk = self.omegak[b]/self.nm_freqs[b-1] + dmf[b] = sk**2 + elif self.mode == "pa-cmd": + if len(self.nm_freqs) > 1: + warning("Only the first element in nm.frequencies will be considered for PA-CMD mode.", verbosity.low) + if len(self.nm_freqs) == 0: + raise ValueError("PA-CMD mode requires the target frequency of all the internal modes.") + for b in range(1, self.nbeads): + sk = self.omegak[b]/self.nm_freqs[0] + info(" ".join(["NM FACTOR", str(b), str(sk), str(self.omegak[b]), str(self.nm_freqs[0])]), verbosity.medium) + dmf[b] = sk**2 + elif self.mode == "wmax-cmd": + if len(self.nm_freqs) > 2: + warning("Only the first two element in nm.frequencies will be considered for WMAX-CMD mode.", verbosity.low) + if len(self.nm_freqs) < 2: + raise ValueError("WMAX-CMD mode requires [wmax, wtarget]. The normal modes will be scaled such that the first internal mode is at frequency wtarget and all the normal modes coincide at frequency wmax.") + wmax = self.nm_freqs[0] + wt = self.nm_freqs[1] + for b in range(1, self.nbeads): + sk = 1.0/np.sqrt((wt)**2*(1+(wmax/self.omegak[1])**2)/(wmax**2+(self.omegak[b])**2)) + dmf[b] = sk**2 + + return dmf + + def get_dynm3(self): + """Returns an array with the dynamical masses of individual atoms in the normal modes representation.""" + + dm3 = np.zeros(self.beads.m3.shape,float) + for b in range(self.nbeads): + dm3[b] = self.beads.m3[b]*self.nm_factor[b] + + return dm3 + + def free_qstep(self): + """Exact normal mode propagator for the free ring polymer. + + Note that the propagator works in mass scaled coordinates, so that the + propagator matrix can be determined independently from the particular + atom masses, and so the same propagator will work for all the atoms in + the system. All the ring polymers are propagated at the same time by a + matrix multiplication. + + Also note that the centroid coordinate is propagated in qcstep, so is + not altered here. + """ + + if self.nbeads == 1: + pass + else: + pq = np.zeros((2,self.natoms*3),float) + sm = depstrip(self.beads.sm3)[0] + prop_pq = depstrip(self.prop_pq) + for k in range(1,self.nbeads): + pq[0,:] = depstrip(self.pnm)[k]/sm + pq[1,:] = depstrip(self.qnm)[k]*sm + pq = np.dot(prop_pq[k],pq) + self.qnm[k] = pq[1,:]/sm + self.pnm[k] = pq[0,:]*sm + + def get_kins(self): + """Gets the MD kinetic energy for all the normal modes. + + Returns: + A list of the kinetic energy for each NM. + """ + + kmd = np.zeros(self.nbeads,float) + sm = depstrip(self.beads.sm3[0]) + pnm = depstrip(self.pnm) + nmf = depstrip(self.nm_factor) + + # computes the MD ke in the normal modes representation, to properly account for CMD mass scaling + for b in range(self.nbeads): + sp = pnm[b]/sm # mass-scaled momentum of b-th NM + kmd[b] = np.dot(sp,sp)*0.5/nmf[b] # include the partially adiabatic CMD mass scaling + + return kmd + + def get_kin(self): + """Gets the total MD kinetic energy. + + Note that this does not correspond to the quantum kinetic energy estimate + for the system. + + Returns: + The sum of the kinetic energy of each NM in the path. + """ + + return self.kins.sum() + + def get_kstress(self): + """Calculates the total MD kinetic stress tensor. + + Note that this does not correspond to the quantum kinetic stress tensor + estimate for the system. + + Returns: + The sum of the MD kinetic stress tensor contributions from each NM. + """ + + kmd = np.zeros((3,3),float) + sm = depstrip(self.beads.sm3[0]) + pnm = depstrip(self.pnm) + nmf = depstrip(self.nm_factor) + + for b in range(self.nbeads): + sp = pnm[b]/sm # mass-scaled momentum of b-th NM + + for i in range(3): + for j in range(3): + # computes the outer product of the p of various normal modes + # singling out Cartesian components to build the tensor + # also takes care of the possibility of having non-RPMD masses + kmd[i,j] += np.dot(sp[i:3*self.natoms:3],sp[j:3*self.natoms:3])/nmf[b] + + return kmd diff --git a/tools/i-pi/ipi/engine/outputs.py b/tools/i-pi/ipi/engine/outputs.py new file mode 100644 index 000000000..fb5ebda96 --- /dev/null +++ b/tools/i-pi/ipi/engine/outputs.py @@ -0,0 +1,378 @@ +"""Classes to deal with output of simulation data. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Holds classes to deal with the output of different properties, trajectories +and the restart files. + +Classes: + PropertyOutput: Deals with outputting properties. + TrajectoryOutput: Deals with outputting trajectories. + CheckpointOutput: Deals with outputting restart files. +""" + +import os +import numpy as np +import ipi.inputs.simulation +from ipi.utils.depend import * +from ipi.utils.io.io_xml import * +from ipi.engine.properties import getkey + +__all__ = [ 'PropertyOutput', 'TrajectoryOutput', 'CheckpointOutput' ] + +class PropertyOutput(dobject): + """Class dealing with outputting a set of properties to file. + + Does not do any calculation, just manages opening a file, getting data + from a Properties object and outputting with the desired stride. + + Attributes: + filename: The name of the file to output to. + outlist: A list of the properties to be output. + stride: The number of steps that should be taken between outputting the + data to file. + flush: How often we should flush to disk. + nout: Number of steps since data was last flushed. + out: The output stream on which to output the properties. + simul: The simulation object to get the data to be output from. + """ + + + def __init__(self, filename="out", stride=1, flush=1, outlist=None): + """Initializes a property output stream opening the corresponding + file name. + + Also writes out headers. + + Args: + filename: A string giving the name of the file to be output to. + stride: An integer giving how many steps should be taken between + outputting the data to file. + flush: Number of writes to file between flushing data. + outlist: A list of all the properties that should be output. + """ + + if outlist is None: + outlist = np.zeros(0,np.dtype('|S1024')) + self.filename = filename + self.outlist = np.asarray(outlist,np.dtype('|S1024')) + self.stride = stride + self.flush = flush + self.nout = 0 + self.out = None + + def bind(self, simul): + """Binds output proxy to simulation object. + + Args: + simul: A simulation object to be bound. + """ + + self.simul = simul + + # Checks as soon as possible if some asked-for properties are + # missing or mispelled + for what in self.outlist: + key = getkey(what) + if not key in self.simul.properties.property_dict.keys(): + print "Computable properties list: ", self.simul.properties.property_dict.keys() + raise KeyError(key + " is not a recognized property") + + self.open_stream() + + def open_stream(self): + """Opens the output stream.""" + + try: + self.out = open(self.filename, "a") + except: + raise ValueError("Could not open file " + self.filename + " for output") + + # print nice header if information is available on the properties + if (self.simul.step == 0) : + icol = 1 + for what in self.outlist: + ohead = "# " + key = getkey(what) + prop = self.simul.properties.property_dict[key] + + if "size" in prop and prop["size"] > 1: + ohead += "cols. %3d-%-3d" % ( icol, icol+prop["size"] - 1 ) + icol += prop["size"] + else: + ohead += "column %3d " % ( icol ) + icol += 1 + ohead += " --> %s " % (what) + if "help" in prop: + ohead += ": " + prop["help"] + self.out.write(ohead + "\n") + + def close_stream(): + """Closes the output stream.""" + + self.out.close() + + def write(self): + """Outputs the required properties of the system. + + Note that properties are outputted using the same format as for the + output to the xml checkpoint files, as specified in io_xml. + + Raises: + KeyError: Raised if one of the properties specified in the output list + are not contained in the property_dict member of properties. + """ + + if not (self.simul.step + 1) % self.stride == 0: + return + self.out.write(" ") + for what in self.outlist: + try: + quantity = self.simul.properties[what] + except KeyError: + raise KeyError(what + " is not a recognized property") + if not hasattr(quantity,"__len__") : + self.out.write(write_type(float, quantity) + " ") + else: + for el in quantity: + self.out.write(write_type(float, el) + " ") + + self.out.write("\n") + + self.nout += 1 + if self.flush > 0 and self.nout >= self.flush : + self.out.flush() + os.fsync(self.out) # we REALLY want to print out! pretty please OS let us do it. + self.nout = 0 + + +class TrajectoryOutput(dobject): + """Class dealing with outputting atom-based properties as a + trajectory file. + + Does not do any calculation, just manages opening a file, getting data + from a Trajectories object and outputting with the desired stride. + + Attributes: + filename: The (base) name of the file to output to. + format: The format of the trajectory file to be created. + what: The trajectory that needs to be output. + stride: The number of steps that should be taken between outputting the + data to file. + out: The output stream on which to output the trajectories. + flush: How often we should flush to disk. + nout: Number of steps since data was last flushed. + ibead: Index of the replica to print the trajectory of. + cell_units: The units that the cell parameters are given in. + simul: The simulation object to get the data to be output from. + """ + + def __init__(self, filename="out", stride=1, flush=1, what="", format="xyz", cell_units="atomic_unit", ibead=-1): + """ Initializes a property output stream opening the corresponding + file name. + + Also writes out headers. + + Args: + filename: A string giving the name of the file to be output to. + stride: An integer giving how many steps should be taken between + outputting the data to file. + flush: How often we should flush to disk + what: A string specifying what trajectory should be output. + format: A string specifying the type of trajectory file to be created. + cell_units: A string specifying the units that the cell parameters are + given in. + ibead: If positive, prints out only the selected bead. If negative, prints out one file per bead. + """ + + self.filename = filename + self.what = what + self.stride = stride + self.flush = flush + self.ibead = ibead + self.format = format + self.cell_units = cell_units + self.out = None + self.nout = 0 + + def bind(self, simul): + """Binds output proxy to simulation object. + + Args: + simul: A simulation object to be bound. + """ + + self.simul = simul + + # Checks as soon as possible if some asked-for trajs are missing or mispelled + key = getkey(self.what) + if not key in self.simul.trajs.traj_dict.keys(): + print "Computable trajectories list: ", self.simul.trajs.traj_dict.keys() + raise KeyError(key + " is not a recognized output trajectory") + + self.open_stream() + + def open_stream(self): + """Opens the output stream(s).""" + + if getkey(self.what) in [ "positions", "velocities", "forces", "extras" ]: + # must write out trajectories for each bead, so must create b streams + self.out = [] + for b in range(self.simul.beads.nbeads): + # zero-padded bead number + padb = ( ("%0" + str(int(1 + np.floor(np.log(self.simul.beads.nbeads)/np.log(10)))) + "d") % (b) ) + try: + if (self.ibead < 0 or self.ibead == b): + if getkey(self.what) == "extras": + self.out.append(open(self.filename + "_" + padb, "a")) + else: + self.out.append(open(self.filename + "_" + padb + "." + self.format, "a")) + else: + self.out.append(None) # creates null outputs if a + # single bead output is chosen + except: + raise ValueError("Could not open file " + self.filename + "_" + padb + "." + self.format + " for output") + else: + try: + self.out = ( open(self.filename + "." + self.format, "a") ) + except: + raise ValueError("Could not open file " + self.filename + "." + self.format + " for output") + + def close_stream(): + """Closes the output stream.""" + + if hasattr(self.out, "__getitem__"): + for o in self.out: + o.close() + else: + self.out.close() + + def write(self): + """Writes out the required trajectories.""" + + if not (self.simul.step + 1) % self.stride == 0: + return + + doflush = False + self.nout += 1 + if self.flush > 0 and self.nout >= self.flush : + doflush = True + self.nout = 0 + + # quick-and-dirty way to check if a trajectory is "global" or per-bead + # Checks to see if there is a list of files or just a single file. + if hasattr(self.out, "__getitem__"): + if self.ibead < 0: + for b in range(len(self.out)): + self.simul.trajs.print_traj(self.what, self.out[b], b, format=self.format, cell_units=self.cell_units, flush=doflush) + elif self.ibead < len(self.out): + self.simul.trajs.print_traj(self.what, self.out[self.ibead], self.ibead, format=self.format, cell_units=self.cell_units, flush=doflush) + else: + raise ValueError("Selected bead index " + str(self.ibead) + " does not exist for trajectory " + self.what) + else: + self.simul.trajs.print_traj(self.what, self.out, b=0, format=self.format, cell_units=self.cell_units, flush=doflush) + + +class CheckpointOutput(dobject): + """Class dealing with outputting checkpoints. + + Saves the complete status of the simulation at regular intervals. + + Attributes: + filename: The (base) name of the file to output to. + step: the number of times a checkpoint has been written out. + stride: The number of steps that should be taken between outputting the + data to file. + overwrite: If True, the checkpoint file is overwritten at each output. + If False, will output to 'filename_step'. Note that no check is done + on whether 'filename_step' exists already. + simul: The simulation object to get the data to be output from. + status: An input simulation object used to write out the checkpoint file. + """ + + + def __init__(self, filename="restart", stride=1000, overwrite=True, step=0): + """Initializes a checkpoint output proxy. + + Args: + filename: A string giving the name of the file to be output to. + stride: An integer giving how many steps should be taken between + outputting the data to file. + overwrite: If True, the checkpoint file is overwritten at each output. + If False, will output to 'filename_step'. Note that no check is done + on whether 'filename_step' exists already. + step: The number of checkpoint files that have been created so far. + """ + + self.filename = filename + self.step = step + self.stride = stride + self.overwrite = overwrite + + def bind(self, simul): + """Binds output proxy to simulation object. + + Args: + simul: A simulation object to be bound. + """ + + self.simul = simul + self.status = ipi.inputs.simulation.InputSimulation() + self.status.store(simul) + + def store(self): + """Stores the current simulation status. + + Used so that, if halfway through a step a kill signal is received, + we can output a checkpoint file corresponding to the beginning of the + current step, which is the last time that both the velocities and + positions would have been consistent. + """ + + self.status.store(self.simul) + + def write(self, store=True): + """Writes out the required trajectories. + + Used for both the checkpoint files and the soft-exit restart file. + We have slightly different behaviour for these two different types of + checkpoint file, as the soft-exit files have their store() function + called automatically, and we do not want this to be updated as the + status of the simulation after a soft-exit call is unlikely to be in + a consistent state. On the other hand, the standard checkpoint files + are not automatically updated in this way, and we must manually store the + current state of the system before writing them. + + Args: + store: A boolean saying whether the state of the system should be + stored before writing the checkpoint file. + """ + + if not (self.simul.step + 1) % self.stride == 0: + return + + if self.overwrite: + filename = self.filename + else: + filename = self.filename + "_" + str(self.step) + + if store: + self.step += 1 # advances the step counter before saving, so next time the correct index will be loaded. + self.store() + check_file = open(filename, "w") + check_file.write(self.status.write(name="simulation")) + check_file.close() diff --git a/tools/i-pi/ipi/engine/properties.py b/tools/i-pi/ipi/engine/properties.py new file mode 100644 index 000000000..1ea07bda8 --- /dev/null +++ b/tools/i-pi/ipi/engine/properties.py @@ -0,0 +1,1273 @@ +"""Holds the class which computes important properties of the system, and +prepares them for output. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + Properties: This is the class that holds all the algorithms to calculate + the important properties that should be output. + Trajectories: This class deals with outputting all position data in the + appropriate format. + +Functions: + getkey: This function strips the units and argument list specification + from a string specifying an output parameter. + getall: This function gives the keyword, units and argument list + specification from a string specifying an output parameter. + help_latex: This returns a string that can be used in the manual to + specify the different available outputs. +""" + +__all__ = ['Properties', 'Trajectories', 'getkey', 'getall', 'help_latex'] + +import os +import numpy as np +from ipi.utils.messages import verbosity, info, warning +from ipi.utils.depend import * +from ipi.utils.units import Constants, unit_to_internal, unit_to_user +from ipi.utils.mathtools import logsumlog, h2abc_deg +from ipi.utils.io import * +from ipi.engine.atoms import * +from ipi.engine.cell import * +from ipi.engine.ensembles import * +from ipi.engine.forces import * + +def getkey(pstring): + """Strips units and argument lists from a property/trajectory keyword. + + Args: + pstring: The string input by the user that specifies an output, + which in general will specify units and argument lists. + + Returns: A string giving the keyword for the property, stripped of the + argument lists and units key words. + """ + + pa = pstring.find('(') + if pa < 0: + pa = len(pstring) + pu = pstring.find('{') + if pu < 0: + pu = len(pstring) + return pstring[0:min(pa,pu)].strip() + +def getall(pstring): + """Returns the keyword, units and argument list separately. + + Args: + pstring: The string input by the user that specifies an output, + which in general will specify units and argument lists. + + Returns: A tuple giving the keyword for the property, and its units + argument list and key word argument list. + """ + + unit = "" + arglist = () + kwarglist = {} + unstart = len(pstring) + argstart = unstart + + if '}' in pstring: + # the property has a user-defined unit + unstart = pstring.find('{') + unstop = pstring.find('}', unstart) + if unstop == -1: + raise ValueError("Incorrect format in units specification " + pstring) + unit = pstring[unstart+1:unstop] + if '(' in pstring: + # If the property has additional arguments + argstart = pstring.find('(') + argstop = pstring.find(')', argstart) + if argstop == -1: + raise ValueError("Incorrect format in argument list " + pstring) + + argstr = pstring[argstart:argstop+1] + arglist = io_xml.read_tuple(argstr, delims="()", split=";", arg_type=str) + for arg in arglist: + # If a keyword argument is used + equals = arg.find('=') + if equals >= 0: + kwarglist[arg[0:equals].strip()] = arg[equals+1:].strip() + arglist = tuple(a for a in arglist if not a == arg) + + pstring = pstring[0:min(unstart,argstart)].strip() # strips the arguments from pstring name + + return (pstring, unit, arglist, kwarglist) + +def help_latex(idict, standalone=True): + """Function to generate a LaTeX formatted file. + + Args: + idict: Either property_dict or traj_dict, to be used to + generate the help file. + standalone: A boolean giving whether the latex file produced will be a + stand-alone document, or will be intended as a section of a larger + document with cross-references between the different sections. + + Returns: + A LaTeX formatted string. + """ + + rstr = "" + if standalone: + #assumes that it is a stand-alone document, so must have document + #options. + rstr += r"\documentclass[12pt,fleqn]{report}" + rstr += r""" +\usepackage{etoolbox} +\usepackage{suffix} + +\newcommand{\ipiitem}[3]{% +\ifblank{#1}{}{\ifstrequal{#1}{\underline{}}{}{ +{\noindent\textbf{#1}:\rule{0.0pt}{1.05\baselineskip}\quad}}}% uses a strut to add a bit of vertical space +{#2}\parskip=0pt\par +\ifblank{#3}{}% +{ {\hfill\raggedleft\textit{\small #3}\par} } +} +""" + rstr += "\n\\begin{document}\n" + rstr += "The following are the different allowable ouputs:\n\\par" + + for out in sorted(idict): + rstr += "\\ipiitem{" + out + "}" + if "longhelp" in idict[out]: + rstr += "{" + idict[out]['longhelp'] +"}" + else: + rstr += "{" + idict[out]['help'] +"}" + + #see if there are additional attributes to print out + xstr = "" + if "dimension" in idict[out] and idict[out]['dimension'] != "undefined": #doesn't print out dimension if not necessary. + xstr += "dimension: " + idict[out]['dimension'] + '; ' + if "size" in idict[out]: + xstr += "size: " + str(idict[out]['size']) +"; " + rstr += "{" + xstr + "}" + + if standalone: + #ends the created document if it is not part of a larger document + rstr += "\\end{document}" + + # Some escape characters are necessary for the proper latex formatting + rstr = rstr.replace('_', '\\_') + rstr = rstr.replace('\\\\_', '\\_') + rstr = rstr.replace('...', '\\ldots ') + rstr = rstr.replace('<', '$<$') + rstr = rstr.replace('>', '$>$') + rstr = rstr.replace('[', '$[$') + rstr = rstr.replace(']', '$]$') + + return rstr + + +class Properties(dobject): + """A proxy to compute and output properties of the system. + + Takes the fundamental properties calculated during the simulation, and + prepares them for output. It also contains simple algorithms to calculate + other properties not calculated during the simulation itself, so that + these can also be output. + + Attributes: + fd_delta: A float giving the size of the finite difference + parameter used in the Yamamoto kinetic energy estimator. Defaults + to _DEFAULT_FINDIFF. + _DEFAULT_FDERROR: A float giving the size of the minimum precision + allowed for the finite difference calculation in the Yamamoto kinetic + energy estimator. + _DEFAULT_MINFID: A float giving the maximum displacement in the Yamamoto + kinetic energy estimator. + dbeads: A dummy Beads object used in the Yamamoto kinetic energy + estimator. + dforces: A dummy Forces object used in the Yamamoto kinetic energy + estimator. + simul: The Simulation object containing the data to be output. + ensemble: An ensemble object giving the objects necessary for producing + the correct ensemble. + beads: A beads object giving the atoms positions. + nm: A normal modes object giving the normal mode representation. + cell: A cell object giving the system box. + forces: A forcefield object giving the force calculator for each + replica of the system. + property_dict: A dictionary containing all the properties that can be + output. + """ + + _DEFAULT_FINDIFF = 1e-5 + _DEFAULT_FDERROR = 1e-9 + _DEFAULT_MINFID = 1e-12 + + def __init__(self): + """Initialises Properties.""" + + self.property_dict = { + "step": { "dimension" : "number", + "help" : "The current simulation time step.", + 'func': (lambda: (1 + self.simul.step))}, + "time": { "dimension": "time", + "help": "The elapsed simulation time.", + 'func': (lambda: (1 + self.simul.step)*self.ensemble.dt)}, + "temperature": {"dimension": "temperature", + "help": "The current temperature, as obtained from the MD kinetic energy.", + "longhelp" : """The current temperature, as obtained from the MD kinetic energy of the (extended) + ring polymer. Takes a single, optional argument 'atom', which can be either an + atom label or an index (zero-based) to specify which species or individual atom + to output the temperature of. If not specified, all atoms are used and averaged.""", + 'func': self.get_temp }, + "density": { "dimension": "density", + "help": "The mass density of the physical system.", + 'func': (lambda: self.beads.m.sum()/self.cell.V)}, + "volume": { "dimension": "volume", + "help": "The volume of the cell box.", + 'func': (lambda: self.cell.V) }, + "cell_h": { "dimension" : "length", + "help": "The simulation cell as a matrix. Returns the 6 non-zero components in the form [xx, yy, zz, xy, xz, yz].", + "size": 6, + "func": (lambda: self.tensor2vec(self.cell.h))}, + "cell_abcABC": {"dimension" : "undefined", + "help": "The lengths of the cell vectors and the angles between them in degrees as a list of the form [a, b, c, A, B, C]", + "longhelp": """The lengths of the cell vectors and the angles between them in degrees as a list of the + form [a, b, c, A, B, C], where A is the angle between the sides of length b and c in degrees, and B and C + are defined similarly. Since the output mixes different units, a, b and c can only be output in bohr.""", + "size": 6, + 'func': (lambda: np.asarray(h2abc_deg(self.cell.h)))}, + "conserved": { "dimension": "energy", + "help": "The value of the conserved energy quantity per bead.", + 'func': (lambda: self.ensemble.econs/float(self.beads.nbeads))}, + "potential": { "dimension" : "energy", + "help": "The physical system potential energy.", + 'func': (lambda: self.forces.pot/self.beads.nbeads)}, + "spring": { "dimension" : "energy", + "help": "The total spring potential energy between the beads of all the ring polymers in the system.", + 'func': (lambda: self.beads.vpath*self.nm.omegan2/self.beads.nbeads)}, + "kinetic_md": {"dimension" : "energy", + "help": "The kinetic energy of the (extended) classical system.", + "longhelp" : """The kinetic energy of the (extended) classical system. Takes an argument 'atom', + which can be either an atom label or index (zero based) to specify which species to find the + kinetic energy of. If not specified, all atoms are used.""", + 'func': self.get_kinmd}, + "kinetic_cv": {"dimension" : "energy", + "help": "The centroid-virial quantum kinetic energy of the physical system.", + "longhelp": """The centroid-virial quantum kinetic energy of the physical system. + Takes an argument 'atom', which can be either an atom label or index (zero based) + to specify which species to find the kinetic energy of. If not specified, all atoms are used.""", + 'func': self.get_kincv}, + "kinetic_tens":{"dimension" : "energy", + "help" : "The centroid-virial quantum kinetic energy tensor of the physical system.", + "longhelp" : """The centroid-virial quantum kinetic energy tensor of the physical system. + Returns the 6 independent components in the form [xx, yy, zz, xy, xz, yz]. Takes an + argument 'atom', which can be either an atom label or index (zero based) to specify + which species to find the kinetic tensor components of. If not specified, all atoms are used.""", + "size" : 6, + "func" : self.get_ktens}, + "kinetic_ij": {"dimension" : "energy", + "help" : "The centroid-virial off-diagonal quantum kinetic energy tensor of the physical system.", + "longhelp" : """The centroid-virial off-diagonal quantum kinetic energy tensor of the physical system. + This computes the cross terms between atoms i and atom j, whose average is . + Returns the 6 independent components in the form [xx, yy, zz, xy, xz, yz]. Takes arguments 'i' and 'j', + which give the indices of the two desired atoms.""", + "size" : 6, + "func" : self.get_kij}, + "r_gyration": { "dimension" : "length", + "help" : "The average radius of gyration of the selected ring polymers.", + "longhelp" : """The average radius of gyration of the selected ring polymers. Takes an + argument 'atom', which can be either an atom label or index (zero based) to specify which + species to find the radius of gyration of. If not specified, all atoms are used and averaged.""", + "func": self.get_rg}, + "atom_x": { "dimension" : "length", + "help": "The position (x,y,z) of a particle given its index.", + "longhelp" : """The position (x,y,z) of a particle given its index. Takes arguments index + and bead (both zero based). If bead is not specified, refers to the centroid.""", + "size" : 3, + "func" : (lambda atom="", bead="-1": self.get_atom_vec(self.beads.q, atom=atom, bead=bead))}, + "atom_v": { "dimension" : "velocity", + "help": "The velocity (x,y,z) of a particle given its index.", + "longhelp": """The velocity (x,y,z) of a particle given its index. Takes arguments index + and bead (both zero based). If bead is not specified, refers to the centroid.""", + "size" : 3, + "func" : (lambda atom="", bead="-1": self.get_atom_vec(self.beads.p/self.beads.m3, atom=atom, bead=bead))}, + "atom_p": { "dimension" : "momentum", + "help": "The momentum (x,y,z) of a particle given its index.", + "longhelp": """The momentum (x,y,z) of a particle given its index. Takes arguments index + and bead (both zero based). If bead is not specified, refers to the centroid.""", + "size" : 3, + "func" : (lambda atom="", bead="-1": self.get_atom_vec(self.beads.p, atom=atom, bead=bead))}, + "atom_f": { "dimension" : "force", + "help": "The force (x,y,z) acting on a particle given its index.", + "longhelp": """The force (x,y,z) acting on a particle given its index. Takes arguments index + and bead (both zero based). If bead is not specified, refers to the centroid.""", + "size" : 3, + "func" : (lambda atom="", bead="-1": self.get_atom_vec(self.forces.f, atom=atom, bead=bead))}, + "stress_md": { "dimension": "pressure", + "size" : 6, + "help": "The total stress tensor of the (extended) classical system.", + "longhelp": """The total stress tensor of the (extended) classical system. Returns the 6 + independent components in the form [xx, yy, zz, xy, xz, yz].""", + "func": (lambda: self.tensor2vec((self.forces.vir + self.nm.kstress)/self.cell.V))}, + "pressure_md": {"dimension": "pressure", + "help": "The pressure of the (extended) classical system.", + "func": (lambda: np.trace((self.forces.vir + self.nm.kstress)/(3.0*self.cell.V)))}, + "kstress_md": {"dimension": "pressure", + "size" : 6, + "help": "The kinetic stress tensor of the (extended) classical system.", + "longhelp": """The kinetic stress tensor of the (extended) classical system. Returns the 6 + independent components in the form [xx, yy, zz, xy, xz, yz].""", + "func": (lambda: self.tensor2vec(self.nm.kstress/self.cell.V))}, + "virial_md": { "dimension": "pressure", + "size" : 6, + "help": "The virial tensor of the (extended) classical system.", + "longhelp": """The virial tensor of the (extended) classical system. Returns the 6 + independent components in the form [xx, yy, zz, xy, xz, yz].""", + "func": (lambda: self.tensor2vec(self.forces.vir/self.cell.V))}, + "stress_cv": { "dimension": "pressure", + "size" : 6, + "help": "The total quantum estimator for the stress tensor of the physical system.", + "longhelp": """The total quantum estimator for the stress tensor of the physical system. Returns the + 6 independent components in the form [xx, yy, zz, xy, xz, yz].""", + "func": (lambda: self.tensor2vec(self.forces.vir + self.kstress_cv())/(self.cell.V*self.beads.nbeads))}, + "pressure_cv": {"dimension": "pressure", + "help": "The quantum estimator for pressure of the physical system.", + "func": (lambda: np.trace(self.forces.vir + self.kstress_cv())/(3.0*self.cell.V*self.beads.nbeads))}, + "kstress_cv": {"dimension": "pressure", + "size" : 6, + "help": "The quantum estimator for the kinetic stress tensor of the physical system.", + "longhelp": """The quantum estimator for the kinetic stress tensor of the physical system. + Returns the 6 independent components in the form [xx, yy, zz, xy, xz, yz].""", + "func": (lambda: self.tensor2vec(self.kstress_cv()/(self.cell.V*self.beads.nbeads)))}, + "virial_cv": { "dimension": "pressure", + "size" : 6, + "help": "The quantum estimator for the virial stress tensor of the physical system.", + "longhelp": """The quantum estimator for the virial stress tensor of the physical system. + Returns the 6 independent components in the form [xx, yy, zz, xy, xz, yz].""", + "func": (lambda: self.tensor2vec(self.forces.vir/(self.cell.V*self.beads.nbeads)))}, + "displacedpath": { "dimension": "undefined", + "help": "The displaced path end-to-end distribution estimator", + "longhelp": """This is the estimator for the end-to-end distribution, that can be used to calculate the + particle momentum distribution as described in in L. Lin, J. A. Morrone, R. Car and M. Parrinello, + 105, 110602 (2010), Phys. Rev. Lett. Takes arguments 'ux', 'uy' and 'uz', which are the components of + the path opening vector. Also takes an argument 'atom', which can be either an atom label or index + (zero based) to specify which species to find the end-to-end distribution estimator for. If not + specified, all atoms are used. Note that one atom is computed at a time, and that each path opening + operation costs as much as a PIMD step. Returns the average over the selected atoms of the estimator of + exp(-U(u)) for each frame.""", + "func": self.get_linlin}, + "scaledcoords": { "dimension": "undefined", + "help" : "The scaled coordinates estimators that can be used to compute energy and heat capacity", + "longhelp": """Returns the estimators that are required to evaluate the scaled-coordinates estimators + for total energy and heat capacity, as described in T. M. Yamamoto, + J. Chem. Phys., 104101, 123 (2005). Returns eps_v and eps_v', as defined in that paper. + As the two estimators have a different dimensions, this can only be output in atomic units. + Takes one argument, 'fd_delta', which gives the value of the finite difference parameter used - + which defaults to """+ str(-self._DEFAULT_FINDIFF) + """. If the value of 'fd_delta' is negative, + then its magnitude will be reduced automatically by the code if the finite difference error + becomes too large.""", + 'func': self.get_yama_estimators, + "size": 2}, + "isotope_scfep": {"dimension": "undefined", + "size": 7, + 'func': self.get_isotope_yama, + "help": "The scaled-coordinates free energy perturbation scaled mass KE estimator.", + "longhelp" : """Returns the (many) terms needed to compute the scaled-coordinates free energy + perturbation scaled mass KE estimator (M. Ceriotti, T. Markland, J. Chem. Phys. 138, 014112 (2013)). + Takes two arguments, 'alpha' and 'atom', which give the + scaled mass parameter and the atom of interest respectively, and default to '1.0' and ''. The + 'atom' argument can either be the label of a particular kind of atom, or an index (zero based) + of a specific atom. This property computes, for each atom in the selection, an estimator for + the kinetic energy it would have had if it had the mass scaled by alpha. The 7 numbers output + are the average over the selected atoms of the log of the weights , the average of the + squares , the average of the un-weighted scaled-coordinates kinetic energies + and of the squares , the log sum of the weights LW=ln(sum(e**(-h))), the sum of the + re-weighted kinetic energies, stored as a log modulus and sign, LTW=ln(abs(sum(T_CV e**(-h)))) + STW=sign(sum(T_CV e**(-h))). In practice, the best estimate of the estimator can be computed + as [sum_i exp(LTW_i)*STW_i]/[sum_i exp(LW_i)]. The other terms can be used to compute diagnostics + for the statistical accuracy of the re-weighting process. Note that evaluating this estimator costs + as much as a PIMD step for each atom in the list. The elements that are output have different + units, so the output can be only in atomic units.""" }, + "isotope_tdfep": {"dimension" : "undefined", + "size" : 7, + 'func': self.get_isotope_thermo, + "help": "The thermodynamic free energy perturbation scaled mass KE estimator.", + "longhelp" : """Returns the (many) terms needed to compute the thermodynamic free energy + perturbation scaled mass KE estimator (M. Ceriotti, T. Markland, J. Chem. Phys. 138, 014112 (2013)). + Takes two arguments, 'alpha' and 'atom', which give the + scaled mass parameter and the atom of interest respectively, and default to '1.0' and ''. The + 'atom' argument can either be the label of a particular kind of atom, or an index (zero based) + of a specific atom. This property computes, for each atom in the selection, an estimator for + the kinetic energy it would have had if it had the mass scaled by alpha. The 7 numbers output + are the average over the selected atoms of the log of the weights , the average of the + squares , the average of the un-weighted scaled-coordinates kinetic energies + and of the squares , the log sum of the weights LW=ln(sum(e**(-h))), the sum of the + re-weighted kinetic energies, stored as a log modulus and sign, LTW=ln(abs(sum(T_CV e**(-h)))) + STW=sign(sum(T_CV e**(-h))). In practice, the best estimate of the estimator can be computed + as [sum_i exp(LTW_i)*STW_i]/[sum_i exp(LW_i)]. The other terms can be used to compute diagnostics + for the statistical accuracy of the re-weighting process. Evaluating this estimator is inexpensive, + but typically the statistical accuracy is worse than with the scaled coordinates estimator. + The elements that are output have different + units, so the output can be only in atomic units.""" } + } + + def bind(self, simul): + """Binds the necessary objects from the simulation to calculate the + required properties. + + Args: + simul: The Simulation object to be bound. + """ + + self.ensemble = simul.ensemble + self.beads = simul.beads + self.nm = simul.nm + self.cell = simul.cell + self.forces = simul.forces + self.simul = simul + # dummy beads and forcefield objects so that we can use scaled and + # displaced path estimators without changing the simulation bead + # coordinates + self.dbeads = simul.beads.copy() + self.dforces = Forces() + self.dforces.bind(self.dbeads, self.simul.cell, self.simul.flist) + + def __getitem__(self, key): + """Retrieves the item given by key. + + Note that if the key contains a string (arg1; arg2; ... ) + then it will pass the appropriate positional arguments to the + calculation function of the property. Note the brackets and + the semi-colon separators. If instead we have the syntax + (arg1=val1;arg2; ... ), then the keyword/value pair (arg1,val1) + will be added to the keyword argument list. The appropriate key word + arguments will then be passed to the calculation function instead. + + Similarly, if the key contains a string {unit}, then it will take + the string 'unit' and use it to define the units that the property + is output in. + + Args: + key: A string contained in property_dict. + + Returns: + The property labelled by the keyword key, along with its unit + keyword, and the argument lists for the function used to calculate + the property specified by the keyword key. + """ + + (key, unit, arglist, kwarglist) = getall(key) + pkey = self.property_dict[key] + + #pkey["func"](*arglist,**kwarglist) gives the value of the property + #in atomic units. unit_to_user() returns the value in the user + #specified units. + if "dimension" in pkey and unit != "": + return unit_to_user(pkey["dimension"], unit, pkey["func"](*arglist,**kwarglist)) + else: + return pkey["func"](*arglist,**kwarglist) + + def tensor2vec(self, tensor): + """Takes a 3*3 symmetric tensor and returns it as a 1D array, + containing the elements [xx, yy, zz, xy, xz, yz]. + """ + + return np.array([tensor[0,0], tensor[1,1], tensor[2,2], tensor[0,1], tensor[0,2], tensor[1,2]]) + + def get_atom_vec(self, prop_vec, atom="", bead="-1"): + """Gives a vector for one atom. + + Args: + prop_vec: An array from which to take the atomic vector from. + atom: The index of the atom for which the vector will + be output. + bead: The index of the replica of the atom for which the + vector will be output. If less than 0, then the centroid is used. + """ + + if atom == "": + raise IndexError("Must specify the index for atom_vec property") + atom = int(atom) + bead = int(bead) + if atom >= self.beads.natoms: + raise IndexError("Cannot output atom_vec property as atom index %d is larger than the number of atoms" % atom) + if bead >= self.beads.nbeads: + raise IndexError("Cannot output atom_vec property as bead index %d is larger than the number of beads" % bead) + + if bead < 0: + atom_vec = np.zeros(3) + for b in range(self.beads.nbeads): + atom_vec += prop_vec[b,3*atom:3*(atom+1)] + return atom_vec/float(self.beads.nbeads) + else: + return prop_vec[bead,3*atom:3*(atom+1)] + + def get_temp(self, atom=""): + """Calculates the MD kinetic temperature. + + Note that in the case that the centre of mass constraint there will be + 3 fewer degrees of freedom than without, so this has to be taken into + account when calculating the kinetic temperature. + + Args: + atom: If given, specifies the atom to give the temperature + for. If not, then the simulation temperature. + """ + + if self.ensemble.fixcom: + mdof = 3 + else: + mdof = 0 + + if atom == "": + # use the KE computed in the NM representation in order to avoid problems when mass scaling is used + kedof = self.get_kinmd()/(3*self.beads.natoms*self.beads.nbeads - mdof) + else: + try: + #iatom gives the index of the atom to be studied + iatom = int(atom) + latom = "" + if iatom >= self.beads.natoms: + raise IndexError("Cannot output temperature as atom index %d is larger than the number of atoms" % iatom) + except ValueError: + #here 'atom' is a label rather than an index which is stored in latom + iatom = -1 + latom = atom + + ncount = 0 + for i in range(self.beads.natoms): + if (iatom == i or latom == self.beads.names[i]): + ncount += 1 + + if ncount == 0: + raise IndexError("Couldn't find an atom which matched the argument of temperature") + # "spreads" the COM removal correction evenly over all the atoms... + kedof = self.get_kinmd(atom)/ncount*(self.beads.natoms/(3.0*self.beads.natoms*self.beads.nbeads - mdof)) + + return kedof/(0.5*Constants.kb) + + def get_kincv(self, atom=""): + """Calculates the quantum centroid virial kinetic energy estimator. + + Args: + atom: If given, specifies the atom to give the kinetic energy + for. If not, the system kinetic energy is given. + """ + + try: + #iatom gives the index of the atom to be studied + iatom = int(atom) + latom = "" + if iatom >= self.beads.natoms: + raise IndexError("Cannot output kinetic energy as atom index %d is larger than the number of atoms" % iatom) + except ValueError: + #here 'atom' is a label rather than an index which is stored in latom + iatom = -1 + latom = atom + + q = depstrip(self.beads.q) + qc = depstrip(self.beads.qc) + f = depstrip(self.forces.f) + + acv = 0.0 + ncount = 0 + for i in range(self.beads.natoms): + if (atom != "" and iatom != i and latom != self.beads.names[i]): + continue + + kcv = 0.0 + k = 3*i + for b in range(self.beads.nbeads): + kcv += (q[b,k] - qc[k])* f[b,k] + (q[b,k+1] - qc[k+1])* f[b,k+1] + (q[b,k+2] - qc[k+2])* f[b,k+2] + kcv *= -0.5/self.beads.nbeads + kcv += 1.5*Constants.kb*self.ensemble.temp + acv += kcv + ncount += 1 + + if ncount == 0: + warning("Couldn't find an atom which matched the argument of kinetic energy, setting to zero.", verbosity.medium) + + return acv + + def get_kinmd(self, atom=""): + """Calculates the classical kinetic energy of the simulation (p^2/2m) + + Args: + atom: If given, specifies the atom to give the kinetic energy + for. If not, the simulation kinetic energy is given. + """ + + if atom == "": + return self.nm.kin/self.beads.nbeads + else: + try: + #iatom gives the index of the atom to be studied + iatom = int(atom) + latom = "" + if iatom >= self.beads.natoms: + raise IndexError("Cannot output kinetic energy as atom index %d is larger than the number of atoms" % iatom) + except ValueError: + #here 'atom' is a label rather than an index which is stored in latom + iatom = -1 + latom = atom + + pnm = depstrip(self.nm.pnm) + dm3 = depstrip(self.nm.dynm3) + kmd = 0.0 + ncount = 0 + for i in range(self.beads.natoms): + if (atom != "" and iatom != i and latom != self.beads.names[i]): + continue + k = 3*i + for b in range(self.beads.nbeads): + kmd += (pnm[b,k]**2 + pnm[b,k+1]**2 + pnm[b,k+2]**2)/(2.0*dm3[b,k]) + ncount += 1 + + if ncount == 0: + warning("Couldn't find an atom which matched the argument of kinetic energy, setting to zero.", verbosity.medium) + + return kmd/self.beads.nbeads + + def get_ktens(self, atom=""): + """Calculates the quantum centroid virial kinetic energy + TENSOR estimator. + + Args: + atom: The index of the atom for which the kinetic energy tensor + is to be output, or the index of the type of atoms for which + it should be output. + """ + + try: + #iatom gives the index of the atom to be studied + iatom = int(atom) + latom = "" + if iatom >= self.beads.natoms: + raise IndexError("Cannot output kinetic tensor as atom index %d is larger than the number of atoms" % iatom) + except ValueError: + #here 'atom' is a label rather than an index which is stored in latom + iatom = -1 + latom = atom + + tkcv = np.zeros((6),float) + ncount = 0 + for i in range(self.beads.natoms): + if (atom != "" and iatom != i and latom != self.beads.names[i]): + continue + + tkcv += self.get_kij(str(i), str(i)) + ncount += 1 + + if ncount == 0: + warning("Couldn't find an atom which matched the argument of kinetic tensor, setting to zero.", verbosity.medium) + + return tkcv + + def get_kij(self, ni="0", nj="0"): + """Calculates the quantum centroid virial kinetic energy + TENSOR estimator for two possibly different atom indices. + + Args: + ni: The index of atom i. + nj: The index of atom j. + + Returns: + The contribution to the kinetic energy tensor estimator from + the interactions between atom i and atom j. + """ + + i = int(ni) + j = int(nj) + if i >= self.beads.natoms: + raise IndexError("Cannot output kinetic_ij as atom index %d is larger than the number of atoms" % i) + if j >= self.beads.natoms: + raise IndexError("Cannot output kinetic_ij as atom index %d is larger than the number of atoms" % j) + mi = self.beads.m[i] + mj = self.beads.m[j] + ai = 3*i + aj = 3*j + + q = depstrip(self.beads.q) + qc = depstrip(self.beads.qc) + f = depstrip(self.forces.f) + + # I implement this for the most general case. In practice T_ij = /(2sqrt(m_i m_j)) + kcv = np.zeros((6),float) + for b in range(self.beads.nbeads): + kcv[0] += mi*(q[b,ai] - qc[ai]) *f[b,aj] + mj*(q[b,aj] - qc[aj]) *f[b,ai] #Txx + kcv[1] += mi*(q[b,ai+1] - qc[ai+1])*f[b,aj+1] + mj*(q[b,aj+1] - qc[aj+1])*f[b,ai+1] #Tyy + kcv[2] += mi*(q[b,ai+2] - qc[ai+2])*f[b,aj+2] + mj*(q[b,aj+2] - qc[aj+2])*f[b,ai+2] #Tzz + kcv[3] += mi*(q[b,ai] - qc[ai])* f[b,aj+1] + mj*(q[b,aj+1] - qc[aj+1])*f[b,ai] #Txy + kcv[4] += mi*(q[b,ai] - qc[ai])* f[b,aj+2] + mj*(q[b,aj+2] - qc[aj+2])*f[b,ai] #Txz + kcv[5] += mi*(q[b,ai+1] - qc[ai+1])*f[b,aj+2] + mj*(q[b,aj+2] - qc[aj+2])*f[b,ai+1] #Tyz + + kcv *= -0.5/(self.beads.nbeads*2*np.sqrt(mi*mj)) + if i == j: + kcv[0:3] += 0.5*Constants.kb*self.ensemble.temp + + return kcv + + def get_rg(self, atom=""): + """Calculates the radius of gyration of the ring polymers. + + Args: + atom: If given, specifies the atom to give the gyration radius + for. If not, the system average gyration radius is given. + """ + + try: + #iatom gives the index of the atom to be studied + iatom = int(atom) + latom = "" + if iatom >= self.beads.natoms: + raise IndexError("Cannot output gyration radius as atom index %d is larger than the number of atoms" % iatom) + except ValueError: + #here 'atom' is a label rather than an index which is stored in latom + iatom = -1 + latom = atom + + q = depstrip(self.beads.q) + qc = depstrip(self.beads.qc) + nat = self.beads.natoms + nb = self.beads.nbeads + rg_tot = 0.0 + ncount = 0 + for i in range(nat): + if (atom != "" and iatom != i and latom != self.beads.names[i]): + continue + + rg_at = 0.0 + for j in range(nb): + dq = q[j,3*i:3*(i+1)] - qc[3*i:3*(i+1)] + rg_at += np.dot(dq, dq) + ncount += 1 + rg_tot += np.sqrt(rg_at/float(nb)) + + if ncount == 0: + raise IndexError("Couldn't find an atom which matched the argument of r_gyration") + + return rg_tot/float(ncount) + + def kstress_cv(self): + """Calculates the quantum centroid virial kinetic stress tensor + estimator. + + Note that this is not divided by the volume or the number of beads. + + Returns: + A 3*3 tensor with all the components of the tensor. + """ + + kst = np.zeros((3,3),float) + q = depstrip(self.beads.q) + qc = depstrip(self.beads.qc) + pc = depstrip(self.beads.pc) + m = depstrip(self.beads.m) + fall = depstrip(self.forces.f) + na3 = 3*self.beads.natoms + + for b in range(self.beads.nbeads): + for i in range(3): + for j in range(i,3): + kst[i,j] -= np.dot(q[b,i:na3:3] - qc[i:na3:3], + fall[b,j:na3:3]) + + # return the CV estimator MULTIPLIED BY NBEADS -- again for consistency with the virial, kstress_MD, etc... + for i in range(3): + kst[i,i] += self.beads.nbeads * ( np.dot(pc[i:na3:3],pc[i:na3:3]/m) ) + + return kst + + def opening(self, bead): + """Path opening function, used in linlin momentum distribution + estimator. + + Args: + bead: The index of the bead to shift. + """ + + return bead/float(self.beads.nbeads) + 0.5*(1.0/self.beads.nbeads - 1) + + def get_linlin(self, ux="0", uy="0", uz="0", atom=""): + """Calculates the end-to-end distribution for a particular path opening + vector. + + Args: + ux: The x-component of the path opening vector. + uy: The y-component of the path opening vector. + uz: The z-component of the path opening vector. + atom: If given, specifies the atom to give the kinetic energy + for. If not, the simulation kinetic energy is given. + """ + + try: + #iatom gives the index of the atom to be studied + iatom = int(atom) + latom = "" + if iatom >= self.beads.natoms: + raise IndexError("Cannot output linlin estimator as atom index %d is larger than the number of atoms" % iatom) + except ValueError: + #here 'atom' is a label rather than an index which is stored in latom + iatom = -1 + latom = atom + + beta = 1.0/(self.ensemble.temp*Constants.kb) + + u = np.array([float(ux), float(uy), float(uz)]) + u_size = np.dot(u,u) + q = depstrip(self.beads.q) + nat = self.beads.natoms + nb = self.beads.nbeads + nx_tot = 0.0 + ncount = 0 + for i in range(nat): + if (atom != "" and iatom != i and latom != self.beads.names[i]): + continue + + mass = self.beads.m[i] + self.dbeads.q[:] = q + for b in range(nb): + self.dbeads.q[b,3*i:3*(i+1)] += self.opening(b)*u + dV = self.dforces.pot - self.forces.pot + + n0 = np.exp(-mass*u_size/(2.0*beta*Constants.hbar**2)) + nx_tot += n0*np.exp(-dV*beta/float(self.beads.nbeads)) + ncount += 1 + + if ncount == 0: + raise IndexError("Couldn't find an atom which matched the argument of linlin") + + return nx_tot/float(ncount) + + def get_yama_estimators(self, fd_delta= - _DEFAULT_FINDIFF): + """Calculates the quantum scaled coordinate kinetic energy estimator. + + Uses a finite difference method to calculate the estimators + needed to calculate the energy and heat capacity of the system, as + shown in Takeshi M. Yamamoto, Journal of Chemical Physics, + 104101, 123 (2005). Returns both eps_v and eps_v' as defined in + the above article. Note that heat capacity is calculated as + beta**2*kboltzmann*( - **2 - ), and the + energy of the system as . + + Args: + fd_delta: the relative finite difference in temperature to apply in + computing finite-difference quantities. If it is negative, will be + scaled down automatically to avoid discontinuities in the potential. + """ + + dbeta = abs(float(fd_delta)) + beta = 1.0/(Constants.kb*self.ensemble.temp) + + qc = depstrip(self.beads.centroid.q) + q = depstrip(self.beads.q) + v0 = self.forces.pot/self.beads.nbeads + while True: + splus = np.sqrt(1.0 + dbeta) + sminus = np.sqrt(1.0 - dbeta) + + for b in range(self.beads.nbeads): + self.dbeads[b].q = qc*(1.0 - splus) + splus*q[b,:] + vplus = self.dforces.pot/self.beads.nbeads + + for b in range(self.beads.nbeads): + self.dbeads[b].q = qc*(1.0 - sminus) + sminus*q[b,:] + vminus = self.dforces.pot/self.beads.nbeads + + if (fd_delta < 0 and abs((vplus + vminus)/(v0*2) - 1.0) > self._DEFAULT_FDERROR and dbeta > self._DEFAULT_MINFID): + dbeta *= 0.5 + info("Reducing displacement in Yamamoto kinetic estimator", verbosity.low) + continue + else: + eps = ((1.0 + dbeta)*vplus - (1.0 - dbeta)*vminus)/(2*dbeta) + eps += 0.5*(3*self.beads.natoms)/beta + + eps_prime = ((1.0 + dbeta)*vplus + (1.0 - dbeta)*vminus - 2*v0)/(dbeta**2*beta) + eps_prime -= 0.5*(3*self.beads.natoms)/beta**2 + + break + + return np.asarray([eps, eps_prime]) + + def get_isotope_yama(self, alpha="1.0", atom=""): + """Gives the components of the yamamoto scaled-mass KE estimator + for a given atom index. + + Args: + alpha: m'/m the mass ratio + atom: the index of the atom to compute the isotope fractionation + pair for, or a label + + Returns: + a tuple from which one can reconstruct all that is needed to + compute the SMKEE, and its statistical accuracy: + (sum_deltah, sum_ke, log(sum(weights)), log(sum(weight*ke)), + sign(sum(weight*ke)) ) + """ + + try: + #iatom gives the index of the atom to be studied + iatom = int(atom) + latom = "" + if iatom >= self.beads.natoms: + raise IndexError("Cannot output scaled-mass kinetic energy estimator as atom index %d is larger than the number of atoms" % iatom) + except ValueError: + #here 'atom' is a label rather than an index which is stored in latom + iatom = -1 + latom = atom + + alpha = float(alpha) + + atcv = 0.0 + atcv2 = 0.0 + alogr = 0.0 + alogr2 = 0.0 + law = 0.0 + lawke = 0.0 + sawke = 1.0 + ni = 0 + + # strips dependency control since we are not gonna change the true beads in what follows + q = depstrip(self.beads.q) + f = depstrip(self.forces.f) + qc = depstrip(self.beads.qc) + + for i in range(self.beads.natoms): + # selects only the atoms we care about + if (atom != "" and iatom != i and latom != self.beads.names[i]): + continue + + ni += 1 + + # arranges coordinate-scaled beads in a auxiliary beads object + self.dbeads.q[:] = q[:] + for b in range(self.beads.nbeads): + self.dbeads.q[b,3*i:3*(i+1)] = ( qc[3*i:3*(i+1)]+ + np.sqrt(1.0/alpha)*(q[b,3*i:3*(i+1)]-qc[3*i:3*(i+1)]) ) + + tcv = 0.0 + for b in range(self.beads.nbeads): + tcv += np.dot( (self.dbeads.q[b,3*i:3*(i+1)]-self.dbeads.qc[3*i:3*(i+1)]), + self.dforces.f[b,3*i:3*(i+1)] ) + tcv *= -0.5/self.beads.nbeads + tcv += 1.5*Constants.kb*self.simul.ensemble.temp + + logr = (self.dforces.pot-self.forces.pot)/(Constants.kb*self.simul.ensemble.temp*self.beads.nbeads) + + atcv += tcv + atcv2 += tcv*tcv + + alogr += logr + alogr2 += logr*logr; + + #accumulates log averages in a way which preserves accuracy + if (ni == 1): + law = -logr + else: + (law, drop) = logsumlog( (law,1.0), (-logr,1.0)) + + #here we need to take care of the sign of tcv, which might as well be + #negative... almost never but... + if (ni == 1): + lawke = -logr + np.log(abs(tcv)) + sawke = np.sign(tcv); + else: + (lawke, sawke) = logsumlog( (lawke, sawke), (-logr+np.log(abs(tcv)), np.sign(tcv)) ) + + if ni == 0: + raise IndexError("Couldn't find an atom which matched the argument of isotope_y") + + return np.asarray([alogr/ni, alogr2/ni, atcv/ni, atcv2/ni, law, lawke, sawke]) + + def get_isotope_thermo(self, alpha="1.0", atom=""): + """Gives the components of the thermodynamic scaled-mass KE + estimator for a given atom index. + + Args: + alpha: m'/m the mass ratio + atom: the index of the atom to compute the isotope fractionation + pair for, or a label + + Returns: + a tuple from which one can reconstruct all that is needed to + compute the SMKEE: + (sum_deltah, sum_ke, log(sum(weights)), log(sum(weight*ke)), + sign(sum(weight*ke)) ) + """ + + try: + #iatom gives the index of the atom to be studied + iatom = int(atom) + latom = "" + if iatom >= self.beads.natoms: + raise IndexError("Cannot output scaled-mass kinetic energy estimator as atom index %d is larger than the number of atoms" % iatom) + except ValueError: + #here 'atom' is a label rather than an index which is stored in latom + iatom = -1 + latom = atom + + alpha = float(alpha) + + atcv = 0.0 + alogr = 0.0 + atcv2 = 0.0 + alogr2 = 0.0 + law = 0.0 + lawke = 0.0 + sawke = 1.0 + ni = 0 + + # strips dependency control since we are not gonna change the true beads in what follows + q = depstrip(self.beads.q) + f = depstrip(self.forces.f) + qc = depstrip(self.beads.qc) + + for i in range(self.beads.natoms): + # selects only the atoms we care about + if (atom != "" and iatom != i and latom != self.beads.names[i]): + continue + + ni += 1 + + spr = 0.0 + for b in range(1,self.beads.nbeads): + for j in range(3*i,3*(i+1)): + spr += (q[b,j]-q[b-1,j])**2 + for j in range(3*i,3*(i+1)): + spr += (q[self.beads.nbeads-1,j]-q[0,j])**2 + + spr *= 0.5*self.beads.m[i]*self.nm.omegan2 + + # centroid virial contribution from atom i + tcv = 0.0 + for b in range(self.beads.nbeads): + tcv += np.dot( (q[b,3*i:3*(i+1)]-qc[3*i:3*(i+1)]), f[b,3*i:3*(i+1)]) + tcv *= -0.5/self.beads.nbeads + tcv += 1.5*Constants.kb*self.simul.ensemble.temp + + logr = (alpha-1)*spr/(Constants.kb*self.simul.ensemble.temp*self.beads.nbeads) + + atcv += tcv + atcv2 += tcv*tcv + alogr += logr + alogr2 += logr*logr + + #accumulates log averages in a way which preserves accuracy + if (ni == 1): + law = -logr + else: + (law, drop) = logsumlog( (law,1.0), (-logr,1.0)) + + #here we need to take care of the sign of tcv, which might as well be + #negative... almost never but... + if (ni == 1): + lawke = -logr + np.log(abs(tcv)) + sawke = np.sign(tcv) + else: + (lawke, sawke) = logsumlog( (lawke, sawke), (-logr+np.log(abs(tcv)), np.sign(tcv)) ) + + if ni == 0: + raise IndexError("Couldn't find an atom which matched the argument of isotope_y") + + return np.asarray([alogr/ni, alogr2/ni, atcv/ni, atcv2/ni, law, lawke, sawke]) + + +class Trajectories(dobject): + """A simple class to take care of output of trajectory data. + + Attributes: + simul: The simulation object from which the position data will be + obtained. + fatom: A dummy beads object used so that individual replica trajectories + can be output. + traj_dict: A dictionary containing all the trajectories that can be + output. + """ + + def __init__(self): + """Initialises a Trajectories object.""" + + self.traj_dict = { + # Note that here we want to return COPIES of the different arrays, so we make sure to make an operation in order not to return a reference. + "positions": { "dimension" : "length", + "help": "The atomic coordinate trajectories. Will print out one file per bead, unless the bead attribute is set by the user.", + 'func': (lambda : 1.0*self.simul.beads.q)}, + "velocities": {"dimension" : "velocity", + "help": "The velocity trajectories. Will print out one file per bead, unless the bead attribute is set by the user.", + 'func': (lambda : self.simul.beads.p/self.simul.beads.m3)}, + "momenta": {"dimension" : "momentum", + "help": "The momentum trajectories. Will print out one file per bead, unless the bead attribute is set by the user.", + 'func': (lambda : 1.0*self.simul.beads.p)}, + "forces": { "dimension" : "force", + "help": "The force trajectories. Will print out one file per bead, unless the bead attribute is set by the user.", + 'func': (lambda : 1.0*self.simul.forces.f)}, + "x_centroid": {"dimension" : "length", + "help": "The centroid coordinates.", + 'func': (lambda : 1.0*self.simul.beads.qc)}, + "v_centroid": {"dimension" : "velocity", + "help": "The centroid velocity.", + 'func': (lambda : self.simul.beads.pc/self.simul.beads.m3[0])}, + "p_centroid": {"dimension" : "momentum", + "help": "The centroid momentum.", + 'func': (lambda : 1.0*self.simul.beads.pc)}, + "f_centroid": {"dimension" : "force", + "help": "The force acting on the centroid.", + 'func': (lambda : np.sum(self.simul.forces.f,0)/float(self.simul.beads.nbeads))}, + "kinetic_cv": {"dimension" : "energy", + "help": "The centroid virial quantum kinetic energy estimator for each atom, resolved into Cartesian components [xx, yy, zz]", + 'func': self.get_akcv}, + "kinetic_od": {"dimension" : "energy", + "help": "The off diagonal elements of the centroid virial quantum kinetic energy tensor [xy, xz, yz]", + 'func': self.get_akcv_od}, + "r_gyration": {"dimension" : "length", + "help": "The radius of gyration of the ring polymer, for each atom and resolved into Cartesian components [xx, yy, zz]", + 'func': self.get_rg}, + "extras": { "help": """The additional data returned by the client code, printed verbatim. Will print + out one file per bead, unless the bead attribute is set by the user.""", + 'func': (lambda : self.simul.forces.extras)} + } + + + def bind(self, simul): + """ Binds to a simulation object to fetch atomic and force data. + + Args: + simul: The simulation object that will be managed by this Trajectories. + """ + + self.simul = simul + self.fatom = simul.beads[0].copy() + + def get_akcv(self): + """Calculates the contribution to the kinetic energy due to each degree + of freedom. + """ + + rv = np.zeros(self.simul.beads.natoms*3) + for b in range(self.simul.beads.nbeads): + rv[:] += (self.simul.beads.q[b]-self.simul.beads.qc)*self.simul.forces.f[b] + rv *= -0.5/self.simul.beads.nbeads + rv += 0.5*Constants.kb*self.simul.ensemble.temp + return rv + + def get_akcv_od(self): + """Calculates the "off-diagonal" contribution to the kinetic energy tensor + due to each atom. + """ + + rv = np.zeros((self.simul.beads.natoms,3)) + # helper arrays to make it more obvious what we are computing + dq = np.zeros((self.simul.beads.natoms,3)) + f = np.zeros((self.simul.beads.natoms,3)) + for b in range(self.simul.beads.nbeads): + dq[:] = (self.simul.beads.q[b]-self.simul.beads.qc).reshape((self.simul.beads.natoms,3)) + f[:] = self.simul.forces.f[b].reshape((self.simul.beads.natoms,3)) + rv[:,0] += dq[:,0]*f[:,1] + dq[:,1]*f[:,0] + rv[:,1] += dq[:,0]*f[:,2] + dq[:,2]*f[:,0] + rv[:,2] += dq[:,1]*f[:,2] + dq[:,2]*f[:,1] + rv *= 0.5 + rv *= -0.5/self.simul.beads.nbeads + + return rv.reshape(self.simul.beads.natoms*3) + + def get_rg(self): + """Calculates the radius of gyration of the ring polymers. + + Computes separately the x, y, z contributions so that the actual + gyration radius can be recovered as sqrt(rx^2+ry^2+rz^2). + """ + + q = depstrip(self.simul.beads.q) + qc = depstrip(self.simul.beads.qc) + nat = self.simul.beads.natoms + nb = self.simul.beads.nbeads + rg = np.zeros(3*nat) + for i in range(nb): + for j in range(nat): + dq = q[i,3*j:3*(j+1)] - qc[3*j:3*(j+1)] + rg[3*j:3*(j+1)] += dq*dq + return np.sqrt(rg/float(nb)) + + def __getitem__(self, key): + """Retrieves the item given by key. + + Note that if the key contains a string (arg1; arg2; ... ) + then it will pass the appropriate positional arguments to the + calculation function of the property. Note the brackets and + the semi-colon separators. If instead we have the syntax + (arg1=val1;arg2; ... ), then the keyword/value pair (arg1,val1) + will be added to the keyword argument list. The appropriate key word + arguments will then be passed to the calculation function instead. + + Similarly, if the key contains a string {unit}, then it will take + the string 'unit' and use it to define the units that the trajectory + is output in. + + Args: + key: A string contained in trajectory_dict. + + Returns: + The trajectory labelled by the keyword key, along with its unit + keyword, and the argument lists for the function used to calculate + the trajectory specified by the keyword key. + """ + + (key, unit, arglist, kwarglist) = getall(key) + pkey = self.traj_dict[key] + + #pkey["func"](*arglist,**kwarglist) gives the value of the trajectory + #in atomic units. unit_to_user() returns the value in the user + #specified units. + if "dimension" in pkey and unit != "": + return unit_to_user(pkey["dimension"], unit, 1.0) * pkey["func"](*arglist,**kwarglist) + else: + return pkey["func"](*arglist,**kwarglist) + + def print_traj(self, what, stream, b=0, format="pdb", cell_units="atomic_unit", flush=True): + """Prints out a frame of a trajectory for the specified quantity and bead. + + Args: + what: A string specifying what to print. + b: The bead index. Defaults to 0. + stream: A reference to the stream on which data will be printed. + format: The output file format. + cell_units: The units used to specify the cell parameters. + flush: A boolean which specifies whether to flush the output buffer + after each write to file or not. + """ + + cq = self[what] + if getkey(what) in [ "extras" ] : + stream.write(" #*EXTRAS*# Step: %10d Bead: %5d \n" % (self.simul.step+1, b) ) + stream.write(cq[b]) + stream.write("\n") + if flush : + stream.flush() + os.fsync(stream) + return + elif getkey(what) in [ "positions", "velocities", "forces" ] : + self.fatom.q[:] = cq[b] + else: + self.fatom.q[:] = cq + + fcell = Cell() + fcell.h = self.simul.cell.h*unit_to_user("length", cell_units, 1.0) + + if format == "pdb": + io_pdb.print_pdb(self.fatom, fcell, stream, title=("Traj: %s Step: %10d Bead: %5d " % (what, self.simul.step+1, b) ) ) + elif format == "xyz": + io_xyz.print_xyz(self.fatom, fcell, stream, title=("Traj: %s Step: %10d Bead: %5d " % (what, self.simul.step+1, b) ) ) + elif format == "bin": + io_binary.print_bin(self.fatom, fcell, stream, title=("Traj: %s Step: %10d Bead: %5d " % (what, self.simul.step+1, b) ) ) + if flush : + stream.flush() + os.fsync(stream) diff --git a/tools/i-pi/ipi/engine/simulation.py b/tools/i-pi/ipi/engine/simulation.py new file mode 100644 index 000000000..42645939e --- /dev/null +++ b/tools/i-pi/ipi/engine/simulation.py @@ -0,0 +1,232 @@ +"""Contains the class that deals with the running of the simulation and +outputting the results. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +The root class for the whole simulation. Contains references to all the top +level objects used in the simulation, and controls all the steps that are +not inherently system dependent, like the running of each time step, +choosing which properties to initialise, and which properties to output. + +Classes: + Simulation: Deals with running the simulation and outputting the results. +""" + +__all__ = ['Simulation'] + +import numpy as np +import os.path, sys, time +from ipi.utils.depend import * +from ipi.utils.units import * +from ipi.utils.prng import * +from ipi.utils.io import * +from ipi.utils.io.io_xml import * +from ipi.utils.messages import verbosity, info +from ipi.utils.softexit import softexit +from ipi.engine.atoms import * +from ipi.engine.cell import * +from ipi.engine.forces import Forces +from ipi.engine.beads import Beads +from ipi.engine.normalmodes import NormalModes +from ipi.engine.properties import Properties, Trajectories +from ipi.engine.outputs import CheckpointOutput + +class Simulation(dobject): + """Main simulation object. + + Contains all the references and the main dynamics loop. Also handles the + initialisation and output. + + Attributes: + beads: A beads object giving the atom positions. + cell: A cell object giving the system box. + prng: A random number generator object. + flist: A list of forcefield objects giving different ways to partially + calculate the forces. + forces: A Forces object for calculating the total force for all the + replicas. + ensemble: An ensemble object giving the objects necessary for producing + the correct ensemble. + tsteps: The total number of steps. + ttime: The wall clock time (in seconds). + format: A string specifying both the format and the extension of traj + output. + outputs: A list of output objects that should be printed during the run + nm: A helper object dealing with normal modes transformation + properties: A property object for dealing with property output. + trajs: A trajectory object for dealing with trajectory output. + chk: A checkpoint object for dealing with checkpoint output. + rollback: If set to true, the state of the simulation at the start + of the step will be output to a restart file rather than + the current state of the simulation. This is because we cannot + restart from half way through a step, only from the beginning of a + step, so this is necessary for the trajectory to be continuous. + + Depend objects: + step: The current simulation step. + """ + + def __init__(self, beads, cell, forces, ensemble, prng, outputs, nm, init, step=0, tsteps=1000, ttime=0): + """Initialises Simulation class. + + Args: + beads: A beads object giving the atom positions. + cell: A cell object giving the system box. + forces: A forcefield object giving the force calculator for each + replica of the system. + ensemble: An ensemble object giving the objects necessary for + producing the correct ensemble. + prng: A random number object. + outputs: A list of output objects. + nm: A class dealing with path NM operations. + init: A class to deal with initializing the simulation object. + step: An optional integer giving the current simulation time step. + Defaults to 0. + tsteps: An optional integer giving the total number of steps. Defaults + to 1000. + ttime: The simulation running time. Used on restart, to keep a + cumulative total. + """ + + info(" # Initializing simulation object ", verbosity.low ) + self.prng = prng + self.ensemble = ensemble + self.beads = beads + self.cell = cell + self.nm = nm + + # initialize the configuration of the system + self.init = init + init.init_stage1(self) + + self.flist = forces + self.forces = Forces() + self.outputs = outputs + + dset(self, "step", depend_value(name="step", value=step)) + self.tsteps = tsteps + self.ttime = ttime + + self.properties = Properties() + self.trajs = Trajectories() + self.chk = None + self.rollback = True + + def bind(self): + """Calls the bind routines for all the objects in the simulation.""" + + # binds important computation engines + self.nm.bind(self.beads, self.ensemble) + self.forces.bind(self.beads, self.cell, self.flist) + self.ensemble.bind(self.beads, self.nm, self.cell, self.forces, self.prng) + self.init.init_stage2(self) + + # binds output management objects + self.properties.bind(self) + self.trajs.bind(self) + for o in self.outputs: + o.bind(self) + + self.chk = CheckpointOutput("RESTART", 1, True, 0) + self.chk.bind(self) + + # registers the softexit routine + softexit.register(self.softexit) + + def softexit(self): + """Deals with a soft exit request. + + Tries to ensure that a consistent restart checkpoint is + written out. + """ + + if self.step < self.tsteps: + self.step += 1 + if not self.rollback: + self.chk.store() + self.chk.write(store=False) + + self.forces.stop() + + def run(self): + """Runs the simulation. + + Does all the simulation steps, and outputs data to the appropriate files + when necessary. Also deals with starting and cleaning up the threads used + in the communication between the driver and the PIMD code. + """ + + self.forces.run() + + # prints inital configuration -- only if we are not restarting + if (self.step == 0): + self.step = -1 + for o in self.outputs: + o.write() + self.step = 0 + + steptime = 0.0 + simtime = time.time() + + cstep = 0 + tptime = 0.0 + tqtime = 0.0 + tttime = 0.0 + ttot = 0.0 + # main MD loop + for self.step in range(self.step,self.tsteps): + # stores the state before doing a step. + # this is a bit time-consuming but makes sure that we can honor soft + # exit requests without screwing the trajectory + + steptime = -time.time() + self.chk.store() + + self.ensemble.step() + + for o in self.outputs: + o.write() + + if os.path.exists("EXIT"): # soft-exit + self.rollback = False + softexit.trigger() + + steptime += time.time() + ttot += steptime + tptime += self.ensemble.ptime + tqtime += self.ensemble.qtime + tttime += self.ensemble.ttime + cstep += 1 + + if verbosity.high or (verbosity.medium and self.step%100 == 0) or (verbosity.low and self.step%1000 == 0): + info(" # Average timings at MD step % 7d. t/step: %10.5e [p: %10.5e q: %10.5e t: %10.5e]" % + ( self.step, ttot/cstep, tptime/cstep, tqtime/cstep, tttime/cstep ) ) + cstep = 0 + tptime = 0.0 + tqtime = 0.0 + tttime = 0.0 + ttot = 0.0 + info(" # MD diagnostics: V: %10.5e Kcv: %10.5e Ecns: %10.5e" % + (self.properties["potential"], self.properties["kinetic_cv"], self.properties["conserved"] ) ) + + if (self.ttime > 0 and time.time() - simtime > self.ttime): + info(" # Wall clock time expired! Bye bye!", verbosity.low ) + break + + info(" # Simulation ran successfully for the prescribed total_step! Bye bye!", verbosity.low ) + self.rollback = False + softexit.trigger() diff --git a/tools/i-pi/ipi/engine/thermostats.py b/tools/i-pi/ipi/engine/thermostats.py new file mode 100644 index 000000000..5375bb917 --- /dev/null +++ b/tools/i-pi/ipi/engine/thermostats.py @@ -0,0 +1,884 @@ +"""Contains the classes that deal with constant temperature dynamics. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Contains the algorithms which propagate the thermostatting steps in the constant +temperature ensembles. Includes the new GLE thermostat, which can be used to +run PI+GLE dynamics, reducing the number of path integral beads required. + +Classes: + Thermostat: Base thermostat class with the generic methods and attributes. + ThermoLangevin: Holds the algorithms for a langevin thermostat. + ThermoPILE_L: Holds the algorithms for a path-integral langevin equation + thermostat, with a thermostat coupled directly to the + centroid coordinate of each bead. + ThermoPILE_G: Holds the algorithms for a path-integral langevin equation + thermostat, with a thermostat coupled to the kinetic energy for + the entire system. + ThermoSVR: Holds the algorithms for a stochastic velocity rescaling + thermostat. + ThermoGLE: Holds the algorithms for a generalised langevin equation + thermostat. + ThermoNMGLE: Holds the algorithms for a generalised langevin equation + thermostat in the normal mode representation. + ThermoNMGLEG: Holds the algorithms for a generalised langevin equation + thermostat in the normal mode representation, with kinetic energy as + well as potential energy sampling optimization. +""" + +__all__ = ['Thermostat', 'ThermoLangevin', 'ThermoPILE_L', 'ThermoPILE_G', + 'ThermoSVR', 'ThermoGLE', 'ThermoNMGLE', 'ThermoNMGLEG'] + +import numpy as np +from ipi.utils.depend import * +from ipi.utils.units import * +from ipi.utils.mathtools import matrix_exp, stab_cholesky, root_herm +from ipi.utils.prng import Random +from ipi.utils.messages import verbosity, warning, info +from ipi.engine.beads import Beads +from ipi.engine.normalmodes import NormalModes + +class Thermostat(dobject): + """Base thermostat class. + + Gives the standard methods and attributes needed in all the thermostat + classes. + + Attributes: + prng: A pseudo random number generator object. + ndof: The number of degrees of freedom that the thermostat will be + attached to. + + Depend objects: + dt: The time step used in the algorithms. Depends on the simulation dt. + temp: The simulation temperature. Higher than the system temperature by + a factor of the number of beads. Depends on the simulation temp. + ethermo: The total energy exchanged with the bath due to the thermostat. + p: The momentum vector that the thermostat is coupled to. Depends on the + beads p object. + m: The mass vector associated with p. Depends on the beads m object. + sm: The square root of the mass vector. + """ + + def __init__(self, temp = 1.0, dt = 1.0, ethermo=0.0): + """Initialises Thermostat. + + Args: + temp: The simulation temperature. Defaults to 1.0. + dt: The simulation time step. Defaults to 1.0. + ethermo: The initial heat energy transferred to the bath. + Defaults to 0.0. Will be non-zero if the thermostat is + initialised from a checkpoint file. + """ + + dset(self,"temp", depend_value(name='temp', value=temp)) + dset(self,"dt", depend_value(name='dt', value=dt)) + dset(self,"ethermo",depend_value(name='ethermo',value=ethermo)) + + def bind(self, beads=None, atoms=None, pm=None, prng=None, fixdof=None): + """Binds the appropriate degrees of freedom to the thermostat. + + This takes an object with degrees of freedom, and makes their momentum + and mass vectors members of the thermostat. It also then creates the + objects that will hold the data needed in the thermostat algorithms + and the dependency network. + + Args: + beads: An optional beads object to take the mass and momentum vectors + from. + atoms: An optional atoms object to take the mass and momentum vectors + from. + pm: An optional tuple containing a single momentum value and its + conjugate mass. + prng: An optional pseudo random number generator object. Defaults to + Random(). + fixdof: An optional integer which can specify the number of constraints + applied to the system. Defaults to zero. + + Raises: + TypeError: Raised if no appropriate degree of freedom or object + containing a momentum vector is specified for + the thermostat to couple to. + """ + + if prng is None: + warning("Initializing thermostat from standard random PRNG", verbosity.medium) + self.prng = Random() + else: + self.prng = prng + + if not beads is None: + dset(self,"p",beads.p.flatten()) + dset(self,"m",beads.m3.flatten()) + elif not atoms is None: + dset(self,"p",dget(atoms, "p")) + dset(self,"m",dget(atoms, "m3")) + elif not pm is None: + dset(self,"p",pm[0]) + dset(self,"m",pm[1]) + else: + raise TypeError("Thermostat.bind expects either Beads, Atoms, NormalModes, or a (p,m) tuple to bind to") + + if fixdof is None: + self.ndof = len(self.p) + else: + self.ndof = float(len(self.p) - fixdof) + + dset(self, "sm", + depend_array(name="sm", value=np.zeros(len(dget(self,"m"))), + func=self.get_sm, dependencies=[dget(self,"m")])) + + def get_sm(self): + """Retrieves the square root of the mass matrix. + + Returns: + A vector of the square root of the mass matrix with one value for + each degree of freedom. + """ + + return np.sqrt(self.m) + + def step(self): + """Dummy thermostat step.""" + + pass + + +class ThermoLangevin(Thermostat): + """Represents a langevin thermostat. + + Depend objects: + tau: Thermostat damping time scale. Larger values give a less strongly + coupled thermostat. + T: Coefficient of the diffusive contribution of the thermostat, i.e. the + drift back towards equilibrium. Depends on tau and the time step. + S: Coefficient of the stochastic contribution of the thermostat, i.e. + the uncorrelated Gaussian noise. Depends on T and the temperature. + """ + + def get_T(self): + """Calculates the coefficient of the overall drift of the velocities.""" + + return np.exp(-0.5*self.dt/self.tau) + + def get_S(self): + """Calculates the coefficient of the white noise.""" + + return np.sqrt(Constants.kb*self.temp*(1 - self.T**2)) + + def __init__(self, temp = 1.0, dt = 1.0, tau = 1.0, ethermo=0.0): + """Initialises ThermoLangevin. + + Args: + temp: The simulation temperature. Defaults to 1.0. + dt: The simulation time step. Defaults to 1.0. + tau: The thermostat damping timescale. Defaults to 1.0. + ethermo: The initial heat energy transferred to the bath. + Defaults to 0.0. Will be non-zero if the thermostat is + initialised from a checkpoint file. + """ + + super(ThermoLangevin,self).__init__(temp, dt, ethermo) + + dset(self,"tau",depend_value(value=tau,name='tau')) + dset(self,"T", + depend_value(name="T",func=self.get_T, + dependencies=[dget(self,"tau"), dget(self,"dt")])) + dset(self,"S", + depend_value(name="S",func=self.get_S, + dependencies=[dget(self,"temp"), dget(self,"T")])) + + def step(self): + """Updates the bound momentum vector with a langevin thermostat.""" + + p = depstrip(self.p).copy() + sm = depstrip(self.sm) + + p /= sm + + self.ethermo += np.dot(p,p)*0.5 + p *= self.T + p += self.S*self.prng.gvec(len(p)) + self.ethermo -= np.dot(p,p)*0.5 + + p *= sm + + self.p = p + + +class ThermoPILE_L(Thermostat): + """Represents a PILE thermostat with a local centroid thermostat. + + Attributes: + _thermos: The list of the different thermostats for all the ring polymer + normal modes. + nm: A normal modes object to attach the thermostat to. + prng: Random number generator used in the stochastic integration + algorithms. + + Depend objects: + tau: Centroid thermostat damping time scale. Larger values give a + less strongly coupled centroid thermostat. + tauk: Thermostat damping time scale for the non-centroid normal modes. + Depends on the ring polymer spring constant, and thus the simulation + temperature. + pilescale: A float used to reduce the intensity of the PILE thermostat if + required. + """ + + def __init__(self, temp = 1.0, dt = 1.0, tau = 1.0, ethermo=0.0, scale=1.0): + """Initialises ThermoPILE_L. + + Args: + temp: The simulation temperature. Defaults to 1.0. + dt: The simulation time step. Defaults to 1.0. + tau: The centroid thermostat damping timescale. Defaults to 1.0. + ethermo: The initial conserved energy quantity. Defaults to 0.0. Will + be non-zero if the thermostat is initialised from a checkpoint file. + scale: A float used to reduce the intensity of the PILE thermostat if + required. + + Raises: + TypeError: Raised if the thermostat is used with any object other than + a beads object, so that we make sure that the objects needed for the + normal mode transformation exist. + """ + + super(ThermoPILE_L,self).__init__(temp,dt,ethermo) + dset(self,"tau",depend_value(value=tau,name='tau')) + dset(self,"pilescale",depend_value(value=scale,name='pilescale')) + + def bind(self, nm=None, prng=None, bindcentroid=True, fixdof=None): + """Binds the appropriate degrees of freedom to the thermostat. + + This takes a beads object with degrees of freedom, and makes its momentum + and mass vectors members of the thermostat. It also then creates the + objects that will hold the data needed in the thermostat algorithms + and the dependency network. + + Gives the interface for both the PILE_L and PILE_G thermostats, which + only differ in their treatment of the centroid coordinate momenta. + + Args: + nm: An optional normal mode object to take the mass and momentum + vectors from. + prng: An optional pseudo random number generator object. Defaults to + Random(). + bindcentroid: An optional boolean which decides whether a Langevin + thermostat is attached to the centroid mode of each atom + separately, or the total kinetic energy. Defaults to True, which + gives a thermostat bound to each centroid momentum. + fixdof: An optional integer which can specify the number of constraints + applied to the system. Defaults to zero. + + Raises: + TypeError: Raised if no appropriate degree of freedom or object + containing a momentum vector is specified for + the thermostat to couple to. + """ + + if nm is None or not type(nm) is NormalModes: + raise TypeError("ThermoPILE_L.bind expects a NormalModes argument to bind to") + if prng is None: + self.prng = Random() + else: + self.prng = prng + + prev_ethermo = self.ethermo + + # creates a set of thermostats to be applied to individual normal modes + self._thermos = [ ThermoLangevin(temp=1, dt=1, tau=1) for b in range(nm.nbeads) ] + # optionally does not bind the centroid, so we can re-use all of this + # in the PILE_G case + if not bindcentroid: + self._thermos[0] = None + + self.nm = nm + + dset(self,"tauk", + depend_array(name="tauk", value=np.zeros(nm.nbeads-1,float), + func=self.get_tauk, dependencies=[dget(self,"pilescale"), dget(nm,"dynomegak")] ) ) + + # must pipe all the dependencies in such a way that values for the nm thermostats + # are automatically updated based on the "master" thermostat + def make_taugetter(k): + return lambda: self.tauk[k-1] + it = 0 + for t in self._thermos: + if t is None: + it += 1 + continue + if it > 0: + fixdof = None # only the centroid thermostat may have constraints + + # bind thermostat t to the it-th bead + t.bind(pm=(nm.pnm[it,:],nm.dynm3[it,:]),prng=self.prng, fixdof=fixdof) + # pipes temp and dt + deppipe(self,"temp", t, "temp") + deppipe(self,"dt", t, "dt") + + # for tau it is slightly more complex + if it == 0: + deppipe(self,"tau", t, "tau") + else: + # Here we manually connect _thermos[i].tau to tauk[i]. + # Simple and clear. + dget(t,"tau").add_dependency(dget(self,"tauk")) + dget(t,"tau")._func = make_taugetter(it) + dget(self,"ethermo").add_dependency(dget(t,"ethermo")) + it += 1 + + # since the ethermo will be "delegated" to the normal modes thermostats, + # one has to split + # any previously-stored value between the sub-thermostats + if bindcentroid: + for t in self._thermos: + t.ethermo = prev_ethermo/nm.nbeads + dget(self,"ethermo")._func = self.get_ethermo; + # if we are not binding the centroid just yet, this bit of the piping + # is delegated to the function which is actually calling this + + def get_tauk(self): + """Computes the thermostat damping time scale for the non-centroid + normal modes. + + Returns: + An array with the damping time scales for the non-centroid modes. + """ + + # Also include an optional scaling factor to reduce the intensity of NM thermostats + return np.array([ self.pilescale/(2*self.nm.dynomegak[k]) for k in range(1,len(self._thermos)) ]) + + def get_ethermo(self): + """Computes the total energy transferred to the heat bath for all the + thermostats. + """ + + et = 0.0; + for t in self._thermos: + et += t.ethermo + return et + + def step(self): + """Updates the bound momentum vector with a PILE thermostat.""" + + # super-cool! just loop over the thermostats! it's as easy as that! + for t in self._thermos: + t.step() + + +class ThermoSVR(Thermostat): + """Represents a stochastic velocity rescaling thermostat. + + Depend objects: + tau: Centroid thermostat damping time scale. Larger values give a + less strongly coupled centroid thermostat. + K: Scaling factor for the total kinetic energy. Depends on the + temperature. + et: Parameter determining the strength of the thermostat coupling. + Depends on tau and the time step. + """ + + def get_et(self): + """Calculates the damping term in the propagator.""" + + return np.exp(-0.5*self.dt/self.tau) + + def get_K(self): + """Calculates the average kinetic energy per degree of freedom.""" + + return Constants.kb*self.temp*0.5 + + def __init__(self, temp = 1.0, dt = 1.0, tau = 1.0, ethermo=0.0): + """Initialises ThermoSVR. + + Args: + temp: The simulation temperature. Defaults to 1.0. + dt: The simulation time step. Defaults to 1.0. + tau: The thermostat damping timescale. Defaults to 1.0. + ethermo: The initial conserved energy quantity. Defaults to 0.0. Will + be non-zero if the thermostat is initialised from a checkpoint file. + """ + + super(ThermoSVR,self).__init__(temp,dt,ethermo) + + dset(self,"tau",depend_value(value=tau,name='tau')) + dset(self,"et", + depend_value(name="et",func=self.get_et, + dependencies=[dget(self,"tau"), dget(self,"dt")])) + dset(self,"K", + depend_value(name="K",func=self.get_K, dependencies=[dget(self,"temp")])) + + def step(self): + """Updates the bound momentum vector with a stochastic velocity rescaling + thermostat. See G Bussi, D Donadio, M Parrinello, + Journal of Chemical Physics 126, 014101 (2007) + """ + + K = np.dot(depstrip(self.p),depstrip(self.p)/depstrip(self.m))*0.5 + + # rescaling is un-defined if the KE is zero + if K == 0.0: + return + + # gets the stochastic term (basically a Gamma distribution for the kinetic energy) + r1 = self.prng.g + if (self.ndof-1)%2 == 0: + rg = 2.0*self.prng.gamma((self.ndof-1)/2) + else: + rg = 2.0*self.prng.gamma((self.ndof-2)/2) + self.prng.g**2 + + alpha2 = self.et + self.K/K*(1 - self.et)*(r1**2 + rg) + 2.0*r1*np.sqrt(self.K/K*self.et*(1 - self.et)) + alpha = np.sqrt(alpha2) + if (r1 + np.sqrt(2*K/self.K*self.et/(1 - self.et))) < 0: + alpha *= -1 + + self.ethermo += K*(1 - alpha2) + self.p *= alpha + + +class ThermoPILE_G(ThermoPILE_L): + """Represents a PILE thermostat with a global centroid thermostat. + + Simply replaces the Langevin thermostat for the centroid normal mode with + a global velocity rescaling thermostat. + """ + + def __init__(self, temp = 1.0, dt = 1.0, tau = 1.0, ethermo=0.0, scale = 1.0): + """Initialises ThermoPILE_G. + + Args: + temp: The simulation temperature. Defaults to 1.0. + dt: The simulation time step. Defaults to 1.0. + tau: The centroid thermostat damping timescale. Defaults to 1.0. + ethermo: The initial conserved energy quantity. Defaults to 0.0. Will + be non-zero if the thermostat is initialised from a checkpoint file. + scale: A float used to reduce the intensity of the PILE thermostat if + required. + """ + + super(ThermoPILE_G,self).__init__(temp,dt,tau,ethermo) + dset(self,"pilescale",depend_value(value=scale,name='pilescale')) + + def bind(self, nm=None, prng=None, fixdof=None): + """Binds the appropriate degrees of freedom to the thermostat. + + This takes a beads object with degrees of freedom, and makes its momentum + and mass vectors members of the thermostat. It also then creates the + objects that will hold the data needed in the thermostat algorithms + and the dependency network. + + Uses the PILE_L bind interface, with bindcentroid set to false so we can + specify that thermostat separately, by binding a global + thermostat to the centroid mode. + + Args: + beads: An optional beads object to take the mass and momentum vectors + from. + prng: An optional pseudo random number generator object. Defaults to + Random(). + fixdof: An optional integer which can specify the number of constraints + applied to the system. Defaults to zero. + + """ + + # first binds as a local PILE, then substitutes the thermostat on the centroid + prev_ethermo = self.ethermo + super(ThermoPILE_G,self).bind(nm=nm,prng=prng,bindcentroid=False, fixdof=fixdof) + + #centroid thermostat + self._thermos[0] = ThermoSVR(temp=1, dt=1, tau=1) + + t = self._thermos[0] + t.bind(pm=(nm.pnm[0,:],nm.dynm3[0,:]),prng=self.prng, fixdof=fixdof) + deppipe(self,"temp", t, "temp") + deppipe(self,"dt", t, "dt") + deppipe(self,"tau", t, "tau") + dget(self,"ethermo").add_dependency(dget(t,"ethermo")) + + # splits any previous ethermo between the thermostats, and finishes to bind ethermo to the sum function + for t in self._thermos: + t.ethermo = prev_ethermo/nm.nbeads + dget(self,"ethermo")._func = self.get_ethermo; + + +class ThermoGLE(Thermostat): + """Represents a GLE thermostat. + + This is similar to a langevin thermostat, in that it uses Gaussian random + numbers to simulate a heat bath acting on the system, but simulates a + non-Markovian system by using a Markovian formulation in an extended phase + space. This allows for a much greater degree of flexibility, and this + thermostat, properly fitted, can give the an approximation to the correct + quantum ensemble even for a classical, 1-bead simulation. More reasonably, + using this thermostat allows for a far smaller number of replicas of the + system to be used, as the convergence of the properties + of the system is accelerated with respect to number of beads when PI+GLE + are used in combination. (See M. Ceriotti, D. E. Manolopoulos, M. Parinello, + J. Chem. Phys. 134, 084104 (2011)). + + Attributes: + ns: The number of auxilliary degrees of freedom. + s: An array holding all the momenta, including the ones for the + auxilliary degrees of freedom. + + Depend objects: + A: Drift matrix giving the damping time scales for all the different + degrees of freedom. + C: Static covariance matrix. + Satisfies A.C + C.transpose(A) = B.transpose(B), where B is the + diffusion matrix, giving the strength of the coupling of the system + with the heat bath, and thus the size of the stochastic + contribution of the thermostat. + T: Matrix for the diffusive contribution of the thermostat, i.e. the + drift back towards equilibrium. Depends on A and the time step. + S: Matrix for the stochastic contribution of the thermostat, i.e. + the uncorrelated Gaussian noise. Depends on C and T. + """ + + def get_T(self): + """Calculates the matrix for the overall drift of the velocities.""" + + return matrix_exp(-0.5*self.dt*self.A) + + def get_S(self): + """Calculates the matrix for the coloured noise.""" + + SST = Constants.kb*(self.C - np.dot(self.T,np.dot(self.C,self.T.T))) + + # Uses a symetric decomposition rather than Cholesky, since it is more stable + return root_herm(SST) + + def get_C(self): + """Calculates C from temp (if C is not set explicitly)""" + + rC = np.identity(self.ns + 1,float)*self.temp + return rC[:] + + def __init__(self, temp = 1.0, dt = 1.0, A = None, C = None, ethermo=0.0): + """Initialises ThermoGLE. + + Args: + temp: The simulation temperature. Defaults to 1.0. + dt: The simulation time step. Defaults to 1.0. + A: An optional matrix giving the drift matrix. Defaults to a single + value of 1.0. + C: An optional matrix giving the covariance matrix. Defaults to an + identity matrix times temperature with the same dimensions as the + total number of degrees of freedom in the system. + ethermo: The initial heat energy transferred to the bath. + Defaults to 0.0. Will be non-zero if the thermostat is + initialised from a checkpoint file. + """ + + super(ThermoGLE,self).__init__(temp,dt,ethermo) + + if A is None: + A = np.identity(1,float) + dset(self,"A",depend_value(value=A.copy(),name='A')) + + self.ns = len(self.A) - 1; + + # now, this is tricky. if C is taken from temp, then we want it to be updated + # as a depend of temp. Otherwise, we want it to be an independent beast. + if C is None: + C = np.identity(self.ns+1,float)*self.temp + dset(self,"C", + depend_value(name='C', func=self.get_C, + dependencies=[dget(self,"temp")])) + else: + dset(self,"C",depend_value(value=C.copy(),name='C')) + + dset(self,"T", + depend_value(name="T",func=self.get_T, + dependencies=[dget(self,"A"), dget(self,"dt")])) + dset(self,"S", + depend_value(name="S",func=self.get_S, + dependencies=[dget(self,"C"), dget(self,"T")])) + + self.s = np.zeros(0) + + def bind(self, beads=None, atoms=None, pm=None, prng=None, fixdof=None): + """Binds the appropriate degrees of freedom to the thermostat. + + This takes an object with degrees of freedom, and makes their momentum + and mass vectors members of the thermostat. It also then creates the + objects that will hold the data needed in the thermostat algorithms + and the dependency network. + + Args: + beads: An optional beads object to take the mass and momentum vectors + from. + atoms: An optional atoms object to take the mass and momentum vectors + from. + pm: An optional tuple containing a single momentum value and its + conjugate mass. + prng: An optional pseudo random number generator object. Defaults to + Random(). + fixdof: An optional integer which can specify the number of constraints + applied to the system. Defaults to zero. + + Raises: + TypeError: Raised if no appropriate degree of freedom or object + containing a momentum vector is specified for + the thermostat to couple to. + """ + + super(ThermoGLE,self).bind(beads,atoms,pm,prng,fixdof) + + # allocates, initializes or restarts an array of s's + if self.s.shape != (self.ns + 1, len(dget(self,"m"))): + if len(self.s) > 0: + warning("Mismatch in GLE s array size on restart, will reinitialise to free particle.", verbosity.low) + self.s = np.zeros((self.ns + 1, len(dget(self,"m")))) + + # Initializes the s vector in the free-particle limit + info(" GLE additional DOFs initialised to the free-particle limit.", verbosity.low) + SC = stab_cholesky(self.C*Constants.kb) + self.s[:] = np.dot(SC, self.prng.gvec(self.s.shape)) + else: + info("GLE additional DOFs initialised from input.", verbosity.medium) + + def step(self): + """Updates the bound momentum vector with a GLE thermostat""" + + p = depstrip(self.p).copy() + + self.s[0,:] = self.p/self.sm + + self.ethermo += np.dot(self.s[0],self.s[0])*0.5 + self.s[:] = np.dot(self.T,self.s) + np.dot(self.S,self.prng.gvec(self.s.shape)) + self.ethermo -= np.dot(self.s[0],self.s[0])*0.5 + + self.p = self.s[0]*self.sm + + +class ThermoNMGLE(Thermostat): + """Represents a 'normal-modes' GLE thermostat. + + An extension to the GLE thermostat which is applied in the + normal modes representation, and which allows to use a different + GLE for each normal mode + + Attributes: + ns: The number of auxilliary degrees of freedom. + nb: The number of beads. + s: An array holding all the momenta, including the ones for the + auxilliary degrees of freedom. + + Depend objects: + A: Drift matrix giving the damping time scales for all the different + degrees of freedom (must contain nb terms). + C: Static covariance matrix. + Satisfies A.C + C.transpose(A) = B.transpose(B), where B is the + diffusion matrix, giving the strength of the coupling of the system + with the heat bath, and thus the size of the stochastic + contribution of the thermostat. + """ + + def get_C(self): + """Calculates C from temp (if C is not set explicitely).""" + + rv = np.ndarray((self.nb, self.ns+1, self.ns+1), float) + for b in range(0,self.nb): + rv[b] = np.identity(self.ns + 1,float)*self.temp + return rv[:] + + def __init__(self, temp = 1.0, dt = 1.0, A = None, C = None, ethermo=0.0): + """Initialises ThermoGLE. + + Args: + temp: The simulation temperature. Defaults to 1.0. + dt: The simulation time step. Defaults to 1.0. + A: An optional matrix giving the drift matrix. Defaults to a single + value of 1.0. + C: An optional matrix giving the covariance matrix. Defaults to an + identity matrix times temperature with the same dimensions as the + total number of degrees of freedom in the system. + ethermo: The initial heat energy transferred to the bath. + Defaults to 0.0. Will be non-zero if the thermostat is + initialised from a checkpoint file. + """ + + super(ThermoNMGLE,self).__init__(temp,dt,ethermo) + + if A is None: + A = np.identity(1,float) + dset(self,"A",depend_value(value=A.copy(),name='A')) + + self.nb = len(self.A) + self.ns = len(self.A[0]) - 1; + + # now, this is tricky. if C is taken from temp, then we want it to be + # updated as a depend of temp. + # Otherwise, we want it to be an independent beast. + if C is None: + dset(self,"C",depend_value(name='C', func=self.get_C, dependencies=[dget(self,"temp")])) + else: + dset(self,"C",depend_value(value=C.copy(),name='C')) + + def bind(self, nm=None, prng=None, fixdof=None): + """Binds the appropriate degrees of freedom to the thermostat. + + This takes an object with degrees of freedom, and makes their momentum + and mass vectors members of the thermostat. It also then creates the + objects that will hold the data needed in the thermostat algorithms + and the dependency network. Actually, this specific thermostat requires + being called on a beads object. + + Args: + nm: An optional normal modes object to take the mass and momentum + vectors from. + prng: An optional pseudo random number generator object. Defaults to + Random(). + fixdof: An optional integer which can specify the number of constraints + applied to the system. Defaults to zero. + + Raises: + TypeError: Raised if no beads object is specified for + the thermostat to couple to. + """ + + if nm is None or not type(nm) is NormalModes: + raise TypeError("ThermoNMGLE.bind expects a NormalModes argument to bind to") + + if prng is None: + self.prng = Random() + else: + self.prng = prng + + if (nm.nbeads != self.nb): + raise IndexError("The parameters in nm_gle options correspond to a bead number "+str(self.nb)+ " which does not match the number of beads in the path" + str(nm.nbeads) ) + + # allocates, initializes or restarts an array of s's + if self.s.shape != (self.nb, self.ns + 1, nm.natoms *3) : + if len(self.s) > 0: + warning("Mismatch in GLE s array size on restart, will reinitialise to free particle.", verbosity.low) + self.s = np.zeros((self.nb, self.ns + 1, nm.natoms*3)) + + # Initializes the s vector in the free-particle limit + info(" GLE additional DOFs initialised to the free-particle limit.", verbosity.low) + for b in range(self.nb): + SC = stab_cholesky(self.C[b]*Constants.kb) + self.s[b] = np.dot(SC, self.prng.gvec(self.s[b].shape)) + else: + info("GLE additional DOFs initialised from input.", verbosity.medium) + + prev_ethermo = self.ethermo + + # creates a set of thermostats to be applied to individual normal modes + self._thermos = [ThermoGLE(temp=1, dt=1, A=self.A[b], C=self.C[b]) for b in range(self.nb)] + + # must pipe all the dependencies in such a way that values for the nm + # thermostats are automatically updated based on the "master" thermostat + def make_Agetter(k): + return lambda: self.A[k] + def make_Cgetter(k): + return lambda: self.C[k] + + it = 0 + for t in self._thermos: + t.s = self.s[it] # gets the s's as a slice of self.s + t.bind(pm=(nm.pnm[it,:],nm.dynm3[it,:]), prng=self.prng) # bind thermostat t to the it-th normal mode + + # pipes temp and dt + deppipe(self,"temp", t, "temp") + deppipe(self,"dt", t, "dt") + + # here we pipe the A and C of individual NM to the "master" arrays + dget(t,"A").add_dependency(dget(self,"A")) + dget(t,"A")._func = make_Agetter(it) + dget(t,"C").add_dependency(dget(self,"C")) + dget(t,"C")._func = make_Cgetter(it) + dget(self,"ethermo").add_dependency(dget(t,"ethermo")) + it += 1 + + # since the ethermo will be "delegated" to the normal modes thermostats, + # one has to split + # any previously-stored value between the sub-thermostats + for t in self._thermos: + t.ethermo = prev_ethermo/self.nb + + dget(self,"ethermo")._func = self.get_ethermo; + + def step(self): + """Updates the thermostat in NM representation by looping over the + individual DOFs. + """ + + for t in self._thermos: + t.step() + + def get_ethermo(self): + """Computes the total energy transferred to the heat bath for all the nm + thermostats. + """ + + et = 0.0; + for t in self._thermos: + et += t.ethermo + return et + + +class ThermoNMGLEG(ThermoNMGLE): + """Represents a 'normal-modes' GLE thermostat + SVR. + + An extension to the above NMGLE thermostat which also adds a stochastic velocity + rescaling to the centroid. + + Depend objects: + tau: Thermostat damping time scale. Larger values give a less strongly + coupled thermostat. + """ + + def __init__(self, temp = 1.0, dt = 1.0, A = None, C = None, tau=1.0, ethermo=0.0): + + super(ThermoNMGLEG,self).__init__(temp, dt, A, C, ethermo) + dset(self,"tau",depend_value(value=tau,name='tau')) + + def bind(self, nm=None, prng=None, fixdof=None): + """Binds the appropriate degrees of freedom to the thermostat. + + This takes an object with degrees of freedom, and makes their momentum + and mass vectors members of the thermostat. It also then creates the + objects that will hold the data needed in the thermostat algorithms + and the dependency network. Actually, this specific thermostat requires + being called on a beads object. + + Args: + nm: An optional normal modes object to take the mass and momentum + vectors from. + prng: An optional pseudo random number generator object. Defaults to + Random(). + fixdof: An optional integer which can specify the number of constraints + applied to the system. Defaults to zero. + """ + + super(ThermoNMGLEG,self).bind(nm, prng, fixdof) + + t = ThermoSVR(self.temp, self.dt, self.tau) + + t.bind(pm=(nm.pnm[0,:],nm.dynm3[0,:]), prng=self.prng) # bind global thermostat to centroid + + # pipes temp and dt + deppipe(self,"temp", t, "temp") + deppipe(self,"dt", t, "dt") + deppipe(self,"tau", t, "tau") + + dget(self,"ethermo").add_dependency(dget(t,"ethermo")) + self._thermos.append(t) + diff --git a/tools/i-pi/ipi/inputs/README b/tools/i-pi/ipi/inputs/README new file mode 100644 index 000000000..547884031 --- /dev/null +++ b/tools/i-pi/ipi/inputs/README @@ -0,0 +1,24 @@ + -- Input files directory -- + + * This is the directory containing the input classes. + + * Files: + - atoms.py: Creates objects that deal with classical simulations. + - barostats.py: Creates objects that deal with constant pressure and + stress simulations. + - beads.py: Creates objects that deal with quantum simulations. + - cell.py: Creates objects that deal with the simulation box. + - ensembles.py: Creates objects that deal with the different ensembles. + - forces.py: Creates objects that deal with the jobs to send to + the driver code. + - initializer.py: Creates the objects that deal with initializing the + simulation. + - interface.py: Creates objects that deal with socket creation. + - normalmodes.py: Creates the objects that deal with the normal mode + transformation. + - outputs.py: Creates objects that deal with output files. + - prng.py: Creates the objects that deal with random number generation. + - simulation.py: Creates objects that deal with all the top level + information, such as input/output. + - thermostats.py: Creates objects that deal with constant temperature + simulations. diff --git a/tools/i-pi/ipi/inputs/__init__.py b/tools/i-pi/ipi/inputs/__init__.py new file mode 100644 index 000000000..8e5fcd508 --- /dev/null +++ b/tools/i-pi/ipi/inputs/__init__.py @@ -0,0 +1,3 @@ +__all__ = [ 'barostats', 'cell', 'simulation', 'ensembles', 'thermostats', + 'interface', 'forces', 'atoms', 'beads', 'prng', 'outputs', + 'normalmodes', 'initializer'] diff --git a/tools/i-pi/ipi/inputs/atoms.py b/tools/i-pi/ipi/inputs/atoms.py new file mode 100644 index 000000000..6068be196 --- /dev/null +++ b/tools/i-pi/ipi/inputs/atoms.py @@ -0,0 +1,121 @@ +"""Deals with creating the atoms class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Generates an atoms class either from a set of positions and momenta. +This class is only used if no beads tag is present in the xml file. + +Classes: + InputAtoms: Deals with creating the Atoms object from a file, and + writing the checkpoints. +""" + +import numpy as np +from ipi.engine.atoms import * +from ipi.utils.inputvalue import * +from ipi.utils.depend import * +from ipi.utils.units import unit_to_internal + +__all__ = ['InputAtoms'] + +class InputAtoms(Input): + """Atoms input class. + + Handles generating the appropriate atoms class from the xml input file, + and generating the xml checkpoint tags and data from an instance of the + object. + + Attributes: + natoms: An optional integer giving the number of atoms. Defaults to 0. + q: An optional array giving the atom positions. Defaults to an empty + array with no elements. + p: An optional array giving the atom momenta. Defaults to an empty + array with no elements. + m: An optional array giving the atom masses. Defaults to an empty + array with no elements. + names: An optional array giving the atom names. Defaults to an empty + array with no elements + """ + + fields={ "natoms" : (InputValue, {"dtype" : int, + "default" : 0, + "help" : "The number of atoms." }), + "q" : (InputArray, {"dtype" : float, + "default" : input_default(factory=np.zeros, args=(0,)), + "help" : "The positions of the atoms, in the format [x1, y1, z1, x2, ... ].", + "dimension" : "length" }), + "p" : (InputArray, {"dtype" : float, + "default" : input_default(factory=np.zeros, args=(0,)), + "help" : "The momenta of the atoms, in the format [px1, py1, pz1, px2, ... ].", + "dimension" : "momentum" }), + "m" : (InputArray, {"dtype" : float, + "default" : input_default(factory=np.zeros, args=(0,)), + "help" : "The masses of the atoms, in the format [m1, m2, ... ].", + "dimension" : "mass" }), + "names" : (InputArray, {"dtype" : str, + "default" : input_default(factory=np.zeros, args=(0,), kwargs = {'dtype': np.dtype('|S6')}), + "help" : "The names of the atoms, in the format [name1, name2, ... ]." }) + } + + default_help = "Deals with a single replica of the system or classical simulations." + default_label = "ATOMS" + + def store(self, atoms): + """Takes an Atoms instance and stores a minimal representation of it. + + Args: + atoms: An Atoms object from which to initialise from. + filename: An optional string giving a filename to take the atom + positions from. Defaults to ''. + """ + + super(InputAtoms,self).store() + self.natoms.store(atoms.natoms) + self.q.store(depstrip(atoms.q)) + self.p.store(depstrip(atoms.p)) + self.m.store(depstrip(atoms.m)) + self.names.store(depstrip(atoms.names)) + + def fetch(self): + """Creates an atoms object. + + Returns: + An atoms object of the appropriate type and with the appropriate + properties given the attributes of the InputAtoms object. + """ + + super(InputAtoms,self).fetch() + atoms = Atoms(self.natoms.fetch()) + atoms.q = self.q.fetch() + atoms.p = self.p.fetch() + atoms.m = self.m.fetch() + atoms.names = self.names.fetch() + return atoms + + def write(self, name="", indent=""): + """Overloads Input write() function so that nothing is written if + no atoms are present. This occurs if the beads object has been specified, + so that the classical atoms object is not initialized. + + Returns: + A string giving the appropriate xml tags for the checkpoint file. + """ + + if self.natoms.fetch() > 0: + return super(InputAtoms,self).write(name=name,indent=indent) + else: + return "" diff --git a/tools/i-pi/ipi/inputs/barostats.py b/tools/i-pi/ipi/inputs/barostats.py new file mode 100644 index 000000000..84d0d83f4 --- /dev/null +++ b/tools/i-pi/ipi/inputs/barostats.py @@ -0,0 +1,107 @@ +"""Deals with creating the barostat class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputBaro: Deals with creating the Barostat object from a file, and + writing the checkpoints. +""" + +import numpy as np +import ipi.engine.thermostats +from ipi.engine.barostats import * +from ipi.utils.inputvalue import * +from ipi.inputs.thermostats import * + +__all__ = ['InputBaro'] + +class InputBaro(Input): + """Barostat input class. + + Handles generating the appropriate barostat class from the xml input file, + and generating the xml checkpoint tags and data from an + instance of the object. + + Attributes: + mode: An optional string giving the type of barostat used. Defaults to + 'rigid'. + + Fields: + thermostat: A thermostat object giving the cell thermostat. + tau: The time constant associated with the dynamics of the piston. + p: The conjugate momentum to the volume degree of freedom. + """ + + attribs={ "mode": (InputAttribute, {"dtype" : str, + "default" : "dummy", + "help" : """The type of barostat. Currently, only a 'isotropic' barostat is implemented, that combines + ideas from the Bussi-Zykova-Parrinello barostat for classical MD with ideas from the + Martyna-Hughes-Tuckerman centroid barostat for PIMD; see Ceriotti, More, Manolopoulos, Comp. Phys. Comm. 2013 for + implementation details.""", + "options" : ["dummy", "isotropic"]}) } + fields={ "thermostat": (InputThermo, {"default" : input_default(factory=ipi.engine.thermostats.Thermostat), + "help" : "The thermostat for the cell. Keeps the cell velocity distribution at the correct temperature. Note that the 'pile_l', 'pile_g', 'nm_gle' and 'nm_gle_g' options will not work for this thermostat."}), + "tau": (InputValue, {"default" : 1.0, + "dtype" : float, + "dimension" : "time", + "help" : "The time constant associated with the dynamics of the piston."}), + "p": (InputArray, { "dtype" : float, + "default" : input_default(factory=np.zeros, args = (0,)), + "help" : "Momentum (or momenta) of the piston.", + "dimension" : "momentum" }) + } + + default_help = "Simulates an external pressure bath." + default_label = "BAROSTAT" + + def store(self, baro): + """Takes a barostat instance and stores a minimal representation of it. + + Args: + baro: A barostat object. + """ + + super(InputBaro,self).store(baro) + self.thermostat.store(baro.thermostat) + self.tau.store(baro.tau) + if type(baro) is BaroBZP: + self.mode.store("isotropic") + self.p.store(baro.p) + elif type(baro) is Barostat: + self.mode.store("dummy") + else: + raise TypeError("The type " + type(baro).__name__ + " is not a valid barostat type") + + + def fetch(self): + """Creates a barostat object. + + Returns: + A barostat object of the appropriate type and with the appropriate + thermostat given the attributes of the InputBaro object. + """ + + super(InputBaro,self).fetch() + if self.mode.fetch() == "isotropic": + baro = BaroBZP(thermostat=self.thermostat.fetch(), tau=self.tau.fetch()) + if self.p._explicit: baro.p = self.p.fetch() + elif self.mode.fetch() == "dummy": + baro = Barostat(thermostat=self.thermostat.fetch(), tau=self.tau.fetch()) + else: + raise ValueError(self.mode.fetch() + " is not a valid mode of barostat") + + return baro diff --git a/tools/i-pi/ipi/inputs/beads.py b/tools/i-pi/ipi/inputs/beads.py new file mode 100644 index 000000000..f4caafcbb --- /dev/null +++ b/tools/i-pi/ipi/inputs/beads.py @@ -0,0 +1,137 @@ +"""Deals with creating the beads class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputBeads: Deals with creating the Beads object from a file, and + writing the checkpoints. +""" + +import numpy as np +from ipi.engine.beads import * +from ipi.engine.atoms import Atoms +from ipi.utils.inputvalue import * +from ipi.utils.depend import * +from ipi.utils.units import * +from ipi.inputs.atoms import * + +__all__ = ['InputBeads'] + +class InputBeads(Input): + """Beads input class. + + Handles generating the appropriate beads class from the xml input file, + and generating the xml checkpoint tags and data from an instance of the + object. + + Attributes: + nbeads: An optional integer giving the number of beads. Defaults to 0. + natoms: An optional integer giving the number of atoms. Defaults to 0. + + Fields: + q: An optional array giving the bead positions. Defaults to an empty + array with no elements. + p: An optional array giving the bead momenta. Defaults to an empty + array with no elements. + m: An optional array giving the bead masses. Defaults to an empty array + with no elements. + names: An optional array giving the bead names. Defaults to an empty + array with no elements. + """ + + attribs = { "natoms" : (InputAttribute, {"dtype" : int, "default" : 0, + "help" : "The number of atoms."}), + "nbeads" : (InputAttribute, {"dtype" : int, "default" : 0, + "help" : "The number of beads."}) + } + fields={ "q" : (InputArray, {"dtype" : float, + "default" : input_default(factory=np.zeros, args = (0,)), + "help" : "The positions of the beads. In an array of size [nbeads, 3*natoms].", + "dimension" : "length"}), + "p" : (InputArray, {"dtype" : float, + "default" : input_default(factory=np.zeros, args = (0,)), + "help" : "The momenta of the beads. In an array of size [nbeads, 3*natoms].", + "dimension" : "momentum"}), + "m" : (InputArray, {"dtype" : float, + "default" : input_default(factory=np.zeros, args = (0,)), + "help" : "The masses of the atoms, in the format [m1, m2, ... ].", + "dimension" : "mass"}), + "names" : (InputArray, {"dtype" : str, + "default" : input_default(factory=np.zeros, args=(0,), kwargs={'dtype': np.dtype('|S6')}), + "help" : "The names of the atoms, in the format [name1, name2, ... ]."}) } + + default_help = "Describes the bead configurations in a path integral simulation." + default_label = "BEADS" + + + def store(self, beads): + """Takes a Beads instance and stores a minimal representation of it. + + Args: + beads: A Beads object from which to initialise from. + """ + + super(InputBeads,self).store() + self.natoms.store(beads.natoms) + self.nbeads.store(beads.nbeads) + + self.q.store(depstrip(beads.q)) + self.p.store(depstrip(beads.p)) + self.m.store(depstrip(beads.m)) + self.names.store(depstrip(beads.names)) + + def fetch(self): + """Creates a beads object. + + Returns: + A beads object of the appropriate type and with the appropriate + properties given the attributes of the InputBeads object. + """ + + super(InputBeads,self).fetch() + beads = Beads(self.natoms.fetch(),self.nbeads.fetch()) + + # tries to fill up with as much data as available and valid + q = self.q.fetch() + if (q.shape == (beads.nbeads,3*beads.natoms)): + beads.q = q + elif (beads.nbeads == 1 and q.shape == (3*beads.natoms,)): + beads.q = q + elif len(q) != 0: + raise ValueError("Array shape mismatches for q in input.") + + p = self.p.fetch() + if (p.shape == (beads.nbeads,3*beads.natoms)): + beads.p = p + elif (beads.nbeads == 1 and p.shape == (3*beads.natoms,)): + beads.p = p + elif len(p) != 0: + raise ValueError("Array shape mismatches for p in input.") + + m = self.m.fetch() + if (m.shape == (beads.natoms,)): + beads.m = m + elif len(m) != 0: + raise ValueError("Array shape mismatches for m in input.") + + n = self.names.fetch() + if (n.shape == (beads.natoms,)): + beads.names = n + elif len(n) != 0: + raise ValueError("Array shape mismatches for names in input.") + + return beads diff --git a/tools/i-pi/ipi/inputs/cell.py b/tools/i-pi/ipi/inputs/cell.py new file mode 100644 index 000000000..9b316ef92 --- /dev/null +++ b/tools/i-pi/ipi/inputs/cell.py @@ -0,0 +1,77 @@ +"""Deals with creating the cell class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Generates an cell class from a cell vector. + +Classes: + InputCell: Deals with creating the Cell object from a file, and + writing the checkpoints. +""" + +import numpy as np +from copy import copy +from ipi.engine.cell import * +from ipi.utils.inputvalue import * +from ipi.utils.units import UnitMap +from ipi.utils.messages import verbosity, warning + +__all__ = [ 'InputCell' ] + +class InputCell(InputArray): + """Cell input class. + + Handles generating the appropriate cell class from the xml input file, + and generating the xml checkpoint tags and data from an instance of the + object. + """ + + attribs = copy(InputArray.attribs) + + default_help = "Deals with the cell parameters. Takes as array which can be used to initialize the cell vector matrix." + default_label = "CELL" + + def __init__(self, help=None, dimension=None, units=None, default=None, dtype=None): + """Initializes InputCell. + + Just calls the parent initialization function with appropriate arguments. + """ + + super(InputCell,self).__init__(dtype=float, dimension="length", default=default, help=help) + + def store(self, cell): + """Takes a Cell instance and stores of minimal representation of it. + + Args: + cell: A cell object. + """ + + super(InputCell,self).store(cell.h) + self.shape.store((3,3)) + + def fetch(self): + """Creates a cell object. + + Returns: + A cell object of the appropriate type and with the appropriate + properties given the attributes of the InputCell object. + """ + + h = super(InputCell,self).fetch() + h.shape = (3,3) + + return Cell(h=h) diff --git a/tools/i-pi/ipi/inputs/ensembles.py b/tools/i-pi/ipi/inputs/ensembles.py new file mode 100644 index 000000000..4a5519fff --- /dev/null +++ b/tools/i-pi/ipi/inputs/ensembles.py @@ -0,0 +1,185 @@ +"""Deals with creating the ensembles class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputEnsemble: Deals with creating the Ensemble object from a file, and + writing the checkpoints. +""" + +import numpy as np +import ipi.engine.thermostats +import ipi.engine.initializer +import ipi.engine.barostats +from ipi.engine.ensembles import * +from ipi.utils.inputvalue import * +from ipi.inputs.barostats import * +from ipi.inputs.thermostats import * +from ipi.inputs.initializer import * +from ipi.utils.units import * + +__all__ = ['InputEnsemble'] + +class InputEnsemble(Input): + """Ensemble input class. + + Handles generating the appropriate ensemble class from the xml input file, + and generating the xml checkpoint tags and data from an instance of the + object. + + Attributes: + mode: An optional string giving the mode of ensemble to be simulated. + Defaults to 'unknown'. + + Fields: + thermostat: The thermostat to be used for constant temperature dynamics. + barostat: The barostat to be used for constant pressure or stress + dynamics. + timestep: An optional float giving the size of the timestep in atomic + units. Defaults to 1.0. + temperature: An optional float giving the temperature in Kelvin. Defaults + to 1.0. + pressure: An optional float giving the external pressure in atomic units. + Defaults to 1.0. + fixcom: An optional boolean which decides whether the centre of mass + motion will be constrained or not. Defaults to False. + replay_file: An optional string that gives an input file name to get + a trajectory to be re-run. + """ + + attribs={"mode" : (InputAttribute, {"dtype" : str, + "help" : "The ensemble that will be sampled during the simulation. 'replay' means that a simulation is restarted from a previous simulation.", + "options" : ['nve', 'nvt', 'npt', 'replay']}) } + fields={"thermostat" : (InputThermo, {"default" : input_default(factory=ipi.engine.thermostats.Thermostat), + "help" : "The thermostat for the atoms, keeps the atom velocity distribution at the correct temperature."} ), + "barostat" : (InputBaro, {"default" : input_default(factory=ipi.engine.barostats.Barostat), + "help" : InputBaro.default_help}), + "timestep": (InputValue, {"dtype" : float, + "default" : 1.0, + "help" : "The time step.", + "dimension" : "time"}), + "temperature" : (InputValue, {"dtype" : float, + "default" : 1.0, + "help" : "The temperature of the system.", + "dimension" : "temperature"}), + "pressure" : (InputValue, {"dtype" : float, + "default" : 1.0, + "help" : "The external pressure.", + "dimension" : "pressure"}), + "fixcom": (InputValue, {"dtype" : bool, + "default" : True, + "help" : "This describes whether the centre of mass of the particles is fixed."}), + "replay_file": (InputInitFile, {"default" : input_default(factory=ipi.engine.initializer.InitBase), + "help" : "This describes the location to read a trajectory file from."}) + } + + default_help = "Holds all the information that is ensemble specific, such as the temperature and the external pressure, and the thermostats and barostats that control it." + default_label = "ENSEMBLE" + + def store(self, ens): + """Takes an ensemble instance and stores a minimal representation of it. + + Args: + ens: An ensemble object. + """ + + super(InputEnsemble,self).store(ens) + if type(ens) is ReplayEnsemble: + self.mode.store("rerun") + tens = 0 + elif type(ens) is NVEEnsemble: + self.mode.store("nve") + tens = 1 + elif type(ens) is NVTEnsemble: + self.mode.store("nvt") + tens = 2 + elif type(ens) is NPTEnsemble: + self.mode.store("npt") + tens = 3 + + self.timestep.store(ens.dt) + self.temperature.store(ens.temp) + + if tens == 0: + self.replay_file.store(ens.intraj) + if tens > 1: + self.thermostat.store(ens.thermostat) + self.fixcom.store(ens.fixcom) + if tens > 2: + self.barostat.store(ens.barostat) + if tens == 3: + self.pressure.store(ens.pext) + + + def fetch(self): + """Creates an ensemble object. + + Returns: + An ensemble object of the appropriate mode and with the appropriate + objects given the attributes of the InputEnsemble object. + """ + + super(InputEnsemble,self).fetch() + + if self.mode.fetch() == "nve" : + ens = NVEEnsemble(dt=self.timestep.fetch(), + temp=self.temperature.fetch(), fixcom=self.fixcom.fetch()) + elif self.mode.fetch() == "nvt" : + ens = NVTEnsemble(dt=self.timestep.fetch(), + temp=self.temperature.fetch(), thermostat=self.thermostat.fetch(), fixcom=self.fixcom.fetch()) + elif self.mode.fetch() == "npt" : + ens = NPTEnsemble(dt=self.timestep.fetch(), + temp=self.temperature.fetch(), thermostat=self.thermostat.fetch(), fixcom=self.fixcom.fetch(), + pext=self.pressure.fetch(), barostat=self.barostat.fetch() ) + elif self.mode.fetch() == "replay": + ens = ReplayEnsemble(dt=self.timestep.fetch(), + temp=self.temperature.fetch(),fixcom=False,intraj=self.replay_file.fetch() ) + else: + raise ValueError("'" + self.mode.fetch() + "' is not a supported ensemble mode.") + + return ens + + def check(self): + """Function that deals with optional arguments. + + Makes sure that if the ensemble requires a thermostat or barostat that + they have been defined by the user and not given the default values. + """ + + super(InputEnsemble,self).check() + if self.mode.fetch() == "nvt": + if self.thermostat._explicit == False: + raise ValueError("No thermostat tag supplied for NVT simulation") + if self.mode.fetch() == "npt": + if self.thermostat._explicit == False: + raise ValueError("No thermostat tag supplied for NPT simulation") + if self.barostat._explicit == False: + raise ValueError("No barostat tag supplied for NPT simulation") + if self.barostat.thermostat._explicit == False: + raise ValueError("No thermostat tag supplied in barostat for NPT simulation") + + if self.timestep.fetch() <= 0: + raise ValueError("Non-positive timestep specified.") + if self.temperature.fetch() <= 0: + raise ValueError("Non-positive temperature specified.") + + if self.mode.fetch() == "npt": + if not self.pressure._explicit: + raise ValueError("Pressure should be supplied for constant pressure simulation") + if self.mode.fetch() == "npt" or self.mode.fetch() == "nvt": + if not self.temperature._explicit: + raise ValueError("Temperature should be supplied for constant temperature simulation") diff --git a/tools/i-pi/ipi/inputs/forces.py b/tools/i-pi/ipi/inputs/forces.py new file mode 100644 index 000000000..d343e19e0 --- /dev/null +++ b/tools/i-pi/ipi/inputs/forces.py @@ -0,0 +1,176 @@ +"""Deals with creating the forcefield class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputForces: Deals with creating all the forcefield objects. + InputForceBeads: Base class to deal with one particular forcefield object. + InputFBSocket: Deals with creating a forcefield using sockets. +""" + +__all__ = ['InputForces', 'InputForceBeads', "InputFBSocket"] + +from copy import copy +from ipi.engine.forces import * +from ipi.inputs.interface import InputInterfaceSocket +from ipi.utils.inputvalue import * + +class InputForceBeads(Input): + """ForceBeads input class. + + Handles generating one instance of a particular forcefield class from the xml + input file, and generating the xml checkpoint tags and data from an + instance of the object. + + Attributes: + nbeads: The number of beads that the forcefield will be evaluated on. + weight: A scaling factor for the contribution from this forcefield. + """ + + attribs = { "nbeads" : ( InputAttribute, { "dtype" : int, + "default" : 0, + "help" : "If the forcefield is to be evaluated on a contracted ring polymer, this gives the number of beads that are used. If not specified, the forcefield will be evaluated on the full ring polymer." } ), + "weight" : ( InputAttribute, { "dtype" : float, + "default" : 1.0, + "help" : "A scaling factor for this forcefield, to be applied before adding the force calculated by this forcefield to the total force." } ) + } + + default_help = "Base class that deals with the assigning of force calculation jobs and collecting the data." + default_label = "FORCEBEADS" + + def store(self, forceb): + """Takes a ForceBeads instance and stores a minimal representation of it. + + Args: + forceb: A ForceBeads object. + """ + + Input.store(self,forceb) + self.nbeads.store(forceb.nbeads) + self.weight.store(forceb.weight) + + def fetch(self): + """Creates a ForceBeads object. + + Returns: + A ForceBeads object. + """ + + super(InputForceBeads,self).fetch() + + return ForceBeads(model=ForceField(), nbeads=self.nbeads.fetch(), weight=self.weight.fetch()) + + def check(self): + """Checks for optional parameters.""" + + super(InputForceBeads,self).check() + if self.nbeads.fetch() < 0: + raise ValueError("The forces must be evaluated over a positive number of beads.") + + +class InputFBSocket(InputForceBeads, InputInterfaceSocket): + """Creates a ForceBeads object with a socket interface. + + Handles generating one instance of a socket interface forcefield class. + Shares its attributes between InputForceBeads, which deals with creating the + forcefield, and InputInterfaceSocket, which deals with creating the socket + interface. + """ + + attribs = copy(InputInterfaceSocket.attribs) + attribs.update(InputForceBeads.attribs) + + default_help = "Deals with the assigning of force calculation jobs to different driver codes, and collecting the data, using a socket for the data communication." + default_label = "SOCKET" + + def store(self, forceb): + """Takes a ForceField instance and stores a minimal representation of it. + + Args: + forceb: A ForceBeads object with a FFSocket forcemodel object. + """ + + if (not type(forceb.f_model) is FFSocket): + raise TypeError("The type " + type(forceb.f_model).__name__ + " is not a valid socket forcefield") + + InputForceBeads.store(self,forceb) + InputInterfaceSocket.store(self,forceb.f_model.socket) + + def fetch(self): + """Creates a ForceBeads object. + + Returns: + A ForceBeads object with the correct socket parameters. + """ + + return ForceBeads(model=FFSocket( interface=InputInterfaceSocket.fetch(self) ),nbeads=self.nbeads.fetch(),weight=self.weight.fetch() ) + + def check(self): + """Deals with optional parameters.""" + + InputInterfaceSocket.check(self) + InputForceBeads.check(self) + + +class InputForces(Input): + """Deals with creating all the forcefield objects required in the + simulation. + + Dynamic fields: + socket: Socket object to create the server socket. + """ + + #At the moment only socket driver codes implemented, other types + #could be used in principle + dynamic = { "socket" : (InputFBSocket, { "help" : InputFBSocket.default_help } ) + } + + default_help = "Deals with creating all the necessary forcefield objects." + default_label = "FORCES" + + def fetch(self): + """Returns a list of the output objects included in this dynamic + container. + + Returns: + A list of tuples, with each tuple being of the form ('type', 'object'), + where 'type' is the type of forcefield, and 'object' is a + """ + + super(InputForces, self).fetch() + flist = [ (n, f.fetch()) for (n, f) in self.extra ] + + return flist + + def store(self, flist): + """Stores a list of the output objects, creating a sequence of + dynamic containers. + + Args: + flist: A list of tuples, with each tuple being of the form + ('type', 'object') where 'type' is the type of forcefield + and 'object' is a forcefield object of that type. + """ + + super(InputForces, self).store() + self.extra = [] + + for el in flist: + if el[0]=="socket": + iff = InputFBSocket() + iff.store(el[1]) + self.extra.append(("socket", iff)) diff --git a/tools/i-pi/ipi/inputs/initializer.py b/tools/i-pi/ipi/inputs/initializer.py new file mode 100644 index 000000000..f78a617e2 --- /dev/null +++ b/tools/i-pi/ipi/inputs/initializer.py @@ -0,0 +1,406 @@ +"""Deals with creating the initiliazer class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputInitializer: Initializes the classes that initialize the simulation + data. + InputInitFile: Initializes the classes that initialize the simulation data + from a file. Rather than initializing one piece of data, everything that + can be initialized from that file will be. + InputInitPositions: Initializes the positions. + InputInitMomenta: Initializes the momenta. + InputInitVelocities: Initializes the velocities. + InputInitMasses: Initializes the masses. + InputInitLabels: Initializes the atom labels. + InputInitCell: Initializes the cell. + InputInitThermo: Initializes the thermostat. + InputInitBase: The base class for all Initializer objects. + InputInitIndexed: The class for all Initializer objects which can be called + to initialize data for a particular atom or bead. +""" + +import numpy as np +from copy import copy, deepcopy +import ipi.utils.mathtools as mt +import ipi.engine.initializer as ei +from ipi.utils.inputvalue import * +from ipi.inputs.beads import InputBeads +from ipi.inputs.cell import InputCell +from ipi.utils.io import io_xml +from ipi.utils.messages import verbosity, warning + +__all__ = ['InputInitializer', 'InputInitFile', 'InputInitPositions', 'InputInitMomenta', 'InputInitVelocities', 'InputInitMasses', 'InputInitLabels', 'InputInitCell', 'InputInitThermo'] + +class InputInitBase(InputValue): + """Base class to handle initialization. + + Attributes: + mode: The type of data to be initialized from. + _initclass: Which InputInit class to use to read the data. + _storageclass: Which data type to use to hold the data. + """ + + attribs = deepcopy(InputValue.attribs) + attribs["mode"] = (InputAttribute,{ "dtype" : str, "default": "other", "help": "The input data format. 'xyz' and 'pdb' stand for xyz and pdb input files respectively. 'chk' stands for initialization from a checkpoint file. 'manual' means that the value to initialize from is giving explicitly as a vector. 'thermal' means that the data is to be generated from a Maxwell-Boltzmann distribution at the given temperature.", "options": None } ) + + default_label = "INITBASE" + default_help = "This is the base class for initialization. Initializers for different aspects of the simulation can be inherit for it for the base methods." + + _initclass = ei.InitBase + _storageclass = float + + def __init__(self, help=None, default=None, dtype=None, options=None, dimension=None): + """Initializes InputInitFile. + + Just calls the parent initialize function with appropriate arguments. + """ + + super(InputInitBase,self).__init__(dtype=str, dimension=dimension, default=default, options=options, help=help) + + def store(self, ibase): + """Takes a InitBase instance and stores a minimal representation of it. + + Args: + ibase: An input base object. + """ + + if ibase.mode == "manual": + if hasattr(value, __len__): + value = io_xml.write_list(ibase.value) + else: # if it's a single value then just write the value + value = io_xml.write_type(self._storageclass, ibase.value) + else: # just store the value as a string + value = ibase.value + + super(InputInitBase,self).store(value, units=ibase.units) + + for k in self.attribs: # store additional attributes from the input class + self.__dict__[k].store(ibase.__dict__[k]) + + def getval(self): + """Calculates the value from the data supplied in the xml file. + + Either reads the string from the input file as an array of numbers, + or as a string specifying either a file name or a single value. + """ + + value = super(InputInitBase,self).fetch() + if self.mode.fetch() == "manual": + if '[' in value and ']' in value: # value appears to be a list + if self._storageclass is float: + value = io_xml.read_array(np.float, value) + else: + value = io_xml.read_list(value) + else: + value = io_xml.read_type(self._storageclass, value) + else: + value = str(value) # typically this will be a no-op + return value + + def fetch(self, initclass=None): + """Creates an input base object. + + Returns: + An input base object. + """ + + rdict = {} + for k in self.attribs: + rdict[k] = self.__dict__[k].fetch() + + if initclass is None: # allows for some flexibility in return class + initclass = self._initclass + + return initclass(value=self.getval(), **rdict) + + +class InputInitFile(InputInitBase): + """Class to handle initialization from a file.""" + + attribs = deepcopy(InputInitBase.attribs) + attribs["mode"][1]["default"] = "chk" + attribs["mode"][1]["options"] = ["xyz", "pdb", "chk"] + attribs["mode"][1]["help"] = "The input data format. 'xyz' and 'pdb' stand for xyz and pdb input files respectively. 'chk' stands for initialization from a checkpoint file." + + default_label = "INITFILE" + default_help = "This is the class to initialize from file." + + +class InputInitThermo(InputInitBase): + """Class to handle initialization of the thermostat.""" + + attribs = deepcopy(InputInitBase.attribs) + attribs["mode"][1]["default"] = "manual" + attribs["mode"][1]["options"] = ["chk", "manual"] + attribs["mode"][1]["help"] = "'chk' stands for initialization from a checkpoint file. 'manual' means that the value to initialize from is giving explicitly as a vector." + + default_label = "INITTHERMO" + default_help = "This is the class to initialize the thermostat (ethermo and fictitious momenta)." + + +class InputInitIndexed(InputInitBase): + """Class to handle initialization of properties which the value of each + bead and atom can be specified. + + Attributes: + index: Which atom to initialize the value of. + bead: Which bead to initialize the value of. + """ + + attribs = deepcopy(InputInitBase.attribs) + attribs["index"] = (InputAttribute,{ "dtype" : int, "default": -1, "help": "The index of the atom for which the value will be set. If a negative value is specified, then all atoms are assumed." } ) + attribs["bead"] = (InputAttribute,{ "dtype" : int, "default": -1, "help": "The index of the bead for which the value will be set. If a negative value is specified, then all beads are assumed." } ) + + default_label = "INITINDEXED" + default_help = "This is a helper class to initialize with an index." + + +class InputInitPositions(InputInitIndexed): + """Class to handle initialization of the positions.""" + + attribs = deepcopy(InputInitIndexed.attribs) + attribs["mode"][1]["default"] = "chk" + attribs["mode"][1]["options"] = ["manual", "xyz", "pdb", "chk"] + attribs["mode"][1]["help"] = "The input data format. 'xyz' and 'pdb' stand for xyz and pdb input files respectively. 'chk' stands for initialization from a checkpoint file. 'manual' means that the value to initialize from is giving explicitly as a vector." + + default_label = "INITPOSITIONS" + default_help = "This is the class to initialize positions." + _initclass = ei.InitIndexed + + +class InputInitMomenta(InputInitPositions): + """Class to handle initialization of the momenta.""" + + attribs = deepcopy(InputInitPositions.attribs) + attribs["mode"][1]["options"].append( "thermal" ) + attribs["mode"][1]["help"] = "The input data format. 'xyz' and 'pdb' stand for xyz and pdb input files respectively. 'chk' stands for initialization from a checkpoint file. 'manual' means that the value to initialize from is giving explicitly as a vector. 'thermal' means that the data is to be generated from a Maxwell-Boltzmann distribution at the given temperature." + + default_label = "INITMOMENTA" + default_help = "This is the class to initialize momenta." + + def fetch(self): + """Creates an momentum initializer object. + + Note that the momenta can be initialized by a single value, specifying + the temperature at which to thermalize the momenta. + """ + + if self.mode.fetch() == "thermal": + return self._initclass(value=float(InputValue.fetch(self)), mode=self.mode.fetch(), units=self.units.fetch(), index=self.index.fetch(), bead=self.bead.fetch()) + else: + return super(InputInitMomenta,self).fetch() + + +class InputInitVelocities(InputInitMomenta): + """Class to handle initialization of the velocities.""" + + attribs = deepcopy(InputInitMomenta.attribs) + + default_label = "INITVELOCITIES" + default_help = "This is the class to initialize velocities." + + +class InputInitMasses(InputInitPositions): + """Class to handle initialization of the masses.""" + + attribs = deepcopy(InputInitPositions.attribs) + + default_label = "INITMASSES" + default_help = "This is the class to initialize atomic masses." + + +class InputInitLabels(InputInitPositions): + """Class to handle initialization of the atom labels.""" + + attribs = deepcopy(InputInitPositions.attribs) + + default_label = "INITLABELS" + default_help = "This is the class to initialize atomic labels." + + _storageclass = str + + +class InputInitCell(InputInitBase): + """Class to handle initialization of the cell.""" + + attribs = deepcopy(InputInitBase.attribs) + attribs["mode"] = (InputAttribute, { "dtype" : str, + "default": "manual", + "options": ["manual", "pdb", "chk", "abc", "abcABC"], + "help" : "This decides whether the system box is created from a cell parameter matrix, or from the side lengths and angles between them. If 'mode' is 'manual', then 'cell' takes a 9-elements vector containing the cell matrix (row-major). If 'mode' is 'abcABC', then 'cell' takes an array of 6 floats, the first three being the length of the sides of the system parallelopiped, and the last three being the angles (in degrees) between those sides. Angle A corresponds to the angle between sides b and c, and so on for B and C. If mode is 'abc', then this is the same as for 'abcABC', but the cell is assumed to be orthorhombic. 'pdb' and 'chk' read the cell from a PDB or a checkpoint file, respectively."} ) + + default_label = "INITCELL" + default_help = "This is the class to initialize cell." + + def fetch(self): + """Creates a cell initializer object. + + Note that the cell can be initialized from the lengths of the sides and + the angles between them instead of by a vector, as specified by the + 'abc' or 'abcABC' modes. + """ + + mode = self.mode.fetch() + + ibase = super(InputInitCell,self).fetch() + if mode == "abc" or mode == "abcABC": + + h = io_xml.read_array(np.float, ibase.value) + + if mode == "abc": + if h.size != 3: + raise ValueError("If you are initializing cell from cell side lengths you must pass the 'cell' tag an array of 3 floats.") + else: + h = mt.abc2h(h[0], h[1], h[2], np.pi/2, np.pi/2, np.pi/2) + elif mode == "abcABC": + if h.size != 6: + raise ValueError("If you are initializing cell from cell side lengths and angles you must pass the 'cell' tag an array of 6 floats.") + else: + h = mt.abc2h(h[0], h[1], h[2], h[3]*np.pi/180.0, h[4]*np.pi/180.0, h[5]*np.pi/180.0) + + h.shape = (9,) + ibase.value = h + mode = "manual" + + if mode == "manual": + h = ibase.value + if h.size != 9: + raise ValueError("Cell objects must contain a 3x3 matrix describing the cell vectors.") + + if not (h[3] == 0.0 and h[6] == 0.0 and h[7] == 0.0): + warning("Cell vector matrix must be upper triangular, all elements below the diagonal being set to zero.", verbosity.low) + h[3] = h[6] = h[7] = 0 + ibase.value = h + + return self._initclass(value=ibase.value, mode=mode, units=self.units.fetch()) + + +class InputInitializer(Input): + """Input class to handle initialization. + + Attributes: + nbeads: The number of beads to be used in the simulation. + + Dynamic fields: + positions: An object to initialize the positions from. + velocities: An object to initialize the velocities from. + momenta: An object to initialize the momenta from. + cell: An object to initialize the cell from. + masses: An object to initialize the masses from. + labels: An object to initialize the labels from. + gle: An object to initialize the GLE matrices from. + file: A file from which to initialize multiple properties from. Anything + that can be initialized either directly or indirectly from this file + will be. + """ + + attribs = { "nbeads" : (InputAttribute, {"dtype" : int, + "help" : "The number of beads. Will override any provision from inside the initializer. A ring polymer contraction scheme is used to scale down the number of beads if required. If instead the number of beads is scaled up, higher normal modes will be initialized to zero."}) + } + + dynamic = { + "positions" : (InputInitPositions, { "help" : "Initializes atomic positions. Will take a 'units' attribute of dimension 'length'"}), + "velocities" : (InputInitVelocities, { "help" : "Initializes atomic velocities. Will take a 'units' attribute of dimension 'velocity'" }), + "momenta" : (InputInitMomenta, { "help" : "Initializes atomic momenta. Will take a 'units' attribute of dimension 'momentum'" }), + "masses" : (InputInitMasses, { "help" : "Initializes atomic masses. Will take a 'units' attribute of dimension 'mass'" }), + "labels" : (InputInitLabels, { "help" : "Initializes atomic labels" }), + "cell" : (InputInitCell, { "help" : "Initializes the configuration of the cell. Will take a 'units' attribute of dimension 'length'" }), + "file" : (InputInitFile, { "help" : "Initializes everything possible for the given mode. Will take a 'units' attribute of dimension 'length'. The unit conversion will only be applied to the positions and cell parameters." }), + "gle" : (InputInitThermo, { "help" : "Initializes the additional momenta in a GLE thermostat." }) + } + + default_help = "Specifies the number of beads, and how the system should be initialized." + default_label = "INITIALIZER" + + def write(self, name="", indent=""): + """Overloads Input write() function so that we never write out + InputInitializer to restart files. + + Returns: + An empty string. + """ + + return "" + + def store(self, ii): + """Takes a Initializer instance and stores a minimal representation of it. + + Args: + ii: An initializer object. + """ + + self.extra = [] + + for (k, el) in ii.queue: + if k == "positions" : + ip = InputInitPositions() + ip.store(el) + elif k == "velocities" : + ip = InputInitVelocities() + ip.store(el) + elif k == "momenta" : + ip = InputInitMomenta() + ip.store(el) + elif k == "masses" : + ip = InputInitMasses() + ip.store(el) + elif k == "labels" : + ip = InputInitLabels() + ip.store(el) + elif k == "cell" : + ip = InputInitCell() + ip.store(el) + elif k == "gle" : + ip = InputInitThermo() + ip.store(el) + self.extra.append((k, ip)) + + self.nbeads.store(ii.nbeads) + + def fetch(self): + """Creates an initializer object. + + Returns: + An initializer object. + """ + + super(InputInitializer,self).fetch() + + initlist = [] + for (k,v) in self.extra: + if v.mode.fetch() == "chk" and v.fetch(initclass=ei.InitIndexed).units != "": + raise ValueError("Cannot specify units for initialization from a checkpoint file - units should be defined _inside_ the file.") + if k == "file": + mode = v.mode.fetch() + if mode == "xyz" or mode == "manual" or mode == "pdb" or mode == "chk": + initlist.append( ( "positions", v.fetch(initclass=ei.InitIndexed) ) ) + if mode == "xyz" or mode == "pdb" or mode == "chk": + rm = v.fetch(initclass=ei.InitIndexed) + rm.units = "" + initlist.append( ( "masses", rm ) ) + initlist.append( ( "labels", v.fetch(initclass=ei.InitIndexed) ) ) + if mode == "pdb" or mode == "chk": + initlist.append( ( "cell", v.fetch(initclass=ei.InitIndexed) ) ) + if mode == "chk": + rm = v.fetch(initclass=ei.InitIndexed) + rm.units = "" + initlist.append( ( "momenta", rm ) ) + else: + initlist.append( (k, v.fetch()) ) + + return ei.Initializer(self.nbeads.fetch(), initlist ) diff --git a/tools/i-pi/ipi/inputs/interface.py b/tools/i-pi/ipi/inputs/interface.py new file mode 100644 index 000000000..2ff092a66 --- /dev/null +++ b/tools/i-pi/ipi/inputs/interface.py @@ -0,0 +1,125 @@ +"""Deals with creating the interface between the wrapper and the socket. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputInterface: Deals with creating the Interface object from a file, and + writing the checkpoints. +""" + +__all__ = [ 'InputInterfaceSocket' ] + +import socket, select, threading, signal, string, os, time +import numpy as np +from ipi.utils.messages import verbosity, warning +from ipi.utils.inputvalue import * +from ipi.interfaces.sockets import * + + +class InputInterfaceSocket(Input): + """Interface input class. + + Handles generating the apporopriate interface class from the xml + input file, and generating the xml checkpoin tags and data from an + instance of the object. + + Attributes: + mode: A string giving the type of socket used. + pbc: A boolean giving whether the atom positions will be folded back + into the unit cell before being sent through the socket or not. + + Fields: + address: A string giving the host name. + port: An integer giving the port used by the socket. + slots: An integer giving the maximum allowed backlog of queued clients. + latency: A float giving the number of seconds that the interface waits + before updating the client list. + timeout: A float giving a number of seconds after which a calculation core + is considered dead. Defaults to zero, i.e. no timeout. + """ + + fields = {"address": (InputValue, {"dtype" : str, + "default" : "localhost", + "help" : "This gives the server address that the socket will run on." } ), + "port": (InputValue, {"dtype" : int, + "default" : 65535, + "help" : "This gives the port number that defines the socket."} ), + "slots": (InputValue, {"dtype" : int, + "default" : 4, + "help" : "This gives the number of client codes that can queue at any one time."} ), + "latency": (InputValue, {"dtype" : float, + "default" : 1e-3, + "help" : "This gives the number of seconds between each check for new clients."} ), + "timeout": (InputValue, {"dtype" : float, + "default" : 0.0, + "help" : "This gives the number of seconds before assuming a calculation has died. If 0 there is no timeout." } )} + attribs = { "mode": (InputAttribute, {"dtype" : str, + "options" : [ "unix", "inet" ], + "default" : "inet", + "help" : "Specifies whether the driver interface will listen onto a internet socket [inet] or onto a unix socket [unix]." } ), + "pbc": ( InputAttribute, { "dtype" : bool, + "default" : True, + "help" : "Applies periodic boundary conditions to the atoms coordinates before passing them on to the driver code." }) + } + + default_help = "Specifies the parameters for the socket interface." + default_label = "INTERFACE" + + def store(self, iface): + """Takes an Interface instance and stores a minimal representation of it. + + Args: + iface: An interface object. + """ + + super(InputInterfaceSocket,self).store(iface) + self.latency.store(iface.latency) + self.mode.store(iface.mode) + self.address.store(iface.address) + self.port.store(iface.port) + self.slots.store(iface.slots) + self.timeout.store(iface.timeout) + self.pbc.store(iface.dopbc) + + def fetch(self): + """Creates an InterfaceSocket object. + + Returns: + An interface object with the appropriate socket given the attributes + of the InputInterfaceSocket object. + """ + + super(InputInterfaceSocket,self).fetch() + return InterfaceSocket(address=self.address.fetch(), port=self.port.fetch(), + slots=self.slots.fetch(), mode=self.mode.fetch(), + latency=self.latency.fetch(), timeout=self.timeout.fetch(), dopbc=self.pbc.fetch()) + + def check(self): + """Function that deals with optional arguments.""" + + super(InputInterfaceSocket,self).check() + if self.port.fetch() < 1 or self.port.fetch() > 65535: + raise ValueError("Port number " + str(self.port.fetch()) + " out of acceptable range.") + elif self.port.fetch() < 1025: + warning("Low port number being used, this may interrupt important system processes.", verbosity.low) + + if self.slots.fetch() < 1 or self.slots.fetch() > 5: + raise ValueError("Slot number " + str(self.slots.fetch()) + " out of acceptable range.") + if self.latency.fetch() < 0: + raise ValueError("Negative latency parameter specified.") + if self.timeout.fetch() < 0.0: + raise ValueError("Negative timeout parameter specified.") diff --git a/tools/i-pi/ipi/inputs/normalmodes.py b/tools/i-pi/ipi/inputs/normalmodes.py new file mode 100644 index 000000000..0e4605104 --- /dev/null +++ b/tools/i-pi/ipi/inputs/normalmodes.py @@ -0,0 +1,84 @@ +"""Deals with creating the normal mode representation arrays. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputNormalModes: Deals with creating the normal mode objects. +""" + +import numpy as np +from copy import copy +from ipi.engine.normalmodes import * +from ipi.utils.inputvalue import * +from ipi.utils.units import * + +__all__ = ['InputNormalModes'] + +class InputNormalModes(InputArray): + """ Storage class for NormalModes engine. + + Describes how normal-modes transformation and integration should be + performed. + + Attributes: + mode: Specifies the method by which the dynamical masses are created. + transform: Specifies whether the normal mode calculation will be + done using a FFT transform or a matrix multiplication. + """ + + attribs = copy(InputArray.attribs) + attribs["mode"] = (InputAttribute, {"dtype" : str, + "default" : "rpmd", + "help" : "Specifies the technique to be used to calculate the dynamical masses. 'rpmd' simply assigns the bead masses the physical mass. 'manual' sets all the normal mode frequencies except the centroid normal mode manually. 'pa-cmd' takes an argument giving the frequency to set all the non-centroid normal modes to. 'wmax-cmd' is similar to 'pa-cmd', except instead of taking one argument it takes two ([wmax,wtarget]). The lowest-lying normal mode will be set to wtarget for a free particle, and all the normal modes will coincide at frequency wmax. ", + "options" : ['pa-cmd', 'wmax-cmd', 'manual', 'rpmd']}) + attribs["transform"] = (InputValue,{"dtype" : str, + "default" : "fft", + "help" : "Specifies whether to calculate the normal mode transform using a fast Fourier transform or a matrix multiplication. For small numbers of beads the matrix multiplication may be faster.", + "options" : ['fft', 'matrix']}) + + default_help = "Deals with the normal mode transformations, including the adjustment of bead masses to give the desired ring polymer normal mode frequencies if appropriate. Takes as arguments frequencies, of which different numbers must be specified and which are used to scale the normal mode frequencies in different ways depending on which 'mode' is specified." + default_label = "NORMALMODES" + + def __init__(self, help=None, dimension=None, default=None, dtype=None): + """ Initializes InputNormalModes. + + Just calls the parent initialization function with appropriate arguments. + """ + + super(InputNormalModes,self).__init__(help=help, default=default, dtype=float, dimension="frequency") + + def store(self, nm): + """Takes a normal modes instance and stores a minimal representation + of it. + + Args: + nm: A normal modes object. + """ + + super(InputNormalModes,self).store(nm.nm_freqs) + self.mode.store(nm.mode) + self.transform.store(nm.transform_method) + + def fetch(self): + """Creates a normal modes object. + + Returns: + A normal modes object. + """ + + super(InputNormalModes,self).check() + return NormalModes(self.mode.fetch(), self.transform.fetch(), super(InputNormalModes,self).fetch() ) diff --git a/tools/i-pi/ipi/inputs/outputs.py b/tools/i-pi/ipi/inputs/outputs.py new file mode 100644 index 000000000..5141c79be --- /dev/null +++ b/tools/i-pi/ipi/inputs/outputs.py @@ -0,0 +1,323 @@ +"""Deals with creating the output objects. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputOutputs: Creates a list of all the output objects. + InputProperties: Deals with property output. + InputTrajectory: Deals with trajectory output. + InputCheckpoint: Deals with restart file output. +""" +import numpy as np +from copy import copy +import ipi.engine.outputs +from ipi.utils.depend import * +from ipi.utils.inputvalue import * +from ipi.engine.properties import getkey + +__all__=['InputOutputs', 'InputProperties', 'InputTrajectory', + 'InputCheckpoint'] + +class InputProperties(InputArray): + """Simple input class to describe output for properties. + + Storage class for PropertyOutput. + + Attributes: + filename: The name of the file to output to. + stride: The number of steps that should be taken between outputting the + data to file. + flush: An integer describing how often the output streams are flushed, + so that it doesn't wait for the buffer to fill before outputting to + file. + """ + + default_help = """This class deals with the output of properties to one file. Between each property tag there should be an array of strings, each of which specifies one property to be output.""" + default_label = "PROPERTIES" + + attribs = copy(InputArray.attribs) + attribs["filename"] = (InputAttribute,{ "dtype" : str, "default": "out", + "help": "A string to specify the name of the file that is output. The file name is given by 'prefix'.'filename' + format_specifier. The format specifier may also include a number if multiple similar files are output."} ) + attribs["stride"] = (InputAttribute,{ "dtype" : int, "default": 1, + "help": "The number of steps between successive writes." } ) + attribs["flush"] = (InputAttribute, {"dtype" : int, "default" : 1, + "help" : "How often should streams be flushed. 1 means each time, zero means never." }) + + def __init__(self, help=None, default=None, dtype=None, dimension=None): + """Initializes InputProperties. + + Just calls the parent initialization function with appropriate arguments. + """ + + super(InputProperties,self).__init__(help=help, default=default, dtype=str, dimension=dimension) + + def fetch(self): + """Returns a PropertyOutput object.""" + + return ipi.engine.outputs.PropertyOutput(filename=self.filename.fetch(), + stride=self.stride.fetch(), flush=self.flush.fetch(), outlist=super(InputProperties,self).fetch()) + + def store(self, prop): + """Stores a PropertyOutput object.""" + + super(InputProperties,self).store(prop.outlist) + self.stride.store(prop.stride) + self.flush.store(prop.flush) + self.filename.store(prop.filename) + + def check(self): + """Checks for optional parameters.""" + + super(InputProperties,self).check() + if self.stride.fetch() < 0: + raise ValueError("The stride length for the properties file output must be positive.") + + +class InputTrajectory(InputValue): + """Simple input class to describe output for trajectories. + + Storage class for TrajectoryOutput. + + Attributes: + filename: The (base) name of the file to output to. + stride: The number of steps that should be taken between outputting the + data to file. + format: The format of the trajectory output file. + cell_units: The units that the cell parameters are given in. + bead: If the trajectory is a per-bead property, this can be used to + specify a single bead to output. If negative, it defaults to + the centroid. + flush: An integer describing how often the output streams are flushed, + so that it doesn't wait for the buffer to fill before outputting to + file. + """ + + default_help = """This class defines how one trajectory file should be output. Between each trajectory tag one string should be given, which specifies what data is to be output.""" + default_label = "TRAJECTORY" + + attribs = copy(InputValue.attribs) + attribs["filename"] = (InputAttribute,{ "dtype" : str, "default": "traj", + "help": "A string to specify the name of the file that is output. The file name is given by 'prefix'.'filename' + format_specifier. The format specifier may also include a number if multiple similar files are output."} ) + attribs["stride"] = (InputAttribute,{ "dtype" : int, "default": 1, + "help": "The number of steps between successive writes." } ) + attribs["format"] = (InputAttribute,{ "dtype" : str, "default": "xyz", + "help": "The output file format.", + "options": ['xyz', 'pdb'] } ) + attribs["cell_units"] = (InputAttribute,{ "dtype" : str, "default": "", + "help": "The units for the cell dimensions." } ) + attribs["bead"] = (InputAttribute,{ "dtype" : int, "default": -1, + "help": "Print out only the specified bead. A negative value means print all." } ) + attribs["flush"] = (InputAttribute, {"dtype" : int, "default" : 1, + "help" : "How often should streams be flushed. 1 means each time, zero means never." }) + + def __init__(self, help=None, default=None, dtype=None, dimension=None): + """Initializes InputTrajectory. + + Just calls the parent initialization function with appropriate arguments. + """ + + super(InputTrajectory,self).__init__(help=help, default=default, dtype=str, dimension=dimension) + + def fetch(self): + """Returns a TrajectoryOutput object.""" + + return ipi.engine.outputs.TrajectoryOutput(filename=self.filename.fetch(), stride=self.stride.fetch(), + flush=self.flush.fetch(), what=super(InputTrajectory,self).fetch(), + format=self.format.fetch(), cell_units=self.cell_units.fetch(), ibead=self.bead.fetch()) + + def store(self, traj): + """Stores a PropertyOutput object.""" + + super(InputTrajectory,self).store(traj.what) + self.stride.store(traj.stride) + self.flush.store(traj.flush) + self.filename.store(traj.filename) + self.format.store(traj.format) + self.cell_units.store(traj.cell_units) + self.bead.store(traj.ibead) + + def check(self): + """Checks for optional parameters.""" + + super(InputTrajectory,self).check() + if self.stride.fetch() < 0: + raise ValueError("The stride length for the trajectory file output must be positive.") + + +class InputCheckpoint(InputValue): + """Simple input class to describe output for properties. + + Storage class for CheckpointOutput. + + Attributes: + filename: The (base) name of the file to output to. + stride: The number of steps that should be taken between outputting the + data to file. + overwrite: whether checkpoints should be overwritten, or multiple + files output. + """ + + default_help = """This class defines how a checkpoint file should be output. Optionally, between the checkpoint tags, you can specify one integer giving the current step of the simulation. By default this integer will be zero.""" + default_label = "CHECKPOINT" + + attribs=copy(InputValue.attribs) + attribs["filename"] = (InputAttribute,{ "dtype" : str, "default": "restart", + "help": "A string to specify the name of the file that is output. The file name is given by 'prefix'.'filename' + format_specifier. The format specifier may also include a number if multiple similar files are output."} ) + attribs["stride"] = (InputAttribute,{ "dtype" : int, "default": 1, + "help": "The number of steps between successive writes." } ) + attribs["overwrite"] = (InputAttribute,{ "dtype" : bool, "default": True, + "help": "This specifies whether or not each consecutive checkpoint file will overwrite the old one."} ) + + def __init__(self, help=None, default=None, dtype=None, dimension=None): + """Initializes InputCheckpoint. + + Just calls the parent initialization function with appropriate arguments. + """ + + super(InputCheckpoint,self).__init__(help=help, default=default, dtype=int, dimension=dimension) + + def fetch(self): + """Returns a CheckpointOutput object.""" + + step = super(InputCheckpoint,self).fetch() + return ipi.engine.outputs.CheckpointOutput(self.filename.fetch(), self.stride.fetch(), self.overwrite.fetch(), step=step ) + + def parse(self, xml=None, text=""): + """Overwrites the standard parse function so that we can specify this tag + in the input without any data. + + We can use the syntax to do this + + Args: + xml: An xml node containing all the data for the parent tag. + text: The data to read the data from. Will be None if we have not + specified any data. + """ + + # just a quick hack to allow an empty element + try: + super(InputCheckpoint,self).parse(xml,text) + except: #TODO make this except a specific exception, not every one + self.value = 0 #This could hide actual errors, at least in theory. + + def store(self, chk): + """Stores a CheckpointOutput object.""" + + super(InputCheckpoint,self).store(chk.step) + self.stride.store(chk.stride) + self.filename.store(chk.filename) + self.overwrite.store(chk.overwrite) + + def check(self): + """Checks for optional parameters.""" + + super(InputCheckpoint,self).check() + if self.stride.fetch() < 0: + raise ValueError("The stride length for the checkpoint file output must be positive.") + + +class InputOutputs(Input): + """ List of outputs input class. + + An example of a dynamic input class: a variable number of tags might be + present, corresponding to different output requests. This allows for + instance to print multiple property outputs, with different content + and/or output frequency. + + Attributes: + prefix: A string that will be appended to all output files from this + simulation. + + Dynamic fields: + trajectory: Specifies a trajectory to be output + properties: Specifies some properties to be output. + checkpoint: Specifies a checkpoint file to be output. + """ + + attribs = { "prefix" : ( InputAttribute, { "dtype" : str, + "default" : "i-pi", + "help" : "A string that will be prepended to each output file name. The file name is given by 'prefix'.'filename' + format_specifier. The format specifier may also include a number if multiple similar files are output." }) + } + + dynamic = { "properties" : (InputProperties, { "help" : "Each of the properties tags specify how to create a file in which one or more properties are written, one line per frame. " } ), + "trajectory" : (InputTrajectory, { "help" : "Each of the trajectory tags specify how to create a trajectory file, containing a list of per-atom coordinate properties. " } ), + "checkpoint" : (InputCheckpoint, { "help" : "Each of the checkpoint tags specify how to create a checkpoint file, which can be used to restart a simulation. " } ), + } + + default_help = """This class defines how properties, trajectories and checkpoints should be output during the simulation. May contain zero, one or many instances of properties, trajectory or checkpoint tags, each giving instructions on how one output file should be created and managed.""" + default_label = "OUTPUTS" + + @classmethod + def make_default(cls): + """Used to make the default value of the outputs class for use when no + output is specified. + + Needed since this is a fairly complicated default, with many mutable + objects, and the default has to be generated by a function that does not + use any mutable objects as arguments. + """ + + return [ ipi.engine.outputs.PropertyOutput(filename="i-pi.md", stride=10, outlist=[ "time", "step", "conserved", "temperature", "potential", "kinetic_cv" ] ), + ipi.engine.outputs.TrajectoryOutput(filename="i-pi.pos", stride=100, what="positions", format="xyz"), + ipi.engine.outputs.CheckpointOutput(filename="i-pi.checkpoint", stride=1000, overwrite=True)] + + def fetch(self): + """Returns a list of the output objects included in this dynamic + container. + + Returns: + A list of tuples, with each tuple being of the form ('type', 'object') + where 'type' is the type of output object and 'object' is a particular + object of that type. + """ + + super(InputOutputs, self).fetch() + outlist = [ p.fetch() for (n, p) in self.extra ] + prefix = self.prefix.fetch() + if not prefix == "": + for p in outlist: + p.filename = prefix + "." + p.filename + + return outlist + + def store(self, plist): + """ Stores a list of the output objects, creating a sequence of + dynamic containers. + + Args: + plist: A list of tuples, with each tuple being of the form + ('type', 'object') where 'type' is the type of forcefield and + 'object' is a particular object of that type. + """ + + super(InputOutputs, self).store() + self.extra = [] + + self.prefix.store("") + for el in plist: + if (isinstance(el, ipi.engine.outputs.PropertyOutput)): + ip = InputProperties() + ip.store(el) + self.extra.append(("properties", ip)) + elif (isinstance(el, ipi.engine.outputs.TrajectoryOutput)): + ip = InputTrajectory() + ip.store(el) + self.extra.append(("trajectory", ip)) + elif (isinstance(el, ipi.engine.outputs.CheckpointOutput)): + ip = InputCheckpoint() + ip.store(el) + self.extra.append(("checkpoint", ip)) diff --git a/tools/i-pi/ipi/inputs/prng.py b/tools/i-pi/ipi/inputs/prng.py new file mode 100644 index 000000000..58faaca5f --- /dev/null +++ b/tools/i-pi/ipi/inputs/prng.py @@ -0,0 +1,101 @@ +"""Deals with creating the random number generator. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Generates a random number generator either from a seed number, or from a +state vector. + +Classes: + InputRandom: Deals with creating the Random object from a file, and + writing the checkpoints. +""" + +__all__ = ['InputRandom'] + +import numpy as np +from ipi.utils.prng import * +from ipi.utils.inputvalue import * + +class InputRandom(Input): + """Random input class. + + Handles generating the appropriate random number class from the xml + input file, and generating the xml checkpoint tags and data from an + instance of the object. + + Attributes: + seed: An optional integer giving a seed to initialise the random number + generator from. Defaults to 123456. + state: An optional array giving the state of the random number generator. + Defaults to an empty array. + has_gauss: An optional integer giving whether there is a stored + Gaussian number or not. Defaults to 0. + gauss: An optional float giving the stored Gaussian number. Defaults to + 0.0. + set_pos: An optional integer giving the position in the state array + that is being read from. Defaults to 0. + """ + + fields = {"seed" : (InputValue, {"dtype" : int, + "default" : 123456, + "help" : "This is the seed number used to generate the initial state of the random number generator."}), + "state" : (InputArray, {"dtype" : np.uint, + "default" : input_default(factory=np.zeros, kwargs={'shape': (0,), 'dtype': np.uint}), + "help" : "Gives the state vector for the random number generator. Avoid directly modifying this unless you are very familiar with the inner workings of the algorithm used."}), + "has_gauss" : (InputValue, {"dtype" : int, + "default" : 0, + "help" : "Determines whether there is a stored gaussian number or not. A value of 0 means there is none stored."}), + "gauss" : (InputValue, {"dtype" : float, + "default" : 0.00, + "help" : "The stored Gaussian number." }), + "set_pos" : (InputValue, {"dtype" : int, + "default" : 0, + "help" : "Gives the position in the state array that the random number generator is reading from."})} + + default_help = "Deals with the pseudo-random number generator." + default_label = "PRNG" + + def store(self, prng): + """Takes a random number instance and stores a minimal + representation of it. + + Args: + prng: A random number object from which to initialise from. + """ + + super(InputRandom,self).store(prng) + self.seed.store(prng.seed) + gstate = prng.state + self.state.store(gstate[1]) + self.set_pos.store(gstate[2]) + self.has_gauss.store(gstate[3]) + self.gauss.store(gstate[4]) + + def fetch(self): + """Creates a random number object. + + Returns: + An random number object of the appropriate type and with the + appropriate properties given the attributes of the InputRandom + object. + """ + + super(InputRandom,self).fetch() + if not self.state._explicit: + return Random(seed=self.seed.fetch()) + else: + return Random(state=('MT19937',self.state.fetch(), self.set_pos.fetch(), self.has_gauss.fetch(), self.gauss.fetch() )) diff --git a/tools/i-pi/ipi/inputs/simulation.py b/tools/i-pi/ipi/inputs/simulation.py new file mode 100644 index 000000000..d020547cd --- /dev/null +++ b/tools/i-pi/ipi/inputs/simulation.py @@ -0,0 +1,193 @@ +"""Deals with creating the simulation class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + InputSimulation: Deals with creating the Simulation object from a file, and + writing the checkpoints. +""" + +__all__ = ['InputSimulation'] + +import numpy as np +import os.path, sys +import ipi.engine.simulation +from ipi.utils.depend import * +from ipi.utils.inputvalue import * +from ipi.utils.units import * +from ipi.utils.prng import * +from ipi.utils.io import * +from ipi.utils.io.io_xml import * +from ipi.utils.messages import verbosity +from ipi.inputs.forces import InputForces +from ipi.inputs.prng import InputRandom +from ipi.inputs.initializer import InputInitializer +from ipi.inputs.beads import InputBeads +from ipi.inputs.cell import InputCell +from ipi.inputs.ensembles import InputEnsemble +from ipi.inputs.outputs import InputOutputs +from ipi.inputs.normalmodes import InputNormalModes +from ipi.engine.normalmodes import NormalModes +from ipi.engine.atoms import Atoms +from ipi.engine.beads import Beads +from ipi.engine.cell import Cell +from ipi.engine.initializer import Initializer + +class InputSimulation(Input): + """Simulation input class. + + Handles generating the appropriate forcefield class from the xml input file, + and generating the xml checkpoint tags and data from an instance of the + object. + + Attributes: + verbosity: A string saying how much should be output to standard output. + + Fields: + force: A restart force instance. Used as a model for all the replicas. + ensemble: A restart ensemble instance. + beads: A restart beads instance. + normal_modes: Setup of normal mode integrator. + cell: A restart cell instance. + output: A list of the required outputs. + prng: A random number generator object. + step: An integer giving the current simulation step. Defaults to 0. + total_steps: The total number of steps. Defaults to 1000 + total_time: The wall clock time limit. Defaults to 0 (no limit). + initialize: An array of strings giving all the quantities that should + be output. + """ + + fields = { "forces" : (InputForces, { "help" : InputForces.default_help }), + "ensemble": (InputEnsemble, { "help" : InputEnsemble.default_help } ), + "prng" : (InputRandom, { "help" : InputRandom.default_help, + "default" : input_default(factory=Random)} ), + "initialize" : (InputInitializer, { "help" : InputInitializer.default_help, + "default" : input_default(factory=Initializer) } ), + "beads" : (InputBeads, { "help" : InputBeads.default_help, + "default" : input_default(factory=Beads, kwargs={'natoms': 0, 'nbeads': 0}) } ), + "normal_modes" : (InputNormalModes, { "help" : InputNormalModes.default_help, + "default" : input_default(factory=NormalModes, kwargs={'mode': "rpmd"}) } ), + "cell" : (InputCell, { "help" : InputCell.default_help, + "default" : input_default(factory=Cell) }), + "output" : (InputOutputs, { "help" : InputOutputs.default_help, + "default": input_default(factory=InputOutputs.make_default) }), + "step" : ( InputValue, { "dtype" : int, + "default" : 0, + "help" : "The current simulation time step." }), + "total_steps": ( InputValue, { "dtype" : int, + "default" : 1000, + "help" : "The total number of steps that will be done. If 'step' is equal to or greater than 'total_steps', then the simulation will finish." }), + "total_time" : ( InputValue, { "dtype" : float, + "default" : 0, + "help" : "The maximum wall clock time (in seconds)." }), + } + + attribs = { "verbosity" : (InputAttribute, { "dtype" : str, + "default" : "low", + "options" : [ "quiet", "low", "medium", "high", "debug" ], + "help" : "The level of output on stdout." + }) + } + + default_help = "This is the top level class that deals with the running of the simulation, including holding the simulation specific properties such as the time step and outputting the data." + default_label = "SIMULATION" + + def store(self, simul): + """Takes a simulation instance and stores a minimal representation of it. + + Args: + simul: A simulation object. + """ + + super(InputSimulation,self).store() + self.forces.store(simul.flist) + self.ensemble.store(simul.ensemble) + + self.beads.store(simul.beads) + + self.normal_modes.store(simul.nm) + self.cell.store(simul.cell) + self.prng.store(simul.prng) + self.step.store(simul.step) + self.total_steps.store(simul.tsteps) + self.total_time.store(simul.ttime) + self.output.store(simul.outputs) + + # this we pick from the messages class. kind of a "global" but it seems to + # be the best way to pass around the (global) information on the level of output. + if verbosity.debug: + self.verbosity.store("debug") + elif verbosity.high: + self.verbosity.store("high") + elif verbosity.medium: + self.verbosity.store("medium") + elif verbosity.low: + self.verbosity.store("low") + elif verbosity.quiet: + self.verbosity.store("quiet") + else: + raise ValueError("Invalid verbosity level") + + def fetch(self): + """Creates a simulation object. + + Returns: + A simulation object of the appropriate type and with the appropriate + properties and other objects given the attributes of the + InputSimulation object. + + Raises: + TypeError: Raised if one of the file types in the stride keyword + is incorrect. + """ + + super(InputSimulation,self).fetch() + + # small hack: initialize here the verbosity level -- we really assume to have + # just one simulation object + verbosity.level=self.verbosity.fetch() + + # this creates a simulation object which gathers all the little bits + #TODO use named arguments since this list is a bit too long... + rsim = ipi.engine.simulation.Simulation(self.beads.fetch(), self.cell.fetch(), + self.forces.fetch(), self.ensemble.fetch(), self.prng.fetch(), + self.output.fetch(), self.normal_modes.fetch(), + self.initialize.fetch(), self.step.fetch(), + tsteps=self.total_steps.fetch(), + ttime=self.total_time.fetch()) + + # this does all of the piping between the components of the simulation + rsim.bind() + + return rsim + + def check(self): + """Function that deals with optional arguments. + + Deals with the difference between classical and PI dynamics. If there is + no beads argument, the bead positions are generated from the atoms, with + the necklace being fixed at the atom position. Similarly, if no nbeads + argument is specified a classical simulation is done. + + Raises: + TypeError: Raised if no beads or atoms attribute is defined. + """ + + super(InputSimulation,self).check() + if self.total_steps.fetch() <= self.step.fetch(): + raise ValueError("Current step greater than total steps, no dynamics will be done.") diff --git a/tools/i-pi/ipi/inputs/thermostats.py b/tools/i-pi/ipi/inputs/thermostats.py new file mode 100644 index 000000000..cbe2deefc --- /dev/null +++ b/tools/i-pi/ipi/inputs/thermostats.py @@ -0,0 +1,195 @@ +"""Deals with creating the thermostats class. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Chooses between the different possible thermostat options and creates the +appropriate thermostat object, with suitable parameters. + +Classes: + InputThermo: Deals with creating the thermostat object from a file, and + writing the checkpoints. +""" + +__all__ = ['InputThermo'] + +import numpy as np +from ipi.utils.depend import * +from ipi.utils.inputvalue import * +from ipi.engine.thermostats import * + +class InputThermo(Input): + """Thermostat input class. + + Handles generating the appropriate thermostat class from the xml input file, + and generating the xml checkpoiunt tags and data from an instance of the + object. + + Attributes: + mode: An optional string giving the type of the thermostat used. Defaults + to 'langevin'. + + Fields: + ethermo: An optional float giving the amount of heat energy transferred + to the bath. Defaults to 0.0. + tau: An optional float giving the damping time scale. Defaults to 1.0. + pile_scale: Scaling for the PILE damping relative to the critical damping. + A: An optional array of floats giving the drift matrix. Defaults to 0.0. + C: An optional array of floats giving the static covariance matrix. + Defaults to 0.0. + s: An optional array of floats giving the additional momentum-scaled + momenta in GLE. Defaults to 0.0. + """ + + attribs = { "mode": (InputAttribute, { "dtype" : str, + "options" : [ "", "langevin", "svr", "pile_l", "pile_g", "gle", "nm_gle", "nm_gle_g" ], + "help" : "The style of thermostatting. 'langevin' specifies a white noise langevin equation to be attached to the cartesian representation of the momenta. 'svr' attaches a velocity rescaling thermostat to the cartesian representation of the momenta. Both 'pile_l' and 'pile_g' attaches a white noise langevin thermostat to the normal mode representation, with 'pile_l' attaching a local langevin thermostat to the centroid mode and 'pile_g' instead attaching a global velocity rescaling thermostat. 'gle' attaches a coloured noise langevin thermostat to the cartesian representation of the momenta, 'nm_gle' attaches a coloured noise langevin thermostat to the normal mode representation of the momenta and a langevin thermostat to the centroid and 'nm_gle_g' attaches a gle thermostat to the normal modes and a svr thermostat to the centroid." + }) } + fields = { "ethermo" : (InputValue, { "dtype" : float, + "default" : 0.0, + "help" : "The initial value of the thermostat energy. Used when the simulation is restarted to guarantee continuity of the conserved quantity.", + "dimension" : "energy" }), + "tau" : (InputValue, { "dtype" : float, + "default" : 0.0, + "help" : "The friction coefficient for white noise thermostats.", + "dimension" : "time" }), + "pile_scale" : (InputValue, { "dtype" : float, + "default" : 1.0, + "help" : "Scaling for the PILE damping relative to the critical damping."} ), + "A" : (InputArray, { "dtype" : float, + "default" : input_default(factory=np.zeros, args = (0,)), + "help" : "The friction matrix for GLE thermostats.", + "dimension" : "frequency" }), + "C" : (InputArray, { "dtype" : float, + "default" : input_default(factory=np.zeros, args = (0,)), + "help" : "The covariance matrix for GLE thermostats.", + "dimension" : "temperature" }), + "s" : (InputArray, { "dtype" : float, + "default" : input_default(factory=np.zeros, args = (0,)), + "help" : "Input values for the additional momenta in GLE.", + "dimension" : "ms-momentum" }) + } + + default_help = "Simulates an external heat bath to keep the velocity distribution at the correct temperature." + default_label = "THERMOSTATS" + + def store(self, thermo): + """Takes a thermostat instance and stores a minimal representation of it. + + Args: + thermo: A thermostat object. + + Raises: + TypeError: Raised if the thermostat is not a recognized type. + """ + + super(InputThermo,self).store(thermo) + if type(thermo) is ThermoLangevin: + self.mode.store("langevin") + self.tau.store(thermo.tau) + elif type(thermo) is ThermoSVR: + self.mode.store("svr") + self.tau.store(thermo.tau) + elif type(thermo) is ThermoPILE_L: + self.mode.store("pile_l") + self.tau.store(thermo.tau) + self.pile_scale.store(thermo.pilescale) + elif type(thermo) is ThermoPILE_G: + self.mode.store("pile_g") + self.tau.store(thermo.tau) + self.pile_scale.store(thermo.pilescale) + elif type(thermo) is ThermoGLE: + self.mode.store("gle") + self.A.store(thermo.A) + if dget(thermo,"C")._func is None: + self.C.store(thermo.C) + self.s.store(thermo.s) + elif type(thermo) is ThermoNMGLE: + self.mode.store("nm_gle") + self.A.store(thermo.A) + if dget(thermo,"C")._func is None: + self.C.store(thermo.C) + self.s.store(thermo.s) + elif type(thermo) is ThermoNMGLEG: + self.mode.store("nm_gle_g") + self.A.store(thermo.A) + self.tau.store(thermo.tau) + if dget(thermo,"C")._func is None: + self.C.store(thermo.C) + self.s.store(thermo.s) + elif type(thermo) is Thermostat: + self.mode.store("") + else: + raise TypeError("Unknown thermostat mode " + type(thermo).__name__) + self.ethermo.store(thermo.ethermo) + + def fetch(self): + """Creates a thermostat object. + + Returns: + A thermostat object of the appropriate type and with the appropriate + parameters given the attributes of the InputThermo object. + + Raises: + TypeError: Raised if the thermostat type is not a recognized option. + """ + + super(InputThermo,self).fetch() + if self.mode.fetch() == "langevin": + thermo = ThermoLangevin(tau=self.tau.fetch()) + elif self.mode.fetch() == "svr": + thermo = ThermoSVR(tau=self.tau.fetch()) + elif self.mode.fetch() == "pile_l": + thermo = ThermoPILE_L(tau=self.tau.fetch(), scale=self.pile_scale.fetch()) + elif self.mode.fetch() == "pile_g": + thermo = ThermoPILE_G(tau=self.tau.fetch(), scale=self.pile_scale.fetch()) + elif self.mode.fetch() == "gle": + rC = self.C.fetch() + if len(rC) == 0: + rC = None + thermo = ThermoGLE(A=self.A.fetch(),C=rC) + thermo.s = self.s.fetch() + elif self.mode.fetch() == "nm_gle": + rC = self.C.fetch() + if len(rC) == 0: + rC = None + thermo = ThermoNMGLE(A=self.A.fetch(),C=rC) + thermo.s = self.s.fetch() + elif self.mode.fetch() == "nm_gle_g": + rC = self.C.fetch() + if len(rC) == 0: + rC = None + thermo = ThermoNMGLEG(A=self.A.fetch(),C=rC, tau=self.tau.fetch()) + thermo.s = self.s.fetch() + elif self.mode.fetch() == "" : + thermo=Thermostat() + else: + raise TypeError("Invalid thermostat mode " + self.mode.fetch()) + + thermo.ethermo = self.ethermo.fetch() + + return thermo + + def check(self): + """Checks that the parameter arrays represents a valid thermostat.""" + + super(InputThermo,self).check() + + if self.mode.fetch() in ["langevin", "svr", "pile_l", "pile_g", "nm_gle_g"]: + if self.tau.fetch() <= 0: + raise ValueError("The thermostat friction coefficient must be set to a positive value") + if self.mode.fetch() in ["gle", "nm_gle", "nm_gle_g"]: + pass # PERHAPS DO CHECKS THAT MATRICES SATISFY REASONABLE CONDITIONS (POSITIVE-DEFINITENESS, ETC) diff --git a/tools/i-pi/ipi/interfaces/README b/tools/i-pi/ipi/interfaces/README new file mode 100644 index 000000000..d5693d8f3 --- /dev/null +++ b/tools/i-pi/ipi/interfaces/README @@ -0,0 +1,8 @@ + -- Interfaces between i-PI and the drivers -- + + * This is the directory containing the code that deals with the socket + interface. + + * Files: + - sockets.py: Deals with the driver communication and the wrapper socket + and threading interface. diff --git a/tools/i-pi/ipi/interfaces/__init__.py b/tools/i-pi/ipi/interfaces/__init__.py new file mode 100644 index 000000000..68af0572b --- /dev/null +++ b/tools/i-pi/ipi/interfaces/__init__.py @@ -0,0 +1 @@ +__all__ = ["sockets"] diff --git a/tools/i-pi/ipi/interfaces/sockets.py b/tools/i-pi/ipi/interfaces/sockets.py new file mode 100644 index 000000000..998a87d11 --- /dev/null +++ b/tools/i-pi/ipi/interfaces/sockets.py @@ -0,0 +1,773 @@ +"""Deals with the socket communication between the PIMD and driver code. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Deals with creating the socket, transmitting and receiving data, accepting and +removing different driver routines and the parallelization of the force +calculation. + +Classes: + Status: Simple class to keep track of the status, uses bitwise or to give + combinations of different status options. + DriverSocket: Class to deal with communication between a client and + the driver code. + InterfaceSocket: Host server class. Deals with distribution of all the jobs + between the different client servers. + +Functions: + Message: Sends a header string through the socket. + +Exceptions: + Disconnected: Raised if client has been disconnected. + InvalidStatus: Raised if client has the wrong status. Shouldn't have to be + used if the structure of the program is correct. +""" + +__all__ = ['InterfaceSocket'] + +import numpy as np +import sys, os +import socket, select, threading, signal, string, time +from ipi.utils.depend import depstrip +from ipi.utils.messages import verbosity, warning, info +from ipi.utils.softexit import softexit + + +HDRLEN = 12 +UPDATEFREQ = 10 +TIMEOUT = 5.0 +SERVERTIMEOUT = 2.0*TIMEOUT +NTIMEOUT = 10 + +def Message(mystr): + """Returns a header of standard length HDRLEN.""" + + return string.ljust(string.upper(mystr), HDRLEN) + + +class Disconnected(Exception): + """Disconnected: Raised if client has been disconnected.""" + + pass + +class InvalidSize(Exception): + """Disconnected: Raised if client returns forces with inconsistent number of atoms.""" + + pass + +class InvalidStatus(Exception): + """InvalidStatus: Raised if client has the wrong status. + + Shouldn't have to be used if the structure of the program is correct. + """ + + pass + +class Status: + """Simple class used to keep track of the status of the client. + + Uses bitwise or to give combinations of different status options. + i.e. Status.Up | Status.Ready would be understood to mean that the client + was connected and ready to receive the position and cell data. + + Attributes: + Disconnected: Flag for if the client has disconnected. + Up: Flag for if the client is running. + Ready: Flag for if the client has ready to receive position and cell data. + NeedsInit: Flag for if the client is ready to receive forcefield + parameters. + HasData: Flag for if the client is ready to send force data. + Busy: Flag for if the client is busy. + Timeout: Flag for if the connection has timed out. + """ + + Disconnected = 0 + Up = 1 + Ready = 2 + NeedsInit = 4 + HasData = 8 + Busy = 16 + Timeout = 32 + + +class DriverSocket(socket.socket): + """Deals with communication between the client and driver code. + + Deals with sending and receiving the data from the driver code. Keeps track + of the status of the driver. Initialises the driver forcefield, sends the + position and cell data, and receives the force data. + + Attributes: + _buf: A string buffer to hold the reply from the driver. + status: Keeps track of the status of the driver. + lastreq: The ID of the last request processed by the client. + locked: Flag to mark if the client has been working consistently on one image. + """ + + def __init__(self, socket): + """Initialises DriverSocket. + + Args: + socket: A socket through which the communication should be done. + """ + + super(DriverSocket,self).__init__(_sock=socket) + self._buf = np.zeros(0,np.byte) + self.peername = self.getpeername() + self.status = Status.Up + self.waitstatus = False + self.lastreq = None + self.locked = False + + def shutdown(self, how=socket.SHUT_RDWR): + + self.sendall(Message("exit")) + self.status = Status.Disconnected + super(DriverSocket,self).shutdown(how) + + def poll(self): + """Waits for driver status.""" + + self.status = Status.Disconnected # sets disconnected as failsafe status, in case _getstatus fails and exceptions are ignored upstream + self.status = self._getstatus() + + def _getstatus(self): + """Gets driver status. + + Returns: + An integer labelling the status via bitwise or of the relevant members + of Status. + """ + + if not self.waitstatus: + try: + readable, writable, errored = select.select([], [self], []) + if self in writable: + self.sendall(Message("status")) + self.waitstatus = True + except: + return Status.Disconnected + + try: + reply = self.recv(HDRLEN) + self.waitstatus = False # got status reply + except socket.timeout: + warning(" @SOCKET: Timeout in status recv!", verbosity.debug ) + return Status.Up | Status.Busy | Status.Timeout + except: + return Status.Disconnected + + if not len(reply) == HDRLEN: + return Status.Disconnected + elif reply == Message("ready"): + return Status.Up | Status.Ready + elif reply == Message("needinit"): + return Status.Up | Status.NeedsInit + elif reply == Message("havedata"): + return Status.Up | Status.HasData + else: + warning(" @SOCKET: Unrecognized reply: " + str(reply), verbosity.low ) + return Status.Up + + def recvall(self, dest): + """Gets the potential energy, force and virial from the driver. + + Args: + dest: Object to be read into. + + Raises: + Disconnected: Raised if client is disconnected. + + Returns: + The data read from the socket to be read into dest. + """ + + blen = dest.itemsize*dest.size + if (blen > len(self._buf)): + self._buf.resize(blen) + bpos = 0 + ntimeout = 0 + + while bpos < blen: + timeout = False + +# pre-2.5 version. + try: + bpart = "" + bpart = self.recv(blen - bpos) + if len(bpart) == 0: raise socket.timeout # There is a problem if this returns no data + self._buf[bpos:bpos + len(bpart)] = np.fromstring(bpart, np.byte) + except socket.timeout: + warning(" @SOCKET: Timeout in status recvall, trying again!", verbosity.low) + timeout = True + ntimeout += 1 + if ntimeout > NTIMEOUT: + warning(" @SOCKET: Couldn't receive within %5d attempts. Time to give up!" % (NTIMEOUT), verbosity.low) + raise Disconnected() + pass + if (not timeout and bpart == 0): + raise Disconnected() + bpos += len(bpart) + +# post-2.5 version: slightly more compact for modern python versions +# try: +# bpart = 1 +# bpart = self.recv_into(self._buf[bpos:], blen-bpos) +# except socket.timeout: +# print " @SOCKET: Timeout in status recvall, trying again!" +# timeout = True +# pass +# if (not timeout and bpart == 0): +# raise Disconnected() +# bpos += bpart +#TODO this Disconnected() exception currently just causes the program to hang. +#This should do something more graceful + + if np.isscalar(dest): + return np.fromstring(self._buf[0:blen], dest.dtype)[0] + else: + return np.fromstring(self._buf[0:blen], dest.dtype).reshape(dest.shape) + + def initialize(self, rid, pars): + """Sends the initialisation string to the driver. + + Args: + rid: The index of the request, i.e. the replica that + the force calculation is for. + pars: The parameter string to be sent to the driver. + + Raises: + InvalidStatus: Raised if the status is not NeedsInit. + """ + + if self.status & Status.NeedsInit: + try: + self.sendall(Message("init")) + self.sendall(np.int32(rid)) + self.sendall(np.int32(len(pars))) + self.sendall(pars) + except: + self.poll() + return + else: + raise InvalidStatus("Status in init was " + self.status) + + def sendpos(self, pos, cell): + """Sends the position and cell data to the driver. + + Args: + pos: An array containing the atom positions. + cell: A cell object giving the system box. + + Raises: + InvalidStatus: Raised if the status is not Ready. + """ + + if (self.status & Status.Ready): + try: + self.sendall(Message("posdata")) + self.sendall(cell.h, 9*8) + self.sendall(cell.ih, 9*8) + self.sendall(np.int32(len(pos)/3)) + self.sendall(pos, len(pos)*8) + except: + self.poll() + return + else: + raise InvalidStatus("Status in sendpos was " + self.status) + + def getforce(self): + """Gets the potential energy, force and virial from the driver. + + Raises: + InvalidStatus: Raised if the status is not HasData. + Disconnected: Raised if the driver has disconnected. + + Returns: + A list of the form [potential, force, virial, extra]. + """ + + if (self.status & Status.HasData): + self.sendall(Message("getforce")); + reply = "" + while True: + try: + reply = self.recv(HDRLEN) + except socket.timeout: + warning(" @SOCKET: Timeout in getforce, trying again!", verbosity.low) + continue + if reply == Message("forceready"): + break + else: + warning(" @SOCKET: Unexpected getforce reply: %s" % (reply), verbosity.low) + if reply == "": + raise Disconnected() + else: + raise InvalidStatus("Status in getforce was " + self.status) + + mu = np.float64() + mu = self.recvall(mu) + + mlen = np.int32() + mlen = self.recvall(mlen) + mf = np.zeros(3*mlen,np.float64) + mf = self.recvall(mf) + + mvir = np.zeros((3,3),np.float64) + mvir = self.recvall(mvir) + + #! Machinery to return a string as an "extra" field. Comment if you are using a old patched driver that does not return anything! + mlen = np.int32() + mlen = self.recvall(mlen) + if mlen > 0 : + mxtra = np.zeros(mlen,np.character) + mxtra = self.recvall(mxtra) + mxtra = "".join(mxtra) + else: + mxtra = "" + + #!TODO must set up a machinery to intercept the "extra" return field + return [mu, mf, mvir, mxtra] + + +class InterfaceSocket(object): + """Host server class. + + Deals with distribution of all the jobs between the different client servers + and both initially and as clients either finish or are disconnected. + Deals with cleaning up after all calculations are done. Also deals with the + threading mechanism, and cleaning up if the interface is killed. + + Attributes: + address: A string giving the name of the host network. + port: An integer giving the port the socket will be using. + slots: An integer giving the maximum allowed backlog of queued clients. + mode: A string giving the type of socket used. + latency: A float giving the number of seconds the interface will wait + before updating the client list. + timeout: A float giving a timeout limit for considering a calculation dead + and dropping the connection. + dopbc: A boolean which decides whether or not to fold the bead positions + back into the unit cell before passing them to the client code. + server: The socket used for data transmition. + clients: A list of the driver clients connected to the server. + requests: A list of all the jobs required in the current PIMD step. + jobs: A list of all the jobs currently running. + _poll_thread: The thread the poll loop is running on. + _prev_kill: Holds the signals to be sent to clean up the main thread + when a kill signal is sent. + _poll_true: A boolean giving whether the thread is alive. + _poll_iter: An integer used to decide whether or not to check for + client connections. It is used as a counter, once it becomes higher + than the pre-defined number of steps between checks the socket will + update the list of clients and then be reset to zero. + """ + + def __init__(self, address="localhost", port=31415, slots=4, mode="unix", latency=1e-3, timeout=1.0, dopbc=True): + """Initialises interface. + + Args: + address: An optional string giving the name of the host server. + Defaults to 'localhost'. + port: An optional integer giving the port number. Defaults to 31415. + slots: An optional integer giving the maximum allowed backlog of + queueing clients. Defaults to 4. + mode: An optional string giving the type of socket. Defaults to 'unix'. + latency: An optional float giving the time in seconds the socket will + wait before updating the client list. Defaults to 1e-3. + timeout: Length of time waiting for data from a client before we assume + the connection is dead and disconnect the client. + dopbc: A boolean which decides whether or not to fold the bead positions + back into the unit cell before passing them to the client code. + + Raises: + NameError: Raised if mode is not 'unix' or 'inet'. + """ + + self.address = address + self.port = port + self.slots = slots + self.mode = mode + self.latency = latency + self.timeout = timeout + self.dopbc = dopbc + self._poll_thread = None + self._prev_kill = {} + self._poll_true = False + self._poll_iter = 0 + + def open(self): + """Creates a new socket. + + Used so that we can create a interface object without having to also + create the associated socket object. + """ + + if self.mode == "unix": + self.server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + try: + self.server.bind("/tmp/ipi_" + self.address) + info("Created unix socket with address " + self.address, verbosity.medium) + except: + raise ValueError("Error opening unix socket. Check if a file " + ("/tmp/ipi_" + self.address) + " exists, and remove it if unused.") + + elif self.mode == "inet": + self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.server.bind((self.address,self.port)) + info("Created inet socket with address " + self.address + " and port number " + str(self.port), verbosity.medium) + else: + raise NameError("InterfaceSocket mode " + self.mode + " is not implemented (should be unix/inet)") + + self.server.listen(self.slots) + self.server.settimeout(SERVERTIMEOUT) + self.clients = [] + self.requests = [] + self.jobs = [] + + def close(self): + """Closes down the socket.""" + + info(" @SOCKET: Shutting down the driver interface.", verbosity.low ) + + for c in self.clients[:]: + if (c.status & Status.Up): + c.shutdown(socket.SHUT_RDWR) + + self.server.shutdown(socket.SHUT_RDWR) + self.server.close() + if self.mode == "unix": + os.unlink("/tmp/ipi_" + self.address) + + def queue(self, atoms, cell, pars=None, reqid=0): + """Adds a request. + + Note that the pars dictionary need to be sent as a string of a + standard format so that the initialisation of the driver can be done. + + Args: + atoms: An Atoms object giving the atom positions. + cell: A Cell object giving the system box. + pars: An optional dictionary giving the parameters to be sent to the + driver for initialisation. Defaults to {}. + reqid: An optional integer that identifies requests of the same type, + e.g. the bead index + + Returns: + A list giving the status of the request of the form {'atoms': Atoms + object giving the atom positions, 'cell': Cell object giving the + system box, 'pars': parameter string, 'result': holds the result as a + list once the computation is done, 'status': a string labelling the + status, 'id': the id of the request, usually the bead number, 'start': + the starting time for the calculation, used to check for timeouts.}. + """ + + par_str = " " + + if not pars is None: + for k,v in pars.items(): + par_str += k + " : " + str(v) + " , " + else: + par_str = " " + + # APPLY PBC -- this is useful for codes such as LAMMPS that don't do full PBC when computing distances + pbcpos = depstrip(atoms.q).copy() + if self.dopbc: + cell.array_pbc(pbcpos) + + newreq = {"pos": pbcpos, "cell": cell, "pars": par_str, + "result": None, "status": "Queued", "id": reqid, + "start": -1 } + + self.requests.append(newreq) + return newreq + + def release(self, request): + """Empties the list of requests once finished. + + Args: + request: A list of requests that are done. + """ + + if request in self.requests: + self.requests.remove(request) + + def pool_update(self): + """Deals with keeping the pool of client drivers up-to-date during a + force calculation step. + + Deals with maintaining the client list. Clients that have + disconnected are removed and their jobs removed from the list of + running jobs and new clients are connected to the server. + """ + + for c in self.clients[:]: + if not (c.status & Status.Up): + try: + warning(" @SOCKET: Client " + str(c.peername) +" died or got unresponsive(C). Removing from the list.", verbosity.low) + c.shutdown(socket.SHUT_RDWR) + c.close() + except: + pass + c.status = Status.Disconnected + self.clients.remove(c) + for [k,j] in self.jobs[:]: + if j is c: + self.jobs = [ w for w in self.jobs if not ( w[0] is k and w[1] is j ) ] # removes pair in a robust way + #self.jobs.remove([k,j]) + k["status"] = "Queued" + k["start"] = -1 + + keepsearch = True + while keepsearch: + readable, writable, errored = select.select([self.server], [], [], 0.0) + if self.server in readable: + client, address = self.server.accept() + client.settimeout(TIMEOUT) + driver = DriverSocket(client) + info(" @SOCKET: Client asked for connection from "+ str( address ) +". Now hand-shaking.", verbosity.low) + driver.poll() + if (driver.status | Status.Up): + self.clients.append(driver) + info(" @SOCKET: Handshaking was successful. Added to the client list.", verbosity.low) + else: + warning(" @SOCKET: Handshaking failed. Dropping connection.", verbosity.low) + client.shutdown(socket.SHUT_RDWR) + client.close() + else: + keepsearch = False + + def pool_distribute(self): + """Deals with keeping the list of jobs up-to-date during a force + calculation step. + + Deals with maintaining the jobs list. Gets data from drivers that have + finished their calculation and removes that job from the list of running + jobs, adds jobs to free clients and initialises the forcefields of new + clients. + """ + + for c in self.clients: + if c.status == Status.Disconnected : # client disconnected. force a pool_update + self._poll_iter = UPDATEFREQ + return + if not c.status & ( Status.Ready | Status.NeedsInit ): + c.poll() + + for [r,c] in self.jobs[:]: + if c.status & Status.HasData: + try: + r["result"] = c.getforce() + if len(r["result"][1]) != len(r["pos"]): + raise InvalidSize + except Disconnected: + c.status = Status.Disconnected + continue + except InvalidSize: + warning(" @SOCKET: Client returned an inconsistent number of forces. Will mark as disconnected and try to carry on.", verbosity.low) + c.status = Status.Disconnected + continue + except: + warning(" @SOCKET: Client got in a awkward state during getforce. Will mark as disconnected and try to carry on.", verbosity.low) + c.status = Status.Disconnected + continue + c.poll() + while c.status & Status.Busy: # waits, but check if we got stuck. + if self.timeout > 0 and r["start"] > 0 and time.time() - r["start"] > self.timeout: + warning(" @SOCKET: Timeout! HASDATA for bead " + str(r["id"]) + " has been running for " + str(time.time() - r["start"]) + " sec.", verbosity.low) + warning(" @SOCKET: Client " + str(c.peername) + " died or got unresponsive(A). Disconnecting.", verbosity.low) + try: + c.shutdown(socket.SHUT_RDWR) + except: + pass + c.close() + c.status = Status.Disconnected + continue + c.poll() + if not (c.status & Status.Up): + warning(" @SOCKET: Client died a horrible death while getting forces. Will try to cleanup.", verbosity.low) + continue + r["status"] = "Done" + c.lastreq = r["id"] # saves the ID of the request that the client has just processed + self.jobs = [ w for w in self.jobs if not ( w[0] is r and w[1] is c ) ] # removes pair in a robust way + + if self.timeout > 0 and c.status != Status.Disconnected and r["start"] > 0 and time.time() - r["start"] > self.timeout: + warning(" @SOCKET: Timeout! Request for bead " + str( r["id"]) + " has been running for " + str(time.time() - r["start"]) + " sec.", verbosity.low) + warning(" @SOCKET: Client " + str(c.peername) + " died or got unresponsive(B). Disconnecting.",verbosity.low) + try: + c.shutdown(socket.SHUT_RDWR) + except socket.error: + e = sys.exc_info() + warning(" @SOCKET: could not shut down cleanly the socket. %s: %s in file '%s' on line %d" % (e[0].__name__, e[1], os.path.basename(e[2].tb_frame.f_code.co_filename), e[2].tb_lineno), verbosity.low ) + c.close() + c.poll() + c.status = Status.Disconnected + + freec = self.clients[:] + for [r2, c] in self.jobs: + freec.remove(c) + + pendr = self.requests[:] + pendr = [ r for r in self.requests if r["status"] == "Queued" ] + + for fc in freec[:]: + matched = False + # first, makes sure that the client is REALLY free + if not (fc.status & Status.Up): + self.clients.remove(fc) # if fc is in freec it can't be associated with a job (we just checked for that above) + continue + if fc.status & Status.HasData: + continue + if not (fc.status & (Status.Ready | Status.NeedsInit | Status.Busy) ): + warning(" @SOCKET: Client " + str(fc.peername) + " is in an unexpected status " + str(fc.status) + " at (1). Will try to keep calm and carry on.", verbosity.low) + continue + for match_ids in ( "match", "none", "free", "any" ): + for r in pendr[:]: + if match_ids == "match" and not fc.lastreq is r["id"]: + continue + elif match_ids == "none" and not fc.lastreq is None: + continue + elif match_ids == "free" and fc.locked: + continue + + info(" @SOCKET: Assigning [%5s] request id %4s to client with last-id %4s (% 3d/% 3d : %s)" % (match_ids, str(r["id"]), str(fc.lastreq), self.clients.index(fc), len(self.clients), str(fc.peername) ), verbosity.high ) + + while fc.status & Status.Busy: + fc.poll() + if fc.status & Status.NeedsInit: + fc.initialize(r["id"], r["pars"]) + fc.poll() + while fc.status & Status.Busy: # waits for initialization to finish. hopefully this is fast + fc.poll() + if fc.status & Status.Ready: + fc.sendpos(r["pos"], r["cell"]) + r["status"] = "Running" + r["start"] = time.time() # sets start time for the request + fc.poll() + self.jobs.append([r,fc]) + fc.locked = (fc.lastreq is r["id"]) + matched = True + # removes r from the list of pending jobs + pendr = [nr for nr in pendr if (not nr is r)] + break + else: + warning(" @SOCKET: Client " + str(fc.peername) + " is in an unexpected status " + str(fc.status) + " at (2). Will try to keep calm and carry on.", verbosity.low) + if matched: + break # doesn't do a second (or third) round if it managed + # to assign the job + + def _kill_handler(self, signal, frame): + """Deals with handling a kill call gracefully. + + Prevents any of the threads becoming zombies, by intercepting a + kill signal using the standard python function signal.signal() and + then closing the socket and the spawned threads before closing the main + thread. Called when signals SIG_INT and SIG_TERM are received. + + Args: + signal: An integer giving the signal number of the signal received + from the socket. + frame: Current stack frame. + """ + + warning(" @SOCKET: Kill signal. Trying to make a clean exit.", verbosity.low) + self.end_thread() + + softexit.trigger(" @SOCKET: Kill signal received") + + try: + self.__del__() + except: + pass + if signal in self._prev_kill: + self._prev_kill[signal](signal, frame) + + def _poll_loop(self): + """The main thread loop. + + Runs until either the program finishes or a kill call is sent. Updates + the pool of clients every UPDATEFREQ loops and loops every latency + seconds until _poll_true becomes false. + """ + + info(" @SOCKET: Starting the polling thread main loop.", verbosity.low) + self._poll_iter = UPDATEFREQ + while self._poll_true: + time.sleep(self.latency) + # makes sure to remove the last dead client as soon as possible -- and to get clients if we are dry + if self._poll_iter >= UPDATEFREQ or len(self.clients)==0 or (len(self.clients) > 0 and not(self.clients[0].status & Status.Up)): + self.pool_update() + self._poll_iter = 0 + self._poll_iter += 1 + self.pool_distribute() + + if os.path.exists("EXIT"): # softexit + info(" @SOCKET: Soft exit request from file EXIT. Flushing job queue.", verbosity.low) + # releases all pending requests + for r in self.requests: + r["status"] = "Exit" + for c in self.clients: + try: + c.shutdown(socket.SHUT_RDWR) + c.close() + except: + pass + # flush it all down the drain + self.clients = [] + self.jobs = [] + self._poll_thread = None + + def started(self): + """Returns a boolean specifying whether the thread has started yet.""" + + return (not self._poll_thread is None) + + def start_thread(self): + """Spawns a new thread. + + Splits the main program into two threads, one that runs the polling loop + which updates the client list, and one which gets the data. Also sets up + the machinery to deal with a kill call, in the case of a Ctrl-C or + similar signal the signal is intercepted by the _kill_handler function, + which cleans up the spawned thread before closing the main thread. + + Raises: + NameError: Raised if the polling thread already exists. + """ + + self.open() + if not self._poll_thread is None: + raise NameError("Polling thread already started") + self._poll_thread = threading.Thread(target=self._poll_loop, name="poll_" + self.address) + self._poll_thread.daemon = True + self._prev_kill[signal.SIGINT] = signal.signal(signal.SIGINT, self._kill_handler) + self._prev_kill[signal.SIGTERM] = signal.signal(signal.SIGTERM, self._kill_handler) + self._poll_true = True + self._poll_thread.start() + + def end_thread(self): + """Closes the spawned thread. + + Deals with cleaning up the spawned thread cleanly. First sets + _poll_true to false to indicate that the poll_loop should be exited, then + closes the spawned thread and removes it. + """ + + self._poll_true = False + if not self._poll_thread is None: + self._poll_thread.join() + self._poll_thread = None + self.close() diff --git a/tools/i-pi/ipi/tests/README b/tools/i-pi/ipi/tests/README new file mode 100644 index 000000000..17df9d7a7 --- /dev/null +++ b/tools/i-pi/ipi/tests/README @@ -0,0 +1,9 @@ + -- Nosetests directory -- + + * This is the directory containing the tests that can be run with nosetests. + + * Files: + - common.py: Common helper funtions for use in the tests. + - datest.py: Tests the dependency utility and some of the numpy + facilities. + - test_*.py: The actual tests for at least some of the code basis. diff --git a/tools/i-pi/ipi/tests/common.py b/tools/i-pi/ipi/tests/common.py new file mode 100644 index 000000000..3ffea431a --- /dev/null +++ b/tools/i-pi/ipi/tests/common.py @@ -0,0 +1,96 @@ +"""Common helper functions for running the tests. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Functions: + local: Returns local folder of the tests directory. + +Classes: + TestSimulation: Can be used to test that a particular simulation + will run properly, given an input file and a driver code. +""" + +import glob +import os +import subprocess +import shutil +import tempfile + +def local(file=None): + """Returns local folder of the tests directory. + + Args: + - file: Append file to the local folder + """ + if file: + return os.sep.join(__file__.split(os.sep)[:-1]+[file]) + else: + return os.sep.join(__file__.split(os.sep)[:-1]) + +class TestSimulation(object): + """Simple class used to test various aspects of the simulation. + + Can be used to run an example given the location of an xml + input file and the location of a suitable driver code. + + Attributes: + finput: The name of the xml input file + folder_input: A string giving the directory the input file is held in. + fdriver: The location of a driver code. + cwd: Current working directory. + tmpdir: A temporary directory to run the simulation in. + """ + + def __init__(self, input, driver): + """Initializes TestSimulation. + + Args: + input: The name of the xml input file. + driver: The location of the driver code. + """ + + self.finput = input + self.folder_input = os.sep.join(input.split(os.sep)[:-1]) + self.fdriver = driver + self.cwd = os.getcwd() + self.tmpdir = tempfile.mkdtemp() + + # Copy needed files to tmpdir + for src in glob.glob("%s/*"%self.folder_input): + shutil.copy(src, self.tmpdir) + + os.chdir(self.tmpdir) + + def __del__(self): + """Cleans the temporary directory once the simulation is over.""" + + os.chdir(self.cwd) + shutil.rmtree(self.tmpdir) + + def run(self): + """Runs the simulation.""" + + # Run driver + p = subprocess.Popen("echo running %s"%self.fdriver, shell=True) + + # Start simulation + # TODO + print subprocess.check_output("ls", shell=True) + print subprocess.check_output("pwd", shell=True) + + # wait for driver to finish + p.wait() diff --git a/tools/i-pi/ipi/tests/datest.py b/tools/i-pi/ipi/tests/datest.py new file mode 100644 index 000000000..aa608691e --- /dev/null +++ b/tools/i-pi/ipi/tests/datest.py @@ -0,0 +1,56 @@ +"""Short test scripts. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Used to test the depend array view mechanism. +""" + +import sys +sys.path.append("../") +sys.path.append("../../") + +import utils.depend as dp +import numpy as np + +print "## Creation test" +a = dp.depend_array(name="a",value=np.zeros((2,2),float)) +b = dp.depend_array(name="b",value=np.zeros((2,2),float)) + +print "## Slicing test" +c = a[0] +print type(c) + +print "## Addition test" +c = a + b +print type(c) + +print "## Increment test" +c = np.zeros((2,2)) +c += a +print type(c) + +print "## Dot test" +c = np.dot(a,b) +print type(c) + +rdot = np.dot +def fdot(a,b): + return rdot(a,b).view(np.ndarray) +#np.dot=fdot + +print "## Dot-f test" +c = np.dot(a,b) diff --git a/tools/i-pi/ipi/tests/test.pos_0.pdb b/tools/i-pi/ipi/tests/test.pos_0.pdb new file mode 100644 index 000000000..426c47019 --- /dev/null +++ b/tools/i-pi/ipi/tests/test.pos_0.pdb @@ -0,0 +1,10 @@ +CRYST1 1.000 1.000 1.000 90.00 90.00 90.00 P 1 1 +ATOM 1 O 1 1 0.000 1.000 2.000 0.00 0.00 0 +ATOM 2 H 1 1 3.000 4.000 5.000 0.00 0.00 0 +ATOM 3 H 1 1 6.000 7.000 8.000 0.00 0.00 0 +END +CRYST1 1.000 1.000 1.000 90.00 90.00 90.00 P 1 1 +ATOM 1 O 1 1 0.000 2.000 4.000 0.00 0.00 0 +ATOM 2 H 1 1 6.000 8.000 10.000 0.00 0.00 0 +ATOM 3 H 1 1 12.000 14.000 16.000 0.00 0.00 0 +END diff --git a/tools/i-pi/ipi/tests/test.pos_0.xyz b/tools/i-pi/ipi/tests/test.pos_0.xyz new file mode 100644 index 000000000..05ae14da5 --- /dev/null +++ b/tools/i-pi/ipi/tests/test.pos_0.xyz @@ -0,0 +1,10 @@ +3 +# CELL(abcABC): 1.00000 1.00000 1.00000 90.00000 90.00000 90.00000 + O 0.00000e+00 1.00000e+00 2.00000e+00 + H 3.00000e+00 4.00000e+00 5.00000e+00 + H 6.00000e+00 7.00000e+00 8.00000e+00 +3 +# CELL(abcABC): 1.00000 1.00000 1.00000 90.00000 90.00000 90.00000 + O 0.00000e+00 2.00000e+00 4.00000e+00 + H 6.00000e+00 8.00000e+00 1.00000e+01 + H 1.20000e+01 1.40000e+01 1.60000e+01 diff --git a/tools/i-pi/ipi/tests/test_contraction.py b/tools/i-pi/ipi/tests/test_contraction.py new file mode 100644 index 000000000..ad9556fbe --- /dev/null +++ b/tools/i-pi/ipi/tests/test_contraction.py @@ -0,0 +1,127 @@ +"""Tests ring polymer contraction. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import sys +sys.path.append("../") +sys.path.append("../../") + +from ipi.utils import nmtransform +import numpy as np +from numpy.testing import assert_almost_equal as assert_equals + +def check_up_and_down_scaling(n, q): + """Check if q expanding and then contracting a ring polymer is a no-op. + + Args: + n: The number of beads in the scaled ring polymer. + q: The original position array. + """ + + rescale = nmtransform.nm_rescale(q.shape[0], n) + print "Initial position of the beads:" + print q, q.shape, (q.shape[0], n) + + # rescale up to the n beads + beads_n = rescale.b1tob2(q) + print "Upscaled to %d beads:"%n + print beads_n, beads_n.shape + + beads_final = rescale.b2tob1(beads_n) + print "Final position of the beads:" + print beads_final + + assert_equals(q, beads_final) + return beads_n + +def check_rpc_consistency(n, q): + """Check if q expanding and then contracting a ring polymer is a no-op. + + Args: + n: The number of beads in the scaled ring polymer. + q: The original position array. + """ + + rescale1 = nmtransform.nm_rescale(q.shape[0], n) + rescale2 = nmtransform.nm_rescale(n,q.shape[0]) + + beads_n=rescale1.b1tob2(q) + beads_1=rescale1.b2tob1(beads_n) + beads_2=rescale2.b1tob2(beads_n) + + assert_equals(beads_1, beads_2) + +def check_centroid_pos(n, q): + """Check if expanding and then contracting a ring polymer + maintains the centroid. + + Args: + n: The number of beads in the scaled ring polymer. + q: The original position array. + """ + + beads_big = check_up_and_down_scaling(n, q) + rescale_big = nmtransform.mk_rs_matrix(n, 1) + rescale_q = nmtransform.mk_rs_matrix(q.shape[0], 1) + + centroid_big = np.dot(rescale_big, beads_big) + centroid_q = np.dot(rescale_q, q) + + assert_equals(centroid_q, centroid_big) + +numbers_to_check = range(10, 56, 9) +def test_1_to_n(): + """One bead tests.""" + + for n in numbers_to_check: + q = np.array([[0.0,0.0,0.0, 1.0,0.0,0.0]]) + yield check_up_and_down_scaling, n, q + yield check_rpc_consistency, n, q + yield check_centroid_pos, n, q + +def test_2_to_n(): + """Two bead tests.""" + + for n in numbers_to_check: + q = np.array([[0.0,0.0,0.0, 1.0,0.0,0.0], + [0.0,0.1,0.0, 1.0,0.1,0.0]]) + yield check_up_and_down_scaling, n, q + yield check_rpc_consistency, n, q + yield check_centroid_pos, n, q + +def test_3_to_n(): + """Three bead tests.""" + + for n in numbers_to_check: + q = np.array([[0.0, 0.0,0.0, 1.0, 0.0,0.0], + [0.0, 0.1,0.0, 1.0, 0.1,0.0], + [0.0,-0.1,0.0, 1.0,-0.1,0.0]]) + yield check_up_and_down_scaling, n, q + yield check_rpc_consistency, n, q + yield check_centroid_pos, n, q + +def test_4_to_n(): + """Four bead tests.""" + + for n in numbers_to_check: + q = np.array([[0.0, 0.0,0.0, 1.0, 0.0,0.0], + [0.0, 0.1,0.0, 1.0, 0.1,0.0], + [0.0, 0.2,0.0, 1.0, 0.2,0.0], + [0.0,-0.1,0.0, 1.0,-0.1,0.0]]) + yield check_up_and_down_scaling, n, q + yield check_rpc_consistency, n, q + yield check_centroid_pos, n, q diff --git a/tools/i-pi/ipi/tests/test_io.py b/tools/i-pi/ipi/tests/test_io.py new file mode 100644 index 000000000..53fad808f --- /dev/null +++ b/tools/i-pi/ipi/tests/test_io.py @@ -0,0 +1,96 @@ +"""Deals with testing the io system. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Note that this will only run if you have Python version 2.5 or later. +Otherwise, replace all the with statements with f = filestream. +""" + +import sys +sys.path.append("../") +sys.path.append("../../") + +import filecmp +import os, sys +import numpy as np +from numpy.testing import assert_equal +from common import local + +from ipi.engine.cell import Cell + +from ipi.utils.io import io_xyz +from ipi.utils.io import io_pdb + +pos = np.array([i for i in range(3*3)]) + +def test_read_xyz(): + """Tests that xyz files are read correctly.""" + + with open(local("test.pos_0.xyz"), "r") as f: + atoms = io_xyz.read_xyz(f) + assert(len(atoms) == 3) + assert_equal(pos, atoms.q) + +def test_iter_xyz(): + """Tests that xyz files with multiple frames are read correctly.""" + + with open(local("test.pos_0.xyz"), "r") as f: + for num, atoms in enumerate(io_xyz.iter_xyz(f)): + assert(len(atoms) == 3) + assert_equal(pos*(num+1), atoms.q) + +def test_read_pdb(): + """Tests that pdb files are read correctly.""" + + with open(local("test.pos_0.pdb"), "r") as f: + atoms, cell = io_pdb.read_pdb(f) + assert(len(atoms) == 3) + assert_equal(pos, atoms.q) + # TODO: test cell + +def test_iter_pdb(): + """Tests that pdb files with multiple frames are read correctly.""" + + with open(local("test.pos_0.pdb"), "r") as f: + for num, (atoms, cell) in enumerate(io_pdb.iter_pdb(f)): + assert(len(atoms) == 3) + assert_equal(pos*(num+1), atoms.q) + +def test_print_pdb(): + """Tests that pdb files are printed correctly.""" + + with open(local("test.pos_0.pdb"), "r") as f: + with open(local("test.pos_1.xyz"), "w") as out: + for num, (atoms, cell) in enumerate(io_pdb.iter_pdb(f)): + assert(len(atoms) == 3) + assert_equal(pos*(num+1), atoms.q) + io_xyz.print_xyz(atoms, Cell(h=np.identity(3, float)), filedesc=out) + + assert(filecmp.cmp(local("test.pos_0.xyz"), local("test.pos_1.xyz"))) + os.unlink(local("test.pos_1.xyz")) + +def test_print_xyz(): + """Tests that xyz files are printed correctly.""" + + with open(local("test.pos_0.pdb"), "r") as f: + with open(local("test.pos_1.pdb"), "w") as out: + for num, (atoms, cell) in enumerate(io_pdb.iter_pdb(f)): + assert(len(atoms) == 3) + assert_equal(pos*(num+1), atoms.q) + io_pdb.print_pdb(atoms, Cell(h=np.identity(3, float)), filedesc=out) + + assert(filecmp.cmp(local("test.pos_0.pdb"), local("test.pos_1.pdb"))) + os.unlink(local("test.pos_1.pdb")) diff --git a/tools/i-pi/ipi/tests/test_runs.py b/tools/i-pi/ipi/tests/test_runs.py new file mode 100644 index 000000000..940f2c9ed --- /dev/null +++ b/tools/i-pi/ipi/tests/test_runs.py @@ -0,0 +1,24 @@ +"""Tests that the Lennard-Jones test case works properly. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from common import TestSimulation + +def test_lj_gas(): + ts = TestSimulation(input="../../test/lj/gas/input.xml", driver="../../drivers/driver.x") + ts.run() + # Test properties (e.g. latest positions/temperature etc) diff --git a/tools/i-pi/ipi/utils/README b/tools/i-pi/ipi/utils/README new file mode 100644 index 000000000..edc629f08 --- /dev/null +++ b/tools/i-pi/ipi/utils/README @@ -0,0 +1,21 @@ + -- Utility functions directory -- + + * This is the directory containing functions that are used in the other + modules in the code. + + * Files: + - depend.py: Deals with the dependency detection, value caching and + automatic updating of variables. + - inputvalue.py: Contains the base classes used in reading the xml + input file, and creating the restart file. + - mathtools.py: Contains the algorithms used in various parts of the code. + - messages.py: Contains the classes to generate info and warning messages + to standard output during the simulation. + - nmtransform.py: Contains the algorithms that deal with the normal mode + and ring polymer contraction transformations. + - prng.py: Deals with random number generation. + - softexit: Contains the classes to deal with calls for a soft exit. + - units.py: Holds atomic masses, fundamental constants, and unit conversions. + + * Directories: + - io: Holds the modules that deal with reading and outputting files. diff --git a/tools/i-pi/ipi/utils/__init__.py b/tools/i-pi/ipi/utils/__init__.py new file mode 100644 index 000000000..6fa5c8e00 --- /dev/null +++ b/tools/i-pi/ipi/utils/__init__.py @@ -0,0 +1 @@ +__all__ = ["depend", "units", "mathtools", "prng" , "inputvalue", 'nmtransform', 'messages', 'softexit'] diff --git a/tools/i-pi/ipi/utils/depend.py b/tools/i-pi/ipi/utils/depend.py new file mode 100644 index 000000000..1ca361f78 --- /dev/null +++ b/tools/i-pi/ipi/utils/depend.py @@ -0,0 +1,768 @@ +"""Contains the classes that are used to define the dependency network. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +The classes defined in this module overload the standard __get__ and __set__ +routines of the numpy ndarray class and standard library object class so that +they automatically keep track of whether anything they depend on has been +altered, and so only recalculate their value when necessary. + +Basic quantities that depend on nothing else can be manually altered in the +usual way, all other quantities are updated automatically and cannot be changed +directly. + +The exceptions to this are synchronized properties, which are in effect +multiple basic quantities all related to each other, for example the bead and +normal mode representations of the positions and momenta. In this case any of +the representations can be set manually, and all the other representations +must keep in step. + +For a more detailed discussion, see the reference manual. + +Classes: + depend_base: Base depend class with the generic methods and attributes. + depend_value: Depend class for scalar objects. + depend_array: Depend class for arrays. + synchronizer: Class that holds the different objects that are related to each + other and keeps track of which property has been set manually. + dobject: An extension of the standard library object that overloads + __getattribute__ and __setattribute__, so that we can use the + standard syntax for setting and getting the depend object, + i.e. foo = value, not foo.set(value). + +Functions: + dget: Gets the dependencies of a depend object. + dset: Sets the dependencies of a depend object. + depstrip: Used on a depend_array object, to access its value without + needing the depend machinery, and so much more quickly. Must not be used + if the value of the array is to be changed. + depcopy: Copies the dependencies from one object to another + deppipe: Used to make two objects be synchronized to the same value. +""" + +__all__ = ['depend_base', 'depend_value', 'depend_array', 'synchronizer', + 'dobject', 'dget', 'dset', 'depstrip', 'depcopy', 'deppipe'] + +import numpy as np +from ipi.utils.messages import verbosity, warning + +class synchronizer(object): + """Class to implement synched objects. + + Holds the objects used to keep two or more objects in step with each other. + This is shared between all the synched objects. + + Attributes: + synched: A dictionary containing all the synched objects, of the form + {"name": depend object}. + manual: A string containing the name of the object being manually changed. + """ + + def __init__(self, deps=None): + """Initialises synchronizer. + + Args: + deps: Optional dictionary giving the synched objects of the form + {"name": depend object}. + """ + + if deps is None: + self.synced = dict() + else: + self.synced = deps + + self.manual = None + + +#TODO put some error checks in the init to make sure that the object is initialized from consistent synchro and func states +class depend_base(object): + """Base class for dependency handling. + + Builds the majority of the machinery required for the different depend + objects. Contains functions to add and remove dependencies, the tainting + mechanism by which information about which objects have been updated is + passed around the dependency network, and the manual and automatic update + functions to check that depend objects with functions are not manually + updated and that synchronized objects are kept in step with the one manually + changed. + + Attributes: + _tainted: An array containing one boolean, which is True if one of the + dependencies has been changed since the last time the value was + cached. + _func: A function name giving the method of calculating the value, + if required. None otherwise. + _name: The name of the depend base object. + _synchro: A synchronizer object to deal with synched objects, if + required. None otherwise. + _dependants: A list containing all objects dependent on the self. + """ + + def __init__(self, name, synchro=None, func=None, dependants=None, dependencies=None, tainted=None): + """Initialises depend_base. + + An unusual initialisation routine, as it has to be able to deal with the + depend array mechanism for returning slices as new depend arrays. + + This is the reason for the penultimate if statement; it automatically + taints objects created from scratch but does nothing to slices which are + not tainted. + + Also, the last if statement makes sure that if a synchronized property is + sliced, this initialization routine does not automatically set it to the + manually updated property. + + Args: + name: A string giving the name of self. + tainted: An optional array containing one boolean which is True if one + of the dependencies has been changed. + func: An optional argument that can be specified either by a function + name, or for synchronized values a dictionary of the form + {"name": function name}; where "name" is one of the other + synched objects and function name is the name of a function to + get the object "name" from self. + synchro: An optional synchronizer object. + dependants: An optional list containing objects that depend on self. + dependencies: An optional list containing objects that self + depends upon. + """ + + self._dependants = [] + if tainted is None: + tainted = np.array([True],bool) + if dependants is None: + dependants = [] + if dependencies is None: + dependencies = [] + self._tainted = tainted + self._func = func + self._name = name + + self.add_synchro(synchro) + + for item in dependencies: + item.add_dependant(self, tainted) + + self._dependants = dependants + + # Don't taint self if the object is a primitive one. However, do propagate tainting to dependants if required. + if (tainted): + if self._func is None: + self.taint(taintme=False) + else: + self.taint(taintme=tainted) + + + def add_synchro(self, synchro=None): + """ Links depend object to a synchronizer. """ + + self._synchro = synchro + if not self._synchro is None and not self._name in self._synchro.synced: + self._synchro.synced[self._name] = self + self._synchro.manual = self._name + + + def add_dependant(self, newdep, tainted=True): + """Adds a dependant property. + + Args: + newdep: The depend object to be added to the dependency list. + tainted: A boolean that decides whether newdep should be tainted. + True by default. + """ + + self._dependants.append(newdep) + if tainted: + newdep.taint(taintme=True) + + def add_dependency(self, newdep, tainted=True): + """Adds a dependency. + + Args: + newdep: The depend object self now depends upon. + tainted: A boolean that decides whether self should + be tainted. True by default. + """ + + newdep._dependants.append(self) + if tainted: + self.taint(taintme=True) + + def taint(self,taintme=True): + """Recursively sets tainted flag on dependent objects. + + The main function dealing with the dependencies. Taints all objects + further down the dependency tree until either all objects have been + tainted, or it reaches only objects that have already been tainted. Note + that in the case of a dependency loop the initial setting of _tainted to + True prevents an infinite loop occuring. + + Also, in the case of a synchro object, the manually set quantity is not + tainted, as it is assumed that synchro objects only depend on each other. + + Args: + taintme: A boolean giving whether self should be tainted at the end. + True by default. + """ + + self._tainted[:] = True + for item in self._dependants: + if (not item._tainted[0]): + item.taint() + if not self._synchro is None: + for v in self._synchro.synced.values(): + if (not v._tainted[0]) and (not v is self): + v.taint(taintme=True) + self._tainted[:] = (taintme and (not self._name == self._synchro.manual)) + else: + self._tainted[:] = taintme + + def tainted(self): + """Returns tainted flag.""" + + return self._tainted[0] + + def update_auto(self): + """Automatic update routine. + + Updates the value when get has been called and self has been tainted. + """ + + if not self._synchro is None: + if (not self._name == self._synchro.manual): + self.set(self._func[self._synchro.manual](), manual=False) + else: + warning(self._name + " probably shouldn't be tainted (synchro)", verbosity.low) + elif not self._func is None: + self.set(self._func(), manual=False) + else: + warning(self._name + " probably shouldn't be tainted (value)", verbosity.low) + + def update_man(self): + """Manual update routine. + + Updates the value when the value has been manually set. Also raises an + exception if a calculated quantity has been manually set. Also starts the + tainting routine. + + Raises: + NameError: If a calculated quantity has been manually set. + """ + + if not self._synchro is None: + self._synchro.manual = self._name + for v in self._synchro.synced.values(): + v.taint(taintme=True) + self._tainted[:] = False + elif not self._func is None: + raise NameError("Cannot set manually the value of the automatically-computed property <" + self._name + ">") + else: + self.taint(taintme=False) + + def set(self, value, manual=False): + """Dummy setting routine.""" + + pass + + def get(self): + """Dummy getting routine.""" + + pass + +class depend_value(depend_base): + """Scalar class for dependency handling. + + Attributes: + _value: The value associated with self. + """ + + def __init__(self, name, value=None, synchro=None, func=None, dependants=None, dependencies=None, tainted=None): + """Initialises depend_value. + + Args: + name: A string giving the name of self. + value: The value of the object. Optional. + tainted: An optional array giving the tainted flag. Default is [True]. + func: An optional argument that can be specified either by a function + name, or for synchronized values a dictionary of the form + {"name": function name}; where "name" is one of the other + synched objects and function name is the name of a function to + get the object "name" from self. + synchro: An optional synchronizer object. + dependants: An optional list containing objects that depend on self. + dependencies: An optional list containing objects that self + depends upon. + """ + + self._value = value + super(depend_value,self).__init__(name, synchro, func, dependants, dependencies, tainted) + + def get(self): + """Returns value, after recalculating if necessary. + + Overwrites the standard method of getting value, so that value + is recalculated if tainted. + """ + + if self._tainted[0]: + self.update_auto() + self.taint(taintme=False) + + return self._value + + def __get__(self, instance, owner): + """Overwrites standard get function.""" + + return self.get() + + def set(self, value, manual=True): + """Alters value and taints dependencies. + + Overwrites the standard method of setting value, so that dependent + quantities are tainted, and so we check that computed quantities are not + manually updated. + """ + + self._value = value + self.taint(taintme=False) + if (manual): + self.update_man() + + def __set__(self, instance, value): + """Overwrites standard set function.""" + + self.set(value) + + +class depend_array(np.ndarray, depend_base): + """Array class for dependency handling. + + Differs from depend_value as arrays handle getting items in a different + way to scalar quantities, and as there needs to be support for slicing an + array. Initialisation is also done in a different way for ndarrays. + + Attributes: + _bval: The base deparray storage space. Equal to depstrip(self) unless + self is a slice. + """ + + def __new__(cls, value, name, synchro=None, func=None, dependants=None, dependencies=None, tainted=None, base=None): + """Creates a new array from a template. + + Called whenever a new instance of depend_array is created. Casts the + array base into an appropriate form before passing it to + __array_finalize__(). + + Args: + See __init__(). + """ + + obj = np.asarray(value).view(cls) + return obj + + def __init__(self, value, name, synchro=None, func=None, dependants=None, dependencies=None, tainted=None, base=None): + """Initialises depend_array. + + Note that this is only called when a new array is created by an + explicit constructor. + + Args: + name: A string giving the name of self. + value: The (numpy) array to serve as the memory base. + tainted: An optional array giving the tainted flag. Default is [True]. + func: An optional argument that can be specified either by a function + name, or for synchronized values a dictionary of the form + {"name": function name}; where "name" is one of the other + synched objects and function name is the name of a function to + get the object "name" from self. + synchro: An optional synchronizer object. + dependants: An optional list containing objects that depend on self. + dependencies: An optional list containing objects that self + depends upon. + """ + + super(depend_array,self).__init__(name, synchro, func, dependants, dependencies, tainted) + + if base is None: + self._bval = value + else: + self._bval = base + + def copy(self, order='C', maskna=None): + """Wrapper for numpy copy mechanism.""" + + # Sets a flag and hands control to the numpy copy + self._fcopy = True + return super(depend_array,self).copy(order) + + def __array_finalize__(self, obj): + """Deals with properly creating some arrays. + + In the case where a function acting on a depend array returns a ndarray, + this casts it into the correct form and gives it the + depend machinery for other methods to be able to act upon it. New + depend_arrays will next be passed to __init__ ()to be properly + initialized, but some ways of creating arrays do not call __new__() or + __init__(), so need to be initialized. + """ + + depend_base.__init__(self, name="") + + if type(obj) is depend_array: + # We are in a view cast or in new from template. Unfortunately + # there is no sure way to tell (or so it seems). Hence we need to + # handle special cases, and hope we are in a view cast otherwise. + if hasattr(obj,"_fcopy"): + del(obj._fcopy) # removes the "copy flag" + self._bval = depstrip(self) + else: + # Assumes we are in view cast, so copy over the attributes from the + # parent object. Typical case: when transpose is performed as a + # view. + super(depend_array,self).__init__(obj._name, obj._synchro, obj._func, obj._dependants, None, obj._tainted) + self._bval = obj._bval + else: + # Most likely we came here on the way to init. + # Just sets a defaults for safety + self._bval = depstrip(self) + + + def __array_prepare__(self, arr, context=None): + """Prepare output array for ufunc. + + Depending on the context we try to understand if we are doing an + in-place operation (in which case we want to keep the return value a + deparray) or we are generating a new array as a result of the ufunc. + In this case there is no way to know if dependencies should be copied, + so we strip and return a ndarray. + """ + + if context is None or len(context) < 2 or not type(context[0]) is np.ufunc: + # It is not clear what we should do. If in doubt, strip dependencies. + return np.ndarray.__array_prepare__(self.view(np.ndarray),arr.view(np.ndarray),context) + elif len(context[1]) > context[0].nin and context[0].nout > 0: + # We are being called by a ufunc with a output argument, which is being + # actually used. Most likely, something like an increment, + # so we pass on a deparray + return super(depend_array,self).__array_prepare__(arr,context) + else: + # Apparently we are generating a new array. + # We have no way of knowing its + # dependencies, so we'd better return a ndarray view! + return np.ndarray.__array_prepare__(self.view(np.ndarray),arr.view(np.ndarray),context) + + def __array_wrap__(self, arr, context=None): + """ Wraps up output array from ufunc. + + See docstring of __array_prepare__(). + """ + + if context is None or len(context) < 2 or not type(context[0]) is np.ufunc: + return np.ndarray.__array_wrap__(self.view(np.ndarray),arr.view(np.ndarray),context) + elif len(context[1]) > context[0].nin and context[0].nout > 0: + return super(depend_array,self).__array_wrap__(arr,context) + else: + return np.ndarray.__array_wrap__(self.view(np.ndarray),arr.view(np.ndarray),context) + + # whenever possible in compound operations just return a regular ndarray + __array_priority__ = -1.0 + + def reshape(self, newshape): + """Changes the shape of the base array. + + Args: + newshape: A tuple giving the desired shape of the new array. + + Returns: + A depend_array with the dimensions given by newshape. + """ + + return depend_array(depstrip(self).reshape(newshape), name=self._name, synchro=self._synchro, func=self._func, dependants=self._dependants, tainted=self._tainted, base=self._bval) + + def flatten(self): + """Makes the base array one dimensional. + + Returns: + A flattened array. + """ + + return self.reshape(self.size) + + @staticmethod + def __scalarindex(index, depth=1): + """Checks if an index points at a scalar value. + + Used so that looking up one item in an array returns a scalar, whereas + looking up a slice of the array returns a new array with the same + dependencies as the original, so that changing the slice also taints + the global array. + + Arguments: + index: the index to be checked. + depth: the rank of the array which is being accessed. Default value + is 1. + + Returns: + A logical stating whether a __get__ instruction based + on index would return a scalar. + """ + + if (np.isscalar(index) and depth <= 1): + return True + elif (isinstance(index, tuple) and len(index)==depth): + #if the index is a tuple check it does not contain slices + for i in index: + if not np.isscalar(i): return False + return True + return False + + def __getitem__(self,index): + """Returns value[index], after recalculating if necessary. + + Overwrites the standard method of getting value, so that value + is recalculated if tainted. Scalar slices are returned as an ndarray, + so without depend machinery. If you need a "scalar depend" which + behaves as a slice, just create a 1x1 matrix, e.g b=a(7,1:2) + + Args: + index: A slice variable giving the appropriate slice to be read. + """ + + if self._tainted[0]: + self.update_auto() + self.taint(taintme=False) + + if (self.__scalarindex(index, self.ndim)): + return depstrip(self)[index] + else: + return depend_array(depstrip(self)[index], name=self._name, synchro=self._synchro, func=self._func, dependants=self._dependants, tainted=self._tainted, base=self._bval) + + + def __getslice__(self,i,j): + """Overwrites standard get function.""" + + return self.__getitem__(slice(i,j,None)) + + def get(self): + """Alternative to standard get function.""" + + return self.__get__(slice(None,None,None)) + + def __get__(self, instance, owner): + """Overwrites standard get function.""" + + # It is worth duplicating this code that is also used in __getitem__ as this + # is called most of the time, and we avoid creating a load of copies pointing to the same depend_array + + if self._tainted[0]: + self.update_auto() + self.taint(taintme=False) + + return self + + def __setitem__(self,index,value,manual=True): + """Alters value[index] and taints dependencies. + + Overwrites the standard method of setting value, so that dependent + quantities are tainted, and so we check that computed quantities are not + manually updated. + + Args: + index: A slice variable giving the appropriate slice to be read. + value: The new value of the slice. + manual: Optional boolean giving whether the value has been changed + manually. True by default. + """ + + self.taint(taintme=False) + if manual: + depstrip(self)[index] = value + self.update_man() + elif index == slice(None,None,None): + self._bval[index] = value + else: + raise IndexError("Automatically computed arrays should span the whole parent") + + def __setslice__(self,i,j,value): + """Overwrites standard set function.""" + + return self.__setitem__(slice(i,j),value) + + def set(self, value, manual=True): + """Alterative to standard set function. + + Args: + See __setitem__(). + """ + + self.__setitem__(slice(None,None),value=value,manual=manual) + + def __set__(self, instance, value): + """Overwrites standard set function.""" + + self.__setitem__(slice(None,None),value=value) + + +# np.dot and other numpy.linalg functions have the nasty habit to +# view cast to generate the output. Since we don't want to pass on +# dependencies to the result of these functions, and we can't use +# the ufunc mechanism to demote the class type to ndarray, we must +# overwrite np.dot and other similar functions. +# BEGINS NUMPY FUNCTIONS OVERRIDE +# ** np.dot +__dp_dot = np.dot + +def dep_dot(da, db): + a=depstrip(da) + b=depstrip(db) + + return __dp_dot(da,db) + +np.dot = dep_dot +# ENDS NUMPY FUNCTIONS OVERRIDE + +def dget(obj,member): + """Takes an object and retrieves one of its attributes. + + Note that this is necessary as calling it in the standard way calls the + __get__() function of member. + + Args: + obj: A user defined class. + member: A string giving the name of an attribute of obj. + + Exceptions: + KeyError: If member is not an attribute of obj. + + Returns: + obj.member. + """ + + return obj.__dict__[member] + +def dset(obj,member,value,name=None): + """Takes an object and sets one of its attributes. + + Necessary for editing any depend object, and should be used for + initialising them as well, as often initialization occurs more than once, + with the second time effectively being an edit. + + Args: + obj: A user defined class. + member: A string giving the name of an attribute of obj. + value: The new value of member. + name: New name of member. + + Exceptions: + KeyError: If member is not an attribute of obj. + """ + + obj.__dict__[member] = value + if not name is None: + obj.__dict__[member]._name = name + +def depstrip(da): + """Removes dependencies from a depend_array. + + Takes a depend_array and returns its value as a ndarray, effectively + stripping the dependencies from the ndarray. This speeds up a lot of + calculations involving these arrays. Must only be used if the value of the + array is not going to be changed. + + Args: + deparray: A depend_array. + + Returns: + A ndarray with the same value as deparray. + """ + + if isinstance(da, depend_array): # only bother to strip dependencies if the array actually IS a depend_array + #if da._tainted[0]: + # print "!!! WARNING depstrip called on tainted array WARNING !!!!!" # I think we can safely assume that when we call depstrip the array has been cleared already but I am not 100% sure so better check - and in case raise the update + return da.view(np.ndarray) + else: + return da + +def deppipe(objfrom,memberfrom,objto,memberto): + """Synchronizes two depend objects. + + Takes two depend objects, and makes one of them depend on the other in such + a way that both keep the same value. Used for attributes such as temperature + that are used in many different modules, and so need different depend objects + in each, but which should all have the same value. + + Args: + objfrom: An object containing memberfrom. + memberfrom: The base depend object. + objto: An object containing memberto. + memberto: The depend object that should be equal to memberfrom. + """ + + dfrom = dget(objfrom,memberfrom) + dto = dget(objto,memberto) + dto._func = lambda : dfrom.get() + dto.add_dependency(dfrom) + +def depcopy(objfrom,memberfrom,objto,memberto): + """Copies the dependencies of one depend object to another. + + Args: + See deppipe. + """ + dfrom = dget(objfrom,memberfrom) + dto = dget(objto,memberto) + dto._dependants = dfrom._dependants + dto._synchro = dfrom._synchro + dto.add_synchro(dfrom._synchro) + dto._tainted = dfrom._tainted + dto._func = dfrom._func + if hasattr(dfrom,"_bval"): + dto._bval = dfrom._bval + + +class dobject(object): + """Class that allows standard notation to be used for depend objects.""" + + def __getattribute__(self, name): + """Overwrites standard __getattribute__(). + + This changes the standard __getattribute__() function of any class that + subclasses dobject such that depend objects are called with their own + __get__() function rather than the standard one. + """ + + value = object.__getattribute__(self, name) + if hasattr(value, '__get__'): + value = value.__get__(self, self.__class__) + return value + + def __setattr__(self, name, value): + """Overwrites standard __setattribute__(). + + This changes the standard __setattribute__() function of any class that + subclasses dobject such that depend objects are called with their own + __set__() function rather than the standard one. + """ + + try: + obj = object.__getattribute__(self, name) + except AttributeError: + pass + else: + if hasattr(obj, '__set__'): + return obj.__set__(self, value) + return object.__setattr__(self, name, value) diff --git a/tools/i-pi/ipi/utils/inputvalue.py b/tools/i-pi/ipi/utils/inputvalue.py new file mode 100644 index 000000000..d1bbc631f --- /dev/null +++ b/tools/i-pi/ipi/utils/inputvalue.py @@ -0,0 +1,968 @@ +"""Contains the classes that are used to write to and read from restart files. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +The classes defined in this module define the base functions which parse the +data in the restart files. Each restart object defined has a fields and an +attributes dictionary, which are filled with the tags and attributes that +are allowed to be present, along with their default values and data type. + +These are then filled with the data from the xml file when the program +is initialised, and are filled by the values calculated in the program which +are then output to the checkpoint file when a restart file is required. + +Also deals with checking for user input errors, of the form of misspelt tags, +bad data types, and failure to input required fields. + +Classes: + Input: Base input class. + InputAttribute: Input class for attribute data. + InputValue: Input class for scalar objects. + InputArray: Input class for arrays. + input_default: Class used to create mutable objects dynamically. +""" + +__all__ = ['Input', 'InputValue', 'InputAttribute', 'InputArray', 'input_default'] + +import numpy as np +from copy import copy +from ipi.utils.io.io_xml import * +from ipi.utils.units import unit_to_internal, unit_to_user + + + +class input_default(object): + """Contains information required to dynamically create objects + + Used so that we can define mutable default input values to various tags + without the usual trouble with having a class object that is also mutable, + namely that all members of that class share the same mutable object, so that + changing it for one instance of that class changes it for all others. It + does this by not holding the mutable default value, but instead the + information to create it, so that each instance of an input class can + have a separate instance of the default value. + + Attributes: + type: Either a class type or function call from which to create the + default object. + args: A tuple giving positional arguments to be passed to the function. + kwargs: A dictionary giving key word arguments to be passed to the + function. + """ + + def __init__(self, factory, args = None, kwargs = None): + """Initialises input_default. + + Args: + type: The class or function to be used to create the default object. + args: A tuple giving the arguments to be used to initialise + the default value. + kwargs: A dictionary giving the key word arguments to be used + to initialise the default value. + """ + + if args is None: + args = () + if kwargs is None: + kwargs = {} + # a default will be generated by factory(*args, **kwargs) + # *args unpacks the tuple, and is used for positional arguments + # **kwargs unpacks the dictionary, and is used for keyword arguments + self.factory = factory + self.args = args + self.kwargs = kwargs + + +class Input(object): + """Base class for input handling. + + Has the generic methods for dealing with the xml input file. Parses the input + data, outputs the output data, and deals with storing and returning the + data obtained during the simulation for the restart files. + + Attributes: + fields: A dictionary holding the possible tags contained within the + tags for this restart object, which are then turned into the objects + held by the object given by this restart object. The dictionary is + of the form: + {"tag name": ( Input_object, + {"default": default value, + "dtype": data type, + "options": list of available options, + "help": help string, + "dimension": dimensionality of data}), ... }. + dynamic: A dictionary holding the possible tags contained within the + tags for this restart object, which are then turned into the objects + held by the object given by this restart object. These are used for + tags that can be specified more than once. + The dictionary is of the form: + {"tag name": ( Input_object, + {"default": default value, + "dtype": data type, + "options": list of available options, + "help": help string, + "dimension": dimensionality of data}), ... }. + attribs: A dictionary holding the attribute data for the tag for this + restart object. The dictionary is of the form: + {"attribute name": ( Input_object, + {"default": default value, + "dtype": data type, + "options": list of available options, + "help": help string, + "dimension": dimensionality of data}), ... }. + extra: A list of tuples ( "name", Input_object ) that may be used to + extend the capabilities of the class, i.e. to hold several instances of + a field with the same name, or to hold variable numbers of elements. + default_help: The default help string. + _help: The help string of the object. Defaults to default_help. + _default: Optional default value. + _optional: A bool giving whether the field is a required field. + _explicit: A bool giving whether the field has been specified by the user. + _text: All text written between the tags of the object. + _label: A label to be used to identify the class in the latex user manual. + _defwrite: The string which would be output if the class has its default + value. + """ + + fields = {} + attribs = {} + dynamic = {} + + default_help = "Generic input value" + default_label = "" #used as a way to reference a particular class using + #hyperlinks + + def __init__(self, help=None, default=None): + """Initialises Input. + + Automatically adds all the fields and attribs names to the input object's + dictionary, then initialises all the appropriate input objects + as the corresponding values. + + Args: + help: A help string. + default: A default value. + """ + + # list of extended (dynamic) fields + self.extra = [] + + if help is None: + self._help = self.default_help + else: + self._help = help + + if isinstance(default,input_default): + #creates default dynamically if a suitable template is defined. + self._default = default.factory(*default.args, **default.kwargs) + else: + self._default = default + + self._optional = not (self._default is None) + + self._label = self.default_label + + #For each tag name in the fields and attribs dictionaries, + #creates and object of the type given, expanding the dictionary to give + #the arguments of the __init__() function, then adds it to the input + #object's dictionary. + for f, v in self.fields.iteritems(): + self.__dict__[f] = v[0](**v[1]) + + for a, v in self.attribs.iteritems(): + self.__dict__[a] = v[0](**v[1]) + + self.set_default() + + self._text = "" + + # stores what we would write out if the default was set + self._defwrite = "" + if not self._default is None: + self._defwrite = self.write(name="%%NAME%%") + + def set_default(self): + """Sets the default value of the object.""" + + if not self._default is None: + self.store(self._default) + elif not hasattr(self, 'value'): + self.value = None #Makes sure we don't get exceptions when we + #look for self.value + + self._explicit = False #Since the value was not set by the user + + def store(self, value=None): + """Dummy function for storing data.""" + + self._explicit = True + pass + + def fetch(self): + """Dummy function to retrieve data.""" + + self.check() + pass + + def check(self): + """Base function to check for input errors. + + Raises: + ValueError: Raised if the user does not specify a required field. + """ + + if not (self._explicit or self._optional): + raise ValueError("Uninitialized Input value of type " + type(self).__name__) + + def extend(self, name, xml): + """ Dynamically add elements to the 'extra' list. + + Picks from one of the templates in the self.dynamic dictionary, then + parses. + + Args: + name: The tag name of the dynamically stored tag. + xml: The xml_node object used to parse the data stored in the tags. + """ + + newfield = self.dynamic[name][0](**self.dynamic[name][1]) + newfield.parse(xml) + self.extra.append((name,newfield)) + + def write(self, name="", indent="", text="\n"): + """Writes data in xml file format. + + Writes the tag, attributes, data and closing tag appropriate to the + particular fields and attribs data. Writes in a recursive manner, so + that objects contained in the fields dictionary have their write function + called, so that their tags are written between the start and end tags + of this object, as is required for the xml format. + + This also adds an indent to the lower levels of the xml heirarchy, + so that it is easy to see which tags contain other tags. + + Args: + name: An optional string giving the tag name. Defaults to "". + indent: An optional string giving the string to be added to the start + of the line, so usually a number of tabs. Defaults to "". + text: Additional text to be output between the tags. + + Returns: + A string giving all the data contained in the fields and attribs + dictionaries, in the appropriate xml format. + """ + + rstr = indent + "<" + name; + for a in self.attribs: + # only write out attributes that are not defaults + # have a very simple way to check whether they actually add something: + # we compare with the string that would be output if the argument was set + # to its default + defstr = self.__dict__[a]._defwrite.replace("%%NAME%%",a) + outstr = self.__dict__[a].write(name=a) + if outstr != defstr: + rstr += " " + outstr + rstr += ">" + rstr += text + for f in self.fields: + #only write out fields that are not defaults + + defstr = self.__dict__[f]._defwrite.replace("%%NAME%%",f) + if defstr != self.__dict__[f].write(f): # here we must compute the write string twice not to be confused by indents. + rstr += self.__dict__[f].write(f, " " + indent) + + for (f,v) in self.extra: + # also write out extended (dynamic) fields if present + rstr += v.write(f, " " + indent) + + if text.find('\n') >= 0: + rstr += indent + "\n" + else: + rstr += "\n" + return rstr + + def parse(self, xml=None, text=""): + """Parses an xml file. + + Uses the xml_node class defined in io_xml to read all the information + contained within the root tags, and uses it to give values for the attribs + and fields data recursively. It does this by giving all the data between + the appropriate field tag to the appropriate field restart object as a + string, and the appropriate attribute data to the appropriate attribs + restart object as a string. These data are then parsed by these objects + until all the information is read, or an input error is found. + + Args: + xml: An xml_node object containing all the data for the parent + tag. + text: The data held between the start and end tags. + + Raises: + NameError: Raised if one of the tags in the xml input file is + incorrect. + ValueError: Raised if the user does not specify a required field. + """ + + # before starting, sets everything to its default -- if a default is set! + for a in self.attribs: + self.__dict__[a].set_default() + for f in self.fields: + self.__dict__[f].set_default() + + self.extra = [] + self._explicit = True + if xml is None: + self._text = text + else: + for a, v in xml.attribs.iteritems(): + if a in self.attribs: + self.__dict__[a].parse(text=v) + elif a == "_text": + pass + else: + raise NameError("Attribute name '" + a + "' is not a recognized property of '" + xml.name + "' objects") + + for (f, v) in xml.fields: #reads all field and dynamic data. + if f in self.fields: + self.__dict__[f].parse(xml=v) + elif f == "_text": + self._text = v + elif f in self.dynamic: + self.extend(f, v) + else: + raise NameError("Tag name '" + f + "' is not a recognized property of '" + xml.name + "' objects") + + #checks for missing arguments. + for a in self.attribs: + va = self.__dict__[a] + if not (va._explicit or va._optional): + raise ValueError("Attribute name '" + a + "' is mandatory and was not found in the input for the property " + xml.name) + for f in self.fields: + vf = self.__dict__[f] + if not (vf._explicit or vf._optional): + raise ValueError("Field name '" + f + "' is mandatory and was not found in the input for the property " + xml.name) + + def detail_str(self): + """Prints out the supplementary information about a particular input class. + + Used to print out the dimensions, default value, possible options and data + type of an input value to the LaTeX helf file. + """ + + xstr = "" + if hasattr(self, '_dimension') and self._dimension != "undefined": #gives dimension + xstr += "dimension: " + self._dimension + "; " + + if self._default != None and issubclass(self.__class__, InputAttribute): + #We only print out the default if it has a well defined value. + #For classes such as InputCell, self._default is not the value, + #instead it is an object that is stored to give the default value in + #self.value. For this reason we print out self.value at this stage, + #and not self._default + xstr += "default: " + self.pprint(self.value) + "; " + + if issubclass(self.__class__, InputAttribute): + #if possible, prints out the type of data that is being used + xstr += "data type: " + self.type_print(self.type) + "; " + + if hasattr(self, "_valid"): + if self._valid is not None: + xstr += "options: " #prints out valid options, if + for option in self._valid: #required. + xstr += "`" + str(option) + "', " + xstr = xstr.rstrip(", ") + xstr += "; " + return xstr + + def help_latex(self, name="", level=0, stop_level=None, standalone=True): + """Function to generate a LaTeX formatted help file. + + Args: + name: Name of the tag that has to be written out. + level: Current level of the hierarchy being considered. + stop_level: The depth to which information will be given. If not given, + will give all information. + standalone: A boolean giving whether the latex file produced will be a + stand-alone document, or will be intended as a section of a larger + document with cross-references between the different sections. + + Returns: + A LaTeX formatted string. + """ + + #stops when we've printed out the prerequisite number of levels + if (not stop_level is None and level > stop_level): + return "" + + rstr = "" + if level == 0: + if standalone: + #assumes that it is a stand-alone document, so must have + #document options. + rstr += r"\documentclass[12pt,fleqn]{report}" + rstr += r""" +\usepackage{etoolbox} +\usepackage{suffix} + +\newcommand{\ipiitem}[3]{% +\setul{1pt}{.4pt}\ifblank{#1}{}{\ifstrequal{#1}{\underline{\smash{}}}{}{ +{\noindent\textbf{#1}:\rule{0.0pt}{1.05\baselineskip}\quad}}}% uses a strut to add a bit of vertical space +{#2}\parskip=0pt\par +\ifblank{#3}{}% +{ {\hfill\raggedleft\textit{\small #3}\par} } +} + +\makeatletter +\newenvironment{ipifield}[4]{% + \ifblank{#1}{}{\vspace{0.5em}} + \noindent\parskip=0pt\begin{tabular}[t]{|p{1.0\linewidth}} + %cell without border + \multicolumn{1}{@{}p{1.0\linewidth}}{ + \ipiitem{\underline{\smash{#1}}}{#2}{} + \ifblank{#4}{ % + \ifblank{#3}{}{{\hfill\raggedleft\textit{\small #3}}\par}}{} } \vspace{-1em}\\ % + % cell with border + \ifblank{#4}{} % + { \ifblank{#3}{}{\vspace{-1em}{\hfill\raggedleft\textit{\small #3}}\par} % + {#4}\vspace{-1em}\\\hline } % negative vspace to undo the line break + \end{tabular} + \parskip=0pt\list{}{\listparindent 1.5em% + \leftmargin \listparindent + \rightmargin 0pt + \parsep 0pt + \itemsep 0pt + \topsep 0pt + }% + \item\relax + } + {\endlist} +\makeatother +""" + rstr += "\n\\begin{document}\n" + if self._label != "" and not standalone: + #assumes that it is part of a cross-referenced document, so only + #starts a new section. + rstr += "\\section{" + self._label + "}\n" + rstr += "\\label{" + self._label + "}\n" + + rstr += "\\begin{ipifield}{}%\n" + else: + if self._label != "" and not standalone: + rstr += "\\begin{ipifield}{\hyperref["+self._label+"]{"+name+"}}%\n" + else: + rstr += "\\begin{ipifield}{"+name+"}%\n" + + rstr += "{"+self._help+"}%\n" + + rstr += "{"+self.detail_str()+"}%\n" + + rstr += "{" + # Prints out the attributes + if len(self.attribs) != 0: + #don't print out units if not necessary + if len(self.attribs) == 1 and (("units" in self.attribs) and self._dimension == "undefined"): + pass + else: + for a in self.attribs: + #don't print out units if not necessary + if not (a == "units" and self._dimension == "undefined"): + rstr += "\\ipiitem{" + a + "}%\n{" + self.__dict__[a]._help + "}%\n{"+self.__dict__[a].detail_str()+"}%\n" #!!MUST ADD OTHER STUFF + rstr+="}\n" + + #As above, for the fields. Only prints out if we have not reached the + #user-specified limit. + if len(self.fields) != 0 and level != stop_level: + for f in self.fields: + rstr += self.__dict__[f].help_latex(name=f, level=level+1, stop_level=stop_level, standalone=standalone) + + if len(self.dynamic) != 0 and level != stop_level: + for f, v in self.dynamic.iteritems(): + dummy_obj = v[0](**v[1]) + rstr += dummy_obj.help_latex(name=f, level=level+1, stop_level=stop_level, standalone=standalone) + + rstr += "\\end{ipifield}\n" + if level == 0 and standalone: + #ends the created document if it is not part of a larger document + rstr += "\\end{document}" + + #Some escape characters are necessary for the proper latex formatting + rstr = rstr.replace('_', '\\_') + rstr = rstr.replace('\\\\_', '\\_') + rstr = rstr.replace('...', '\\ldots ') + rstr = rstr.replace('<', '$<$') + rstr = rstr.replace('>', '$>$') + + return rstr + + def pprint(self, default, indent="", latex = True): + """Function to convert arrays and other objects to human-readable strings. + + Args: + default: The object that needs to be converted to a string. + indent: The indent at the beginning of a line. + latex: A boolean giving whether the string will be latex-format. + + Returns: + A formatted string. + """ + + if type(default) is np.ndarray: + if default.shape == (0,): + return " [ ] " #proper treatment of empty arrays. + else: + #indents new lines for multi-D arrays properly + rstr = "\n" + indent + " " + rstr += str(default).replace("\n", "\n" + indent + " ") + if not latex: + rstr += "\n" + indent + " " + + return rstr + elif type(default) == str: + if latex: + return "`" + default + "'" #indicates that it is a string + else: + return " " + default + " " + elif default == []: + return " [ ] " + elif default == {}: + if latex: + return " \\{ \\} " #again, escape characters needed for latex + else: #formatting + return " { } " + else: + #in most cases standard formatting will do + return " " + str(default) + " " + + def type_print(self, dtype): + """Function to convert a data types to human-readable strings. + + Args: + dtype: A data type. + """ + + if dtype == bool: + return "boolean" + elif dtype == float or dtype == np.float64: + return "float" + elif dtype == int or dtype == np.uint64 or dtype == np.int64: + return "integer" + elif dtype == dict: + return "dictionary" + elif dtype == str: + return "string" + elif dtype == tuple: + return "tuple" + else: + raise TypeError("Unrecognized data type " + str(dtype)) + + def help_xml(self, name="", indent="", level=0, stop_level=None): + """Function to generate an xml formatted help file. + + Args: + name: A string giving the name of the root node. + indent: The indent at the beginning of a line. + level: Current level of the hierarchy being considered. + stop_level: The depth to which information will be given. If not given, + all information will be given + + Returns: + An xml formatted string. + """ + + #stops when we've printed out the prerequisite number of levels + if (not stop_level is None and level > stop_level): + return "" + + #these are booleans which tell us whether there are any attributes + #and fields to print out + show_attribs = (len(self.attribs) != 0) + show_fields = (not (len(self.fields) == 0 and len(self.dynamic) == 0)) and level != stop_level + + rstr = "" + rstr = indent + "<" + name; #prints tag name + for a in self.attribs: + if not (a == "units" and self._dimension == "undefined"): + #don't print out units if not necessary + rstr += " " + a + "=''" #prints attribute names + rstr += ">\n" + + #prints help string + rstr += indent + " " + self._help + " \n" + if show_attribs: + for a in self.attribs: + if not (a == "units" and self._dimension == "undefined"): + #information about tags is found in tags beginning with the name + #of the attribute + rstr += indent + " <" + a + "_help> " + self.__dict__[a]._help + " \n" + + #prints dimensionality of the object + if hasattr(self, '_dimension') and self._dimension != "undefined": + rstr += indent + " " + self._dimension + " \n" + + if self._default != None and issubclass(self.__class__, InputAttribute): + #We only print out the default if it has a well defined value. + #For classes such as InputCell, self._default is not the value, + #instead it is an object that is stored, putting the default value in + #self.value. For this reason we print out self.value at this stage, + #and not self._default + rstr += indent + " " + self.pprint(self.value, indent=indent, latex=False) + "\n" + if show_attribs: + for a in self.attribs: + if not (a == "units" and self._dimension == "undefined"): + if self.__dict__[a]._default is not None: + rstr += indent + " <" + a + "_default>" + self.pprint(self.__dict__[a]._default, indent=indent, latex=False) + "\n" + + #prints out valid options, if required. + if hasattr(self, "_valid"): + if self._valid is not None: + rstr += indent + " " + str(self._valid) + " \n" + if show_attribs: + for a in self.attribs: + if not (a == "units" and self._dimension == "undefined"): + if hasattr(self.__dict__[a], "_valid"): + if self.__dict__[a]._valid is not None: + rstr += indent + " <" + a + "_options> " + str(self.__dict__[a]._valid) + " \n" + + #if possible, prints out the type of data that is being used + if issubclass(self.__class__, InputAttribute): + rstr += indent + " " + self.type_print(self.type) + " \n" + if show_attribs: + for a in self.attribs: + if not (a == "units" and self._dimension == "undefined"): + rstr += indent + " <" + a + "_dtype> " + self.type_print(self.__dict__[a].type) + " \n" + + #repeats the above instructions for any fields or dynamic tags. + #these will only be printed if their level in the hierarchy is not above + #the user specified limit. + if show_fields: + for f in self.fields: + rstr += self.__dict__[f].help_xml(f, " " + indent, level+1, stop_level) + for f, v in self.dynamic.iteritems(): + #we must create the object manually, as dynamic objects are + #not automatically added to the input object's dictionary + dummy_obj = v[0](**v[1]) + rstr += dummy_obj.help_xml(f, " " + indent, level+1, stop_level) + + rstr += indent + "\n" + return rstr + + +class InputAttribute(Input): + """Class for handling attribute data. + + Has the methods for dealing with attribute data of the form: + ..., where data is just a value. Takes the data and + converts it to the required data_type, so that it can be used in the + simulation. + + Attributes: + type: Data type of the data. + value: Value of data. Also specifies data type if type is None. + _valid: An optional list of valid options. + """ + + def __init__(self, help=None, default=None, dtype=None, options=None): + """Initialises InputAttribute. + + Args: + help: A help string. + default: A default value. + dtype: An optional data type. Defaults to None. + options: An optional list of valid options. + """ + + if not dtype is None: + self.type = dtype + else: + raise TypeError("You must provide dtype") + + super(InputAttribute,self).__init__(help, default) + + if options is not None: + self._valid = options + if not default is None and not self._default in self._valid: + #This makes sure that the programmer has set the default value + #so that it is a valid value. + raise ValueError("Default value '" + str(self._default) + "' not in option list " + str(self._valid)+ "\n" + self._help) + else: + self._valid = None + + def parse(self, text=""): + """Reads the data for a single attribute value from an xml file. + + Args: + text: The data held between the start and end tags. + """ + + super(InputAttribute, self).parse(text=text) + + self.value = read_type(self.type, self._text) + + def store(self, value): + """Stores the input data. + + Args: + value: The raw data to be stored. + """ + super(InputAttribute,self).store(value) + self.value = value + + def fetch(self): + """Returns the stored data.""" + + super(InputAttribute,self).fetch() + return self.value + + def check(self): + """Function to check for input errors. + + Raises: + ValueError: Raised if the value chosen is not one of the valid options. + """ + + super(InputAttribute,self).check() + if not (self._valid is None or self.value in self._valid): + #This checks that the user has set the value to a valid value. + raise ValueError(str(self.value) + " is not a valid option (" + str(self._valid) + ")") + + def write(self, name=""): + """Writes data in xml file format. + + Writes the attribute data in the appropriate format. + + Args: + name: An optional string giving the attribute name. Defaults to "". + + Returns: + A string giving the stored value in the appropriate format. + """ + + return name + "='" + write_type(self.type, self.value) + "'" + + +class InputValue(InputAttribute): + """Scalar class for input handling. + + Has the methods for dealing with simple data tags of the form: + data , where data is just a value. Takes the data and + converts it to the required data_type, so that it can be used in the + simulation. + + Attributes: + units: The units that the input data is given in. + _dimension: The dimensionality of the data. + """ + + default_dimension = "undefined" + default_units = "" + + attribs= { "units" : ( InputAttribute, { "dtype" : str, "help" : "The units the input data is given in.", "default" : default_units } ) } + + def __init__(self, help=None, default=None, dtype=None, options=None, dimension=None): + """Initialises InputValue. + + Args: + help: A help string. + dimension: The dimensionality of the value. + default: A default value. + dtype: An optional data type. Defaults to None. + options: An optional list of valid options. + """ + + # a note on units handling: + # 1) units are only processed at parse/fetch time: + # internally EVERYTHING is in internal units + # 2) if one adds an explicit "units" attribute to a derived class, + # the internal units handling will be just ignored + if dimension is None: + self._dimension = self.default_dimension + else: + self._dimension = dimension + + super(InputValue,self).__init__(help, default, dtype, options) + + def store(self, value, units=""): + """Converts the data to the appropriate data type and units and stores it. + + Args: + value: The raw data to be stored. + units: Optional string giving the units that the data should be stored + in. + """ + + super(InputValue,self).store(value) + + if units != "": + self.units.store(units) #User can define in the code the units to be + #printed + + self.value = value + if self._dimension != "undefined": + self.value *= unit_to_user(self._dimension, units, 1.0) + + def fetch(self): + """Returns the stored data in the user defined units.""" + + super(InputValue,self).fetch() + + rval = self.value + if self._dimension != "undefined": + rval *= unit_to_internal(self._dimension, self.units.fetch(), 1.0) + return rval + + def write(self, name="", indent=""): + """Writes data in xml file format. + + Writes the data in the appropriate format between appropriate tags. + + Args: + name: An optional string giving the tag name. Defaults to "". + indent: An optional string giving the string to be added to the start + of the line, so usually a number of tabs. Defaults to "". + + Returns: + A string giving the stored value in the appropriate xml format. + """ + + return Input.write(self, name=name, indent=indent, text=write_type(self.type, self.value)) + + def parse(self, xml=None, text=""): + """Reads the data for a single value from an xml file. + + Args: + xml: An xml_node object containing the all the data for the parent + tag. + text: The data held between the start and end tags. + """ + + Input.parse(self, xml=xml, text=text) + self.value = read_type(self.type, self._text) + + +ELPERLINE = 5 +class InputArray(InputValue): + """Array class for input handling. + + Has the methods for dealing with simple data tags of the form: + data , where data is an array + of the form [data[0], data[1], ... , data[length]]. + + Takes the data and converts it to the required data type, + so that it can be used in the simulation. Also holds the shape of the array, + so that we can use a simple 1D list of data to specify a multi-dimensional + array. + + Attributes: + shape: The shape of the array. + """ + + attribs = copy(InputValue.attribs) + attribs["shape"] = (InputAttribute, {"dtype": tuple, "help": "The shape of the array.", "default": (0,)}) + + def __init__(self, help=None, default=None, dtype=None, dimension=None): + """Initialises InputArray. + + Args: + help: A help string. + dimension: The dimensionality of the value. + default: A default value. + dtype: An optional data type. Defaults to None. + """ + + super(InputArray,self).__init__(help, default, dtype, dimension=dimension) + + def store(self, value, units=""): + """Converts the data to the appropriate data type, shape and units and + stores it. + + Args: + value: The raw data to be stored. + units: Optional string giving the units that the data should be stored + in. + """ + + super(InputArray,self).store(value=np.array(value, dtype=self.type).flatten().copy(), units=units) + self.shape.store(value.shape) + + #if the shape is not specified, assume the array is linear. + if self.shape.fetch() == (0,): + self.shape.store((len(self.value),)) + + def fetch(self): + """Returns the stored data in the user defined units.""" + + value = super(InputArray,self).fetch() + + #if the shape is not specified, assume the array is linear. + if self.shape.fetch() == (0,): + value = np.resize(self.value,0).copy() + else: + value = self.value.reshape(self.shape.fetch()).copy() + + return value + + def write(self, name="", indent=""): + """Writes data in xml file format. + + Writes the data in the appropriate format between appropriate tags. Note + that only ELPERLINE values are printed on each line if there are more + than this in the array. If the values are floats, or another data type + with a fixed width of data output, then they are aligned in columns. + + Args: + name: An optional string giving the tag name. Defaults to "". + indent: An optional string giving the string to be added to the start + of the line, so usually a number of tabs. Defaults to "". + + Returns: + A string giving the stored value in the appropriate xml format. + """ + + rstr = "" + if (len(self.value) > ELPERLINE): + rstr += "\n" + indent + " [ " + else: + rstr += " [ " #inlines the array if it is small enough + + for i, v in enumerate(self.value): + if (len(self.value) > ELPERLINE and i > 0 and i%ELPERLINE == 0): + rstr += "\n" + indent + " " + rstr += write_type(self.type, v) + ", " + + rstr = rstr.rstrip(", ") #get rid of trailing commas + if (len(self.value) > ELPERLINE): + rstr += " ]\n" + else: + rstr += " ] " + + return Input.write(self, name=name, indent=indent, text=rstr) + + def parse(self, xml=None, text=""): + """Reads the data for an array from an xml file. + + Args: + xml: An xml_node object containing the all the data for the parent + tag. + text: The data held between the start and end tags. + """ + + Input.parse(self, xml=xml, text=text) + self.value = read_array(self.type, self._text) + + #if the shape is not specified, assume the array is linear. + if self.shape.fetch() == (0,): + self.shape.store((len(self.value),)) diff --git a/tools/i-pi/ipi/utils/io/README b/tools/i-pi/ipi/utils/io/README new file mode 100644 index 000000000..d70ff09dd --- /dev/null +++ b/tools/i-pi/ipi/utils/io/README @@ -0,0 +1,12 @@ + -- IO functions directory -- + + * This is the directory containing input/output functions. + + * Files: + - io_binary.py: Contains the functions to write output in binary format. + - io_pdb.py: Contains the functions to read pdb structure files and to + create pdb trajectory output files. + - io_xml.py: Contains the functions used to read the xml input file and + to format the restart output file. + - io_xyz.py: Contains the functions to read xyz structure files and to + create xyz trajectory output files. diff --git a/tools/i-pi/ipi/utils/io/__init__.py b/tools/i-pi/ipi/utils/io/__init__.py new file mode 100644 index 000000000..01615a0d5 --- /dev/null +++ b/tools/i-pi/ipi/utils/io/__init__.py @@ -0,0 +1 @@ +__all__ = [ "io_xml", "io_pdb" , "io_xyz", "io_binary" ] diff --git a/tools/i-pi/ipi/utils/io/io_binary.py b/tools/i-pi/ipi/utils/io/io_binary.py new file mode 100644 index 000000000..6e8fbd834 --- /dev/null +++ b/tools/i-pi/ipi/utils/io/io_binary.py @@ -0,0 +1,47 @@ +"""Contains the functions used to print the trajectories and read input +configurations (or even full status dump) as unformatted binary. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Functions: + print_bin: Prints an atomic configuration. +""" + +__all__ = ['print_bin'] + +import os +import numpy as np +import math, sys +from ipi.utils.depend import depstrip + +def print_bin(atoms, cell, filedesc = sys.stdout, title=""): + """Prints the centroid configurations, into a binary file. + + Args: + beads: An atoms object giving the centroid positions. + cell: A cell object giving the system box. + filedesc: An open writable file object. Defaults to standard output. + title: This gives a string to be appended to the comment line. + """ + + buff = filedesc # .buffer + cell.h.tofile(buff) + nat = np.asarray([atoms.natoms]) + nat.tofile(buff) + atoms.names.tofile(buff) + atoms.q.tofile(buff) + diff --git a/tools/i-pi/ipi/utils/io/io_pdb.py b/tools/i-pi/ipi/utils/io/io_pdb.py new file mode 100644 index 000000000..b3ce8fc20 --- /dev/null +++ b/tools/i-pi/ipi/utils/io/io_pdb.py @@ -0,0 +1,173 @@ +"""Contains the functions used to print the trajectories and read input +configurations with pdb formatting. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Functions: + print_pdb_path: Prints all the bead configurations, and shows the ring + polymer connectivity. + print_pdb: Prints the centroid configurations. + read_pdb: Reads the cell parameters and atom configurations from a pdb file. +""" + +__all__ = ['print_pdb_path', 'print_pdb', 'read_pdb'] + +import numpy as np +import sys +import ipi.utils.mathtools as mt +from ipi.utils.depend import depstrip +from ipi.engine.cell import Cell +from ipi.engine.atoms import Atoms +from ipi.utils.units import * + +def print_pdb_path(beads, cell, filedesc = sys.stdout): + """Prints all the bead configurations, into a pdb formatted file. + + Prints the ring polymer springs as well as the bead positions using the + CONECT command. Also prints the cell parameters in standard pdb form. Note + that the angles are in degrees. + + Args: + beads: A beads object giving the bead positions. + cell: A cell object giving the system box. + filedesc: An open writable file object. Defaults to standard output. + """ + + a, b, c, alpha, beta, gamma = mt.h2abc_deg(cell.h) + + z = 1 #What even is this parameter? + filedesc.write("CRYST1%9.3f%9.3f%9.3f%7.2f%7.2f%7.2f%s%4i\n" % (a, b, c, alpha, beta, gamma, " P 1 ", z)) + + natoms = beads.natoms + nbeads = beads.nbeads + for j in range(nbeads): + for i in range(natoms): + qs = depstrip(beads.q) + lab = depstrip(beads.names) + filedesc.write("ATOM %5i %4s%1s%3s %1s%4i%1s %8.3f%8.3f%8.3f%6.2f%6.2f %2s%2i\n" % (j*natoms+i+1, lab[i],' ',' 1',' ',1,' ', qs[j][3*i], qs[j][3*i+1], qs[j][3*i+2],0.0,0.0,' ',0)) + + if nbeads > 1: + for i in range(natoms): + filedesc.write("CONECT%5i%5i\n" % (i+1, (nbeads-1)*natoms+i+1)) + for j in range(nbeads-1): + for i in range(natoms): + filedesc.write("CONECT%5i%5i\n" % (j*natoms+i+1, (j+1)*natoms+i+1)) + + filedesc.write("END\n") + +def print_pdb(atoms, cell, filedesc = sys.stdout, title=""): + """Prints the atom configurations, into a pdb formatted file. + + Also prints the cell parameters in standard pdb form. Note + that the angles are in degrees. + + Args: + atoms: An atoms object giving the atom positions. + cell: A cell object giving the system box. + filedesc: An open writable file object. Defaults to standard output. + title: An optional string of max. 70 characters. + """ + + + if title != "" : + filedesc.write("TITLE %70s\n" % (title)) + + a, b, c, alpha, beta, gamma = mt.h2abc_deg(cell.h) + + z = 1 + filedesc.write("CRYST1%9.3f%9.3f%9.3f%7.2f%7.2f%7.2f%s%4i\n" % (a, b, c, alpha, beta, gamma, " P 1 ", z)) + + natoms = atoms.natoms + qs = depstrip(atoms.q) + lab = depstrip(atoms.names) + for i in range(natoms): + filedesc.write("ATOM %5i %4s%1s%3s %1s%4i%1s %8.3f%8.3f%8.3f%6.2f%6.2f %2s%2i\n" % (i+1, lab[i], ' ', ' 1', ' ', 1, ' ', qs[3*i], qs[3*i+1], qs[3*i+2], 0.0, 0.0, ' ', 0)) + + filedesc.write("END\n") + +def read_pdb(filedesc): + """Takes a pdb-style file and creates an Atoms and Cell object. + + Args: + filedesc: An open readable file object from a pdb formatted file. + + Returns: + An Atoms object with the appropriate atom labels, masses and positions, + and a Cell object with the appropriate cell dimensions and an estimate + of a reasonable cell mass. + """ + + header = filedesc.readline() + if "TITLE" in header: header = filedesc.readline() # skip the comment field + if header == "": + raise EOFError("End of file or empty header in PDB file") + + a = float(header[6:15]) + b = float(header[15:24]) + c = float(header[24:33]) + alpha = float(header[33:40]) + beta = float(header[40:47]) + gamma = float(header[47:54]) + alpha *= np.pi/180.0 + beta *= np.pi/180.0 + gamma *= np.pi/180.0 + h = mt.abc2h(a, b, c, alpha, beta, gamma) + cell = Cell(h) + + natoms = 0 + body = filedesc.readline() + qatoms = [] + names = [] + masses = [] + while (body.strip() != "" and body.strip() != "END"): + natoms += 1 + name = body[12:16].strip() + names.append(name) + masses.append(Elements.mass(name)) + x = float(body[31:39]) + y = float(body[39:47]) + z = float(body[47:55]) + qatoms.append(x) + qatoms.append(y) + qatoms.append(z) + + body = filedesc.readline() + + atoms = Atoms(natoms) + atoms.q = np.asarray(qatoms) + atoms.names = np.asarray(names,dtype='|S4') + atoms.m = np.asarray(masses) + + return atoms, cell + +def iter_pdb(filedesc): + """Takes a pdb-style file and yields one Atoms, Cell tuple after another. + + Args: + filedesc: An open readable file object from a pdb formatted file. + + Returns: + Generator over the pdb trajectory, that yields + (Atoms, Cell) tuple with the appropriate atom labels, masses and positions. + """ + + try: + while 1: + atoms, cell = read_pdb(filedesc) + yield atoms, cell + except EOFError: + pass diff --git a/tools/i-pi/ipi/utils/io/io_xml.py b/tools/i-pi/ipi/utils/io/io_xml.py new file mode 100644 index 000000000..5e4385440 --- /dev/null +++ b/tools/i-pi/ipi/utils/io/io_xml.py @@ -0,0 +1,520 @@ +"""Contains the functions used to read the input file and print the checkpoint +files with xml formatting. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Functions: + xml_node: Class to handle a particular xml tag. + xml_handler: Class giving general xml data reading methods. + xml_parse_string: Parses a string made from a section of a xml input file. + xml_parse_file: Parses an entire xml input file. + read_type: Reads a string and outputs data of a specified type. + read_float: Reads a string and outputs a float. + read_int: Reads a string and outputs an integer. + read_bool: Reads a string and outputs a boolean. + read_list: Reads a string and outputs a list. + read_array: Reads a string and outputs an array. + read_tuple: Reads a string and outputs a tuple. + read_dict: Reads a string and outputs a dictionary. + write_type: Writes a string from data of a specified type. + write_list: Writes a string from a list. + write_tuple: Writes a string from a tuple. + write_float: Writes a string from a float. + write_bool: Writes a string from a boolean. + write_dict: Writes a string from a dictionary. +""" + +__all__ = ['xml_node', 'xml_handler', 'xml_parse_string', 'xml_parse_file', + 'read_type', 'read_float', 'read_int', 'read_bool', 'read_list', + 'read_array', 'read_tuple', 'read_dict', 'write_type', 'write_list', + 'write_tuple', 'write_float', 'write_bool', 'write_dict'] + +from xml.sax import parseString, parse +from xml.sax.handler import ContentHandler +import numpy as np +import string + +class xml_node(object): + """Class to handle a particular xml tag. + + Tags are generally written in the form + main_data . This class holds + tag_name, attrib_data and main_data separately so they can be used to + create the objects with the appropriate names and data. + + Attributes: + attribs: The attribute data for the tag. + fields: The rest of the data. + name: The tag name. + """ + + def __init__(self, attribs=None, name="", fields=None): + """Initialises xml_node. + + Args: + attribs: An optional dictionary giving attribute data. Defaults to {}. + fields: An optional dictionary holding all the data between the start + and end tags, including information about other nodes. + Defaults to {}. + name: An optional string giving the tag name. Defaults to ''. + """ + + if attribs is None: + attribs = {} + if fields is None: + fields = [] + + self.attribs = attribs + self.name = name + self.fields = fields + + +class xml_handler(ContentHandler): + """Class giving general xml_reading methods. + + Uses the standard python xml_reader to read the different kinds of data. + Keeps track of the heirarchial nature of an xml file by recording the level + of nesting, so that the correct data and attributes can be associated with + the correct tag name. + + Attributes: + root: An xml_node object for the root node. + open: The list of the tags that the parser is currently between the start + and end tags of. + level: The level of nesting that the parser is currently at. + buffer: A list of the data found between the tags at the different levels + of nesting. + """ + + def __init__(self): + """Initialises xml_handler.""" + + #root xml node with all the data + self.root = xml_node(name="root", fields=[]) + self.open = [self.root] + #current level of the hierarchy + self.level = 0 + #Holds all the data between each of the tags. + #If level = 1, then buffer[0] holds all the data collected between the + #root tags, and buffer[1] holds all the data collected between the + #first child tag. + self.buffer = [[""]] + + def startElement(self, name, attrs): + """Reads an opening tag. + + Adds the opening tag to the list of open tags, adds a new space in the + buffer, reads the appropriate attributes and adds a new level to the + heirarchy. + + Args: + name: The tag_name. + attrs: The attribute data. + """ + + #creates a new node + newnode = xml_node(attribs=dict((k,attrs[k]) for k in attrs.keys()), name=name, fields=[]) + #adds it to the list of open nodes + self.open.append(newnode) + #adds it to the list of fields of the parent tag + self.open[self.level].fields.append((name,newnode)) + #gets ready to read new data + self.buffer.append([""]) + self.level += 1 + + def characters(self, data): + """Reads data. + + Adds the data to the buffer of the current level of the heirarchy. + Data is read as a string, and needs to be converted to the required + type later. + + Args: + data: The data to be read. + """ + + self.buffer[self.level].append(data) + + def endElement(self, name): + """Reads a closing tag. + + Once all the data has been read, and the closing tag found, the buffer + is read into the appropriate field. + + Args: + name: The tag_name. + """ + + #all the text found between the tags stored in the appropriate xml_node + #object + self.buffer[self.level] = ''.join(self.buffer[self.level]) + self.open[self.level].fields.append(("_text" , self.buffer[self.level])) + #'closes' the xml_node object, as we are no longer within its tags, so + #there is no more data to be added to it. + #Note that the xml_node is still held within the parent tag, so we + #no longer require this xml node object. + self.buffer.pop(self.level) + self.open.pop(self.level) + self.level -= 1 + +def xml_parse_string(buf): + """Parses a string made from a section of a xml input file. + + Args: + buf: A string in correct xml format. + + Returns: + A xml_node for the root node of the file. + """ + + myhandle = xml_handler() + parseString(buf, myhandle) + return myhandle.root + +def xml_parse_file(stream): + """Parses an entire xml input file. + + Args: + stream: A string describing a xml formatted file. + + Returns: + A xml_node for the root node of the file. + """ + + myhandle = xml_handler() + parse(stream, myhandle) + return myhandle.root + +def read_type(type, data): + """Reads a string and outputs data of a specified type. + + Args: + type: The data type of the target container. + data: The string to be read in. + + Raises: + TypeError: Raised if it tries to read into a data type that has not been + implemented. + + Returns: + An object of type type. + """ + + if not type in readtype_funcs: + raise TypeError("Conversion not available for given type") + return type(readtype_funcs[type](data)) + +def read_float(data): + """Reads a string and outputs a float. + + Args: + data: The string to be read in. + + Raises: + ValueError: Raised if the input data is not of the correct format. + + Returns: + A float. + """ + + return float(data) + +def read_int(data): + """Reads a string and outputs a integer. + + Args: + data: The string to be read in. + + Raises: + ValueError: Raised if the input data is not of the correct format. + + Returns: + An integer. + """ + + return int(data) + +def read_bool(data): + """Reads a string and outputs a boolean. + + Takes a string of the form 'true' or 'false', and returns the appropriate + boolean. + + Args: + data: The string to be read in. + + Raises: + ValueError: Raised if the string is not 'true' or 'false'. + + Returns: + A boolean. + """ + + + if data.strip().upper() == "TRUE": + return True + elif data.strip().upper() == "FALSE": + return False + else: + raise ValueError(data + " does not represent a bool value") + +def read_list(data, delims="[]", split=",", strip=" \n\t'"): + """Reads a formatted string and outputs a list. + + The string must be formatted in the correct way. + The start character must be delimiters[0], the end character + must be delimiters[1] and each element must be split along + the character split. Characters at the beginning or + end of each element in strip are ignored. The standard list format is of the + form '[array[0], array[1],..., array[n]]', which is used for actual lists. + Other formats are used for tuples and dictionaries. + + Args: + data: The string to be read in. '[]' by default. + delims: A string of two characters giving the first and last character of + the list format. ',' by default. + split: The character between different elements of the list format. + strip: Characters to be removed from the beginning and end of each + element. ' \n\t' by default. + + Raises: + ValueError: Raised if the input data is not of the correct format. + + Returns: + A list of strings. + """ + + try: + begin = data.index(delims[0]) + end = data.index(delims[1]) + except ValueError: + raise ValueError("Error in list syntax: could not locate delimiters") + + rlist = data[begin+1:end].split(split) + for i in range(len(rlist)): + rlist[i] = rlist[i].strip(strip) + + # handles empty lists correctly + if len(rlist) == 1 and rlist[0] == "": + rlist = [] + + return rlist + +def read_array(dtype, data): + """Reads a formatted string and outputs an array. + + The format is as for standard python arrays, which is + [array[0], array[1], ... , array[n]]. Note the use of comma separators, and + the use of square brackets. + + Args: + data: The string to be read in. + dtype: The data type of the elements of the target array. + + Raises: + ValueError: Raised if the input data is not of the correct format. + + Returns: + An array of data type dtype. + """ + + rlist = read_list(data) + for i in range(len(rlist)): + rlist[i] = read_type(dtype,rlist[i]) + + return np.array(rlist, dtype) + +def read_tuple(data, delims="()", split=",", strip=" \n\t'", arg_type=int): + """Reads a formatted string and outputs a tuple. + + The format is as for standard python tuples, which is + (tuple[0], tuple[1], ... , tuple[n]). Note the comma + separators, and the use of brackets. + + Args: + data: The string to be read in. + delims: A string of two characters giving the first and last character of + the list format. ',' by default. + split: The character between different elements of the list format. + strip: Characters to be removed from the beginning and end of each + element. ' \n\t' by default. + arg_type: The strings in the input will be converted, and a tuple + of ar_type will be returned. + + Raises: + ValueError: Raised if the input data is not of the correct format. + + Returns: + A tuple of elements of the specified data type. + """ + + rlist = read_list(data, delims=delims, split=split, strip=strip) + return tuple([arg_type(i) for i in rlist]) + +def read_dict(data, delims="{}", split=",", key_split=":", strip=" \n\t"): + """Reads a formatted string and outputs a dictionary. + + The format is as for standard python dictionaries, which is + {keyword[0]: arg[0], keyword[1]: arg[1], ... , keyword[n]: arg[n]}. Note the + comma separators, and the use of curly brackets. + + Args: + data: The string to be read in. + delims: A string of two characters giving the first and last character of + the list format. ',' by default. + split: The character between different elements of the list format. + key_split: The character between the key word and the value. + strip: Characters to be removed from the beginning and end of each + element. ' \n\t' by default. + + Raises: + ValueError: Raised if the input data is not of the correct format. + + Returns: + A dictionary of strings. + """ + + rlist = read_list(data, delims=delims, split=split, strip=strip) + def mystrip(data): + return data.strip(strip) + rdict = {} + for s in rlist: + rtuple = map(mystrip,s.split(key_split)) + if not len(rtuple) == 2: + raise ValueError("Format for a key:value format is wrong for item " + s) + rdict[rtuple[0]] = rtuple[1] + + return rdict + +readtype_funcs = {np.ndarray: read_array, dict: read_dict, float: read_float, int: read_int, bool: read_bool, str: string.strip, tuple: read_tuple, np.uint : read_int} + +def write_type(type, data): + """Writes a formatted string from a value of a specified type. + + Args: + type: The data type of the value. + data: The value to be read in. + + Raises: + TypeError: Raised if it tries to write from a data type that has not been + implemented. + + Returns: + A formatted string. + """ + + if not type in writetype_funcs: + raise TypeError("Conversion not available for given type") + return writetype_funcs[type](data) + +def write_list(data, delims="[]"): + """Writes a formatted string from a list. + + The format of the output is as for a standard python list, + [list[0], list[1],..., list[n]]. Note the space after the commas, and the + use of square brackets. + + Args: + data: The value to be read in. + delims: An optional string of two characters giving the first and last + character to be printed. Defaults to "[]". + + Returns: + A formatted string. + """ + + rstr = delims[0] + + for v in data: + rstr += str(v) + ", " + + rstr = rstr.rstrip(", ") + rstr += delims[1] + return rstr + +def write_tuple(data): + """Writes a formatted string from a tuple. + + The format of the output is as for a standard python tuple, + (tuple[0], tuple[1],..., tuple[n]). Note the space after the commas, and the + use of brackets. + + Args: + data: The value to be read in. + + Returns: + A formatted string. + """ + + return write_list(data, delims="()") + +def write_float(data): + """Writes a formatted string from a float. + + Floats are printed out in exponential format, to 8 decimal places and + filling up any spaces under 16 not used with spaces. + + For example 1.0 --> ' 1.00000000e+00' + + Args: + data: The value to be read in. + + Returns: + A formatted string. + """ + + return "%16.8e" % (data) + +def write_bool(data): + """Writes a formatted string from a float. + + Booleans are printed as a string of either ' true' or 'false'. Note that + both are printed out as exactly 5 characters. + + Args: + data: The value to be read in. + + Returns: + A formatted string. + """ + + return "%5.5s" % (str(data)) + +def write_dict(data, delims="{}"): + """Writes a formatted string from a dictionary. + + The format of the output is as for a standard python dictionary, + {keyword[0]: arg[0], keyword[1]: arg[1],..., keyword[n]: arg[n]}. Note the + space after the commas, and the use of curly brackets. + + Args: + data: The value to be read in. + delims: An optional string of two characters giving the first and last + character to be printed. Defaults to "{}". + + Returns: + A formatted string. + """ + + rstr = delims[0] + for v in data: + rstr += str(v) + ": " + str(data[v]) + ", " + rstr = rstr.strip(", ") + rstr += delims[1] + return rstr + +writetype_funcs = {float: write_float, dict: write_dict, int: str, bool: write_bool, str: string.strip, tuple: write_tuple, np.uint : str} diff --git a/tools/i-pi/ipi/utils/io/io_xyz.py b/tools/i-pi/ipi/utils/io/io_xyz.py new file mode 100644 index 000000000..e5fe3e93b --- /dev/null +++ b/tools/i-pi/ipi/utils/io/io_xyz.py @@ -0,0 +1,145 @@ +"""Contains the functions used to print the trajectories and read input +configurations with xyz formatting. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Functions: + print_xyz_path: Prints all the bead configurations. + print_xyz: Prints the centroid configurations. + read_xyz: Reads the cell parameters and atom configurations from a xyz file. +""" + +__all__ = ['print_xyz_path', 'print_xyz', 'read_xyz', 'iter_xyz'] + +import numpy as np +import math, sys +import ipi.utils.mathtools as mt +from ipi.utils.depend import depstrip +from ipi.engine.atoms import Atoms +from ipi.utils.units import * + +def print_xyz_path(beads, cell, filedesc = sys.stdout): + """Prints all the bead configurations, into a xyz formatted file. + + Prints all the replicas for each time step separately, rather than all at + once. + + Args: + beads: A beads object giving the bead positions. + cell: A cell object giving the system box. + filedesc: An open writable file object. Defaults to standard output. + """ + + a, b, c, alpha, beta, gamma = mt.h2abc_deg(cell.h) + + natoms = beads.natoms + nbeads = beads.nbeads + for j in range(nbeads): + filedesc.write("%d\n# bead: %d CELL(abcABC): %10.5f %10.5f %10.5f %10.5f %10.5f %10.5f \n" % (natoms, j, a, b, c, alpha, beta, gamma)) + for i in range(natoms): + qs = depstrip(beads.q) + lab = depstrip(beads.names) + filedesc.write("%8s %12.5e %12.5e %12.5e\n" % (lab[i], qs[j][3*i], qs[j][3*i+1], qs[j][3*i+2])) + +def print_xyz(atoms, cell, filedesc = sys.stdout, title=""): + """Prints the centroid configurations, into a xyz formatted file. + + Args: + atoms: An atoms object giving the centroid positions. + cell: A cell object giving the system box. + filedesc: An open writable file object. Defaults to standard output. + title: This gives a string to be appended to the comment line. + """ + + a, b, c, alpha, beta, gamma = mt.h2abc_deg(cell.h) + + natoms = atoms.natoms + filedesc.write("%d\n# CELL(abcABC): %10.5f %10.5f %10.5f %10.5f %10.5f %10.5f %s\n" % ( natoms, a, b, c, alpha, beta, gamma, title)) + # direct access to avoid unnecessary slow-down + qs = depstrip(atoms.q) + lab = depstrip(atoms.names) + for i in range(natoms): + filedesc.write("%8s %12.5e %12.5e %12.5e\n" % (lab[i], qs[3*i], qs[3*i+1], qs[3*i+2])) + +def read_xyz(filedesc): + """Takes a xyz-style file and creates an Atoms object. + + Args: + filedesc: An open readable file object from a xyz formatted file. + + Returns: + An Atoms object with the appropriate atom labels, masses and positions. + """ + + natoms = filedesc.readline() + if natoms == "": + raise EOFError("The file descriptor hit EOF.") + natoms = int(natoms) + comment = filedesc.readline() + + qatoms = [] + names = [] + masses = [] + iat = 0 + while (iat < natoms): + body = filedesc.readline() + if body.strip() == "": + break + body = body.split() + name = body[0] + names.append(name) + masses.append(Elements.mass(name)) + x = float(body[1]) + y = float(body[2]) + z = float(body[3]) + qatoms.append(x) + qatoms.append(y) + qatoms.append(z) + iat += 1 + + if natoms != len(names): + raise ValueError("The number of atom records does not match the header of the xyz file.") + + atoms = Atoms(natoms) +# for i in range(natoms): +# nat = atoms[i] +# nat.q = qatoms[i] +# nat.name = names[i] +# nat.m = Elements.mass(names[i]) + atoms.q = np.asarray(qatoms) + atoms.names = np.asarray(names, dtype='|S4') + atoms.m = np.asarray(masses) + + return atoms + +def iter_xyz(filedesc): + """Takes a xyz-style file and yields one Atoms object after another. + + Args: + filedesc: An open readable file object from a xyz formatted file. + + Returns: + Generator over the xyz trajectory, that yields + Atoms objects with the appropriate atom labels, masses and positions. + """ + + try: + while 1: + atoms = read_xyz(filedesc) + yield atoms + except EOFError: + pass diff --git a/tools/i-pi/ipi/utils/mathtools.py b/tools/i-pi/ipi/utils/mathtools.py new file mode 100644 index 000000000..767feca53 --- /dev/null +++ b/tools/i-pi/ipi/utils/mathtools.py @@ -0,0 +1,343 @@ +"""Contains simple algorithms. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Functions: + matrix_exp: Computes the exponential of a square matrix via a Taylor series. + stab_cholesky: A numerically stable version of the Cholesky decomposition. + h2abc: Takes the representation of the system box in terms of an upper + triangular matrix of column vectors, and returns the representation in + terms of the lattice vector lengths and the angles between them + in radians. + h2abc_deg: Takes the representation of the system box in terms of an upper + triangular matrix of column vectors, and returns the representation in + terms of the lattice vector lengths and the angles between them in + degrees. + abc2h: Takes the representation of the system box in terms of the lattice + vector lengths and the angles between them, and returns the + representation in terms of an upper triangular lattice vector matrix. + invert_ut3x3: Inverts a 3*3 upper triangular matrix. + det_ut3x3(h): Finds the determinant of a 3*3 upper triangular matrix. + eigensystem_ut3x3: Finds the eigenvector matrix and eigenvalues of a 3*3 + upper triangular matrix + exp_ut3x3: Computes the exponential of a 3*3 upper triangular matrix. + root_herm: Computes the square root of a positive-definite hermitian + matrix. + logsumlog: Routine to accumulate the logarithm of a sum +""" + +__all__ = ['matrix_exp', 'stab_cholesky', 'h2abc', 'h2abc_deg', 'abc2h', + 'invert_ut3x3', 'det_ut3x3', 'eigensystem_ut3x3', 'exp_ut3x3', + 'root_herm', 'logsumlog' ] + +import numpy as np +import math +from ipi.utils.messages import verbosity, warning + +def logsumlog(lasa, lbsb): + """Computes log(|A+B|) and sign(A+B) given log(|A|), log(|B|), + sign(A), sign(B). + + Args: + lasa: (log(|A|), sign(A)) as a tuple + lbsb: (log(|B|), sign(B)) as a tuple + + Returns: + (log(|A+B|), sign(A+B)) as a tuple + """ + + (la,sa) = lasa + (lb,sb) = lbsb + + if (la > lb): + sr = sa + lr = la + np.log(1.0 + sb*np.exp(lb-la)) + else: + sr = sb + lr = lb + np.log(1.0 + sa*np.exp(la-lb)) + + return (lr,sr) + +def matrix_exp(M, ntaylor=15, nsquare=15): + """Computes the exponential of a square matrix via a Taylor series. + + Calculates the matrix exponential by first calculating exp(M/(2**nsquare)), + then squaring the result the appropriate number of times. + + Args: + M: Matrix to be exponentiated. + ntaylor: Optional integer giving the number of terms in the Taylor series. + Defaults to 15. + nsquare: Optional integer giving how many times the original matrix will + be halved. Defaults to 15. + + Returns: + The matrix exponential of M. + """ + + n = M.shape[1] + tc = np.zeros(ntaylor+1) + tc[0] = 1.0 + for i in range(ntaylor): + tc[i+1] = tc[i]/(i+1) + + SM = np.copy(M)/2.0**nsquare + + EM = np.identity(n,float)*tc[ntaylor] + for i in range(ntaylor-1,-1,-1): + EM = np.dot(SM,EM) + EM += np.identity(n)*tc[i] + + for i in range(nsquare): + EM = np.dot(EM,EM) + return EM + +def stab_cholesky(M): + """ A numerically stable version of the Cholesky decomposition. + + Used in the GLE implementation. Since many of the matrices used in this + algorithm have very large and very small numbers in at once, to handle a + wide range of frequencies, a naive algorithm can end up having to calculate + the square root of a negative number, which breaks the algorithm. This is + due to numerical precision errors turning a very tiny positive eigenvalue + into a tiny negative value. + + Instead of this, an LDU decomposition is used, and any small negative numbers + in the diagonal D matrix are assumed to be due to numerical precision errors, + and so are replaced with zero. + + Args: + M: The matrix to be decomposed. + """ + + n = M.shape[1] + D = np.zeros(n,float) + L = np.zeros(M.shape,float) + for i in range(n): + L[i,i] = 1. + for j in range(i): + L[i,j] = M[i,j] + for k in range(j): + L[i,j] -= L[i,k]*L[j,k]*D[k] + if (not D[j] == 0.0): + L[i,j] = L[i,j]/D[j] + D[i] = M[i,i] + for k in range(i): + D[i] -= L[i,k]*L[i,k]*D[k] + + S = np.zeros(M.shape,float) + for i in range(n): + if (D[i]>0): + D[i] = math.sqrt(D[i]) + else: + warning("Zeroing negative element in stab-cholesky decomposition: " + str(D[i]), verbosity.low) + D[i] = 0 + for j in range(i+1): + S[i,j] += L[i,j]*D[j] + return S + +def h2abc(h): + """Returns a description of the cell in terms of the length of the + lattice vectors and the angles between them in radians. + + Args: + h: Cell matrix in upper triangular column vector form. + + Returns: + A list containing the lattice vector lengths and the angles between them. + """ + + a = float(h[0,0]) + b = math.sqrt(h[0,1]**2 + h[1,1]**2) + c = math.sqrt(h[0,2]**2 + h[1,2]**2 + h[2,2]**2) + gamma = math.acos(h[0,1]/b) + beta = math.acos(h[0,2]/c) + alpha = math.acos(np.dot(h[:,1], h[:,2])/(b*c)) + + return a, b, c, alpha, beta, gamma + +def h2abc_deg(h): + """Returns a description of the cell in terms of the length of the + lattice vectors and the angles between them in degrees. + + Args: + h: Cell matrix in upper triangular column vector form. + + Returns: + A list containing the lattice vector lengths and the angles between them + in degrees. + """ + + (a, b, c, alpha, beta, gamma) = h2abc(h) + return a, b, c, alpha*180/math.pi, beta*180/math.pi, gamma*180/math.pi + +def abc2h(a, b, c, alpha, beta, gamma): + """Returns a lattice vector matrix given a description in terms of the + lattice vector lengths and the angles in between. + + Args: + a: First cell vector length. + b: Second cell vector length. + c: Third cell vector length. + alpha: Angle between sides b and c in radians. + beta: Angle between sides a and c in radians. + gamma: Angle between sides b and a in radians. + + Returns: + An array giving the lattice vector matrix in upper triangular form. + """ + + h = np.zeros((3,3) ,float) + h[0,0] = a + h[0,1] = b*math.cos(gamma) + h[0,2] = c*math.cos(beta) + h[1,1] = b*math.sin(gamma) + h[1,2] = (b*c*math.cos(alpha) - h[0,1]*h[0,2])/h[1,1] + h[2,2] = math.sqrt(c**2 - h[0,2]**2 - h[1,2]**2) + return h + +def invert_ut3x3(h): + """Inverts a 3*3 upper triangular matrix. + + Args: + h: An upper triangular 3*3 matrix. + + Returns: + The inverse matrix of h. + """ + + ih = np.zeros((3,3), float) + for i in range(3): + ih[i,i] = 1.0/h[i,i] + ih[0,1] = -ih[0,0]*h[0,1]*ih[1,1] + ih[1,2] = -ih[1,1]*h[1,2]*ih[2,2] + ih[0,2] = -ih[1,2]*h[0,1]*ih[0,0] - ih[0,0]*h[0,2]*ih[2,2] + return ih + +def eigensystem_ut3x3(p): + """Finds the eigenvector matrix of a 3*3 upper-triangular matrix. + + Args: + p: An upper triangular 3*3 matrix. + + Returns: + An array giving the 3 eigenvalues of p, and the eigenvector matrix of p. + """ + + eigp = np.zeros((3,3), float) + eigvals = np.zeros(3, float) + + for i in range(3): + eigp[i,i] = 1 + eigp[0,1] = -p[0,1]/(p[0,0] - p[1,1]) + eigp[1,2] = -p[1,2]/(p[1,1] - p[2,2]) + eigp[0,2] = -(p[0,1]*p[1,2] - p[0,2]*p[1,1] + p[0,2]*p[2,2])/((p[0,0] - p[2,2])*(p[2,2] - p[1,1])) + + for i in range(3): + eigvals[i] = p[i,i] + return eigp, eigvals + +def det_ut3x3(h): + """Calculates the determinant of a 3*3 upper triangular matrix. + + Note that the volume of the system box when the lattice vector matrix is + expressed as a 3*3 upper triangular matrix is given by the determinant of + this matrix. + + Args: + h: An upper triangular 3*3 matrix. + + Returns: + The determinant of h. + """ + + return h[0,0]*h[1,1]*h[2,2] + +MINSERIES=1e-8 +def exp_ut3x3(h): + """Computes the matrix exponential for a 3x3 upper-triangular matrix. + + Note that for 3*3 upper triangular matrices this is the best method, as + it is stable. This is terms which become unstable as the + denominator tends to zero are calculated via a Taylor series in this limit. + + Args: + h: An upper triangular 3*3 matrix. + + Returns: + The matrix exponential of h. + """ + eh = np.zeros((3,3), float) + e00 = math.exp(h[0,0]) + e11 = math.exp(h[1,1]) + e22 = math.exp(h[2,2]) + eh[0,0] = e00 + eh[1,1] = e11 + eh[2,2] = e22 + + if (abs((h[0,0] - h[1,1])/h[0,0])>MINSERIES): + r01 = (e00 - e11)/(h[0,0] - h[1,1]) + else: + r01 = e00*(1 + (h[0,0] - h[1,1])*(0.5 + (h[0,0] - h[1,1])/6.0)) + if (abs((h[1,1] - h[2,2])/h[1,1])>MINSERIES): + r12 = (e11 - e22)/(h[1,1] - h[2,2]) + else: + r12 = e11*(1 + (h[1,1] - h[2,2])*(0.5 + (h[1,1] - h[2,2])/6.0)) + if (abs((h[2,2] - h[0,0])/h[2,2])>MINSERIES): + r02 = (e22 - e00)/(h[2,2] - h[0,0]) + else: + r02 = e22*(1 + (h[2,2] - h[0,0])*(0.5 + (h[2,2] - h[0,0])/6.0)) + + eh[0,1] = h[0,1]*r01 + eh[1,2] = h[1,2]*r12 + + eh[0,2] = h[0,2]*r02 + if (abs((h[2,2] - h[0,0])/h[2,2])>MINSERIES): + eh[0,2] += h[0,1]*h[0,2]*(r01 - r12)/(h[0,0] - h[2,2]) + elif (abs((h[1,1] - h[0,0])/h[1,1])>MINSERIES): + eh[0,2] += h[0,1]*h[0,2]*(r12 - r02)/(h[1,1] - h[0,0]) + elif (abs((h[1,1]-h[2,2])/h[1,1])>MINSERIES): + eh[0,2] += h[0,1]*h[0,2]*(r02 - r01)/(h[2,2] - h[1,1]) + else: + eh[0,2] += h[0,1]*h[0,2]*e00/24.0*(12.0 + 4*(h[1,1] + h[2,2] - 2*h[0,0]) + (h[1,1] - h[0,0])*(h[2,2] - h[0,0])) + + return eh + +def root_herm(A): + """Gives the square root of a hermitian matrix with real eigenvalues. + + Args: + A: A Hermitian matrix. + + Returns: + A matrix such that itself matrix multiplied by its transpose gives the + original matrix. + """ + + if not (abs(A.T - A) < 1e-10).all(): + raise ValueError("Non-Hermitian matrix passed to root_herm function") + eigvals, eigvecs = np.linalg.eigh(A) + ndgrs = len(eigvals) + diag = np.zeros((ndgrs,ndgrs)) + for i in range(ndgrs): + if eigvals[i] >= 0: + diag[i,i] = math.sqrt(eigvals[i]) + else: + warning("Zeroing negative element in matrix square root: " + str(eigvals[i]), verbosity.low) + diag[i,i] = 0 + return np.dot(eigvecs, np.dot(diag, eigvecs.T)) + diff --git a/tools/i-pi/ipi/utils/messages.py b/tools/i-pi/ipi/utils/messages.py new file mode 100644 index 000000000..928eb537a --- /dev/null +++ b/tools/i-pi/ipi/utils/messages.py @@ -0,0 +1,155 @@ +"""Utility functions for outputting messages, diagnostics and errors' + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + Verbosity: Concise class to check the selected level of output + +Functions: + banner: Prints the program welcome "screen" + help: Prints the input syntax help + info: Prints some information to standard output, depending on the level of verbosity + warning: Same as info, but with a "!W!" prefix and optionally printing a stack trace +""" + +import traceback, sys + +__all__ = ['Verbosity', 'verbosity',' help', 'banner', 'info', 'warning'] + + +VERB_QUIET = 0 +VERB_LOW = 1 +VERB_MEDIUM = 2 +VERB_HIGH = 3 +VERB_DEBUG = 4 + +class Verbosity(object): + """Class used to determine what to print to standard output. + + Attributes: + level: Determines what level of output to print. + """ + + level = "low" + + def __getattr__(self, name): + """Determines whether a certain verbosity level is + less than or greater than the stored value. + + Used to decide whether or not a certain info or warning string + should be output. + + Args: + name: The verbosity level at which the info/warning string + will be output. + """ + + if name is "quiet": + return self.level >= VERB_QUIET + elif name is "low": + return self.level >= VERB_LOW + elif name is "medium": + return self.level >= VERB_MEDIUM + elif name is "high": + return self.level >= VERB_HIGH + elif name is "debug": + return self.level >= VERB_DEBUG + + def __setattr__(self, name, value): + """Sets the verbosity level + + Args: + name: The name of what to set. Should always be 'level'. + value: The value to set the verbosity to. + + Raises: + ValueError: Raised if either the name or the level is not + a valid option. + """ + + if name == "level": + if value == "quiet": + level = VERB_QUIET + elif value == "low": + level = VERB_LOW + elif value == "medium": + level = VERB_MEDIUM + elif value == "high": + level = VERB_HIGH + elif value == "debug": + level = VERB_DEBUG + else: + raise ValueError("Invalid verbosity level " + str(value) + " specified.") + super(Verbosity,self).__setattr__("level", level) + + +verbosity = Verbosity() + +def help(): + """Prints out a help string.""" + + print """usage: %s input """%sys.argv[0] + +def banner(): + """Prints out a banner.""" + + print """ + ____ ____ ____ ____ +/ \ / \ / \ / \ +| ################################# | +\__#_/ \____/ \____/ \_#__/ + # _ _______ _____ # + # (_) |_ __ \|_ _| # v. 1.0 + # __ ______ | |__) | | | # + Y [ ||______|| ___/ | | # A Python interface for (ab initio) + 0 0 | | _| |_ _| |_ # (path integral) molecular dynamics. + # [___] |_____| |_____| # + __#_ ____ ____ _#__ +/ # \ / \ / \ / # \ +| ################################# | +\____/ \____/ \____/ \____/ + + """ + + +def info(text="", show=True ): + """Prints a warning message. + + Args: + text: The text of the information message. + show: A boolean describing whether or not the message should be + printed. + """ + + if not show: + return + print text + +def warning(text="", show=True): + """Prints a warning message. + + Args: + text: The text of the information message. + show: A boolean describing whether or not the message should be + printed. + """ + + if not show: + return + if verbosity.debug: + traceback.print_stack(file=sys.stdout) + print " !W! " + text diff --git a/tools/i-pi/ipi/utils/nmtransform.py b/tools/i-pi/ipi/utils/nmtransform.py new file mode 100644 index 000000000..a8c258d52 --- /dev/null +++ b/tools/i-pi/ipi/utils/nmtransform.py @@ -0,0 +1,283 @@ +"""Contains functions for doing the inverse and forward normal mode transforms. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + nm_trans: Uses matrix multiplication to do normal mode transformations. + nm_rescale: Uses matrix multiplication to do ring polymer contraction + or expansion. + nm_fft: Uses fast-Fourier transforms to do normal modes transformations. + +Functions: + mk_nm_matrix: Makes a matrix to transform between the normal mode and bead + representations. + mk_rs_matrix: Makes a matrix to transform between one number of beads and + another. Higher normal modes in the case of an expansion are set to zero. +""" + +__all__ = ['nm_trans', 'nm_rescale', 'nm_fft'] + +import numpy as np +from ipi.utils.messages import verbosity, info + +def mk_nm_matrix(nbeads): + """Gets the matrix that transforms from the bead representation + to the normal mode representation. + + If we return from this function a matrix C, then we transform between the + bead and normal mode representation using q_nm = C . q_b, q_b = C.T . q_nm + + Args: + nbeads: The number of beads. + """ + + b2nm = np.zeros((nbeads,nbeads)) + b2nm[0,:] = np.sqrt(1.0) + for j in range(nbeads): + for i in range(1, nbeads/2+1): + b2nm[i,j] = np.sqrt(2.0)*np.cos(2*np.pi*j*i/float(nbeads)) + for i in range(nbeads/2+1, nbeads): + b2nm[i,j] = np.sqrt(2.0)*np.sin(2*np.pi*j*i/float(nbeads)) + if (nbeads%2) == 0: + b2nm[nbeads/2,0:nbeads:2] = 1.0 + b2nm[nbeads/2,1:nbeads:2] = -1.0 + return b2nm/np.sqrt(nbeads) + +def mk_rs_matrix(nb1, nb2): + """Gets the matrix that transforms a path with nb1 beads into one with + nb2 beads. + + If we return from this function a matrix T, then we transform between the + system with nb1 bead and the system of nb2 beads using q_2 = T . q_1 + + Args: + nb1: The initial number of beads. + nb2: The final number of beads. + """ + + if (nb1 == nb2): + return np.identity(nb1,float) + elif (nb1 > nb2): + b1_nm = mk_nm_matrix(nb1) + nm_b2 = mk_nm_matrix(nb2).T + + #builds the "reduction" matrix that picks the normal modes we want to keep + b1_b2 = np.zeros((nb2, nb1), float) + b1_b2[0,0] = 1.0 + for i in range(1, nb2/2+1): + b1_b2[i,i] = 1.0 + b1_b2[nb2-i, nb1-i] = 1.0 + if (nb2 % 2 == 0): + #if we are contracting down to an even number of beads, then we have to + #pick just one of the last degenerate modes to match onto the single + #stiffest mode in the new path + b1_b2[nb2/2, nb1-nb2/2] = 0.0 + + rs_b1_b2 = np.dot(nm_b2, np.dot(b1_b2, b1_nm)) + return rs_b1_b2*np.sqrt(float(nb2)/float(nb1)) + else: + return mk_rs_matrix(nb2, nb1).T*(float(nb2)/float(nb1)) + + +class nm_trans: + """Helper class to perform beads <--> normal modes transformation. + + Attributes: + _b2nm: The matrix to transform between the bead and normal mode + representations. + _nm2b: The matrix to transform between the normal mode and bead + representations. + """ + + def __init__(self, nbeads): + """Initializes nm_trans. + + Args: + nbeads: The number of beads. + """ + + self._b2nm = mk_nm_matrix(nbeads) + self._nm2b = self._b2nm.T + + def b2nm(self, q): + """Transforms a matrix to the normal mode representation. + + Args: + q: A matrix with nbeads rows, in the bead representation. + """ + + return np.dot(self._b2nm,q) + + def nm2b(self, q): + """Transforms a matrix to the bead representation. + + Args: + q: A matrix with nbeads rows, in the normal mode representation. + """ + + return np.dot(self._nm2b,q) + + +class nm_rescale: + """Helper class to rescale a ring polymer between different number of beads. + + Attributes: + _b1tob2: The matrix to transform between a ring polymer with 'nbeads1' + beads and another with 'nbeads2' beads. + _b2tob1: The matrix to transform between a ring polymer with 'nbeads2' + beads and another with 'nbeads1' beads. + """ + + def __init__(self, nbeads1, nbeads2): + """Initializes nm_rescale. + + Args: + nbeads1: The initial number of beads. + nbeads2: The rescaled number of beads. + """ + + self._b1tob2 = mk_rs_matrix(nbeads1,nbeads2) + self._b2tob1 = self._b1tob2.T*(float(nbeads1)/float(nbeads2)) + + def b1tob2(self, q): + """Transforms a matrix from one value of beads to another. + + Args: + q: A matrix with nbeads1 rows, in the bead representation. + """ + + return np.dot(self._b1tob2,q) + + def b2tob1(self, q): + """Transforms a matrix from one value of beads to another. + + Args: + q: A matrix with nbeads2 rows, in the bead representation. + """ + + return np.dot(self._b2tob1,q) + + + +class nm_fft: + """Helper class to perform beads <--> normal modes transformation + using Fast Fourier transforms. + + Attributes: + fft: The fast-Fourier transform function to transform between the + bead and normal mode representations. + ifft: The inverse fast-Fourier transform function to transform + between the normal mode and bead representations. + qdummy: A matrix to hold a copy of the bead positions to transform + them to the normal mode representation. + qnmdummy: A matrix to hold a copy of the normal modes to transform + them to the bead representation. + nbeads: The number of beads. + natoms: The number of atoms. + """ + + def __init__(self, nbeads, natoms): + """Initializes nm_trans. + + Args: + nbeads: The number of beads. + natoms: The number of atoms. + """ + + self.nbeads = nbeads + self.natoms = natoms + try: + import pyfftw + info("Import of PyFFTW successful", verbosity.medium) + self.qdummy = pyfftw.n_byte_align_empty((nbeads, 3*natoms), 16, 'float32') + self.qnmdummy = pyfftw.n_byte_align_empty((nbeads//2+1, 3*natoms), 16, 'complex64') + self.fft = pyfftw.FFTW(self.qdummy, self.qnmdummy, axes=(0,), direction='FFTW_FORWARD') + self.ifft = pyfftw.FFTW(self.qnmdummy, self.qdummy, axes=(0,), direction='FFTW_BACKWARD') + except ImportError: #Uses standard numpy fft library if nothing better + #is available + info("Import of PyFFTW unsuccessful, using NumPy library instead", verbosity.medium) + self.qdummy = np.zeros((nbeads,3*natoms), dtype='float32') + self.qnmdummy = np.zeros((nbeads//2+1,3*natoms), dtype='complex64') + def dummy_fft(self): + self.qnmdummy = np.fft.rfft(self.qdummy, axis=0) + def dummy_ifft(self): + self.qdummy = np.fft.irfft(self.qnmdummy, n=self.nbeads, axis=0) + self.fft = lambda: dummy_fft(self) + self.ifft = lambda: dummy_ifft(self) + + def b2nm(self, q): + """Transforms a matrix to the normal mode representation. + + Args: + q: A matrix with nbeads rows and 3*natoms columns, + in the bead representation. + """ + + if self.nbeads == 1: + return q + self.qdummy[:] = q + self.fft() + if self.nbeads == 2: + return self.qnmdummy.real/np.sqrt(self.nbeads) + + nmodes = self.nbeads/2 + + self.qnmdummy /= np.sqrt(self.nbeads) + qnm = np.zeros(q.shape) + qnm[0,:] = self.qnmdummy[0,:].real + + if self.nbeads % 2 == 0: + self.qnmdummy[1:-1,:] *= np.sqrt(2) + (qnm[1:nmodes,:], qnm[self.nbeads:nmodes:-1,:]) = (self.qnmdummy[1:-1,:].real, self.qnmdummy[1:-1,:].imag) + qnm[nmodes,:] = self.qnmdummy[nmodes,:].real + else: + self.qnmdummy[1:,:] *= np.sqrt(2) + (qnm[1:nmodes+1,:], qnm[self.nbeads:nmodes:-1,:]) = (self.qnmdummy[1:,:].real, self.qnmdummy[1:,:].imag) + + return qnm + + def nm2b(self, qnm): + """Transforms a matrix to the bead representation. + + Args: + qnm: A matrix with nbeads rows and 3*natoms columns, + in the normal mode representation. + """ + + if self.nbeads == 1: + return qnm + if self.nbeads == 2: + self.qnmdummy[:] = qnm + self.ifft() + return self.qdummy*np.sqrt(self.nbeads) + + nmodes = self.nbeads/2 + odd = self.nbeads - 2*nmodes # 0 if even, 1 if odd + + qnm_complex = np.zeros((nmodes+1, len(qnm[0,:])), complex) + qnm_complex[0,:] = qnm[0,:] + if not odd: + (qnm_complex[1:-1,:].real, qnm_complex[1:-1,:].imag) = (qnm[1:nmodes,:], qnm[self.nbeads:nmodes:-1,:]) + qnm_complex[1:-1,:] /= np.sqrt(2) + qnm_complex[nmodes,:] = qnm[nmodes,:] + else: + (qnm_complex[1:,:].real, qnm_complex[1:,:].imag) = (qnm[1:nmodes+1,:], qnm[self.nbeads:nmodes:-1,:]) + qnm_complex[1:,:] /= np.sqrt(2) + + self.qnmdummy[:] = qnm_complex + self.ifft() + return self.qdummy*np.sqrt(self.nbeads) diff --git a/tools/i-pi/ipi/utils/prng.py b/tools/i-pi/ipi/utils/prng.py new file mode 100644 index 000000000..c6626828a --- /dev/null +++ b/tools/i-pi/ipi/utils/prng.py @@ -0,0 +1,129 @@ +"""Contains the classes used to generate pseudo-random numbers. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Allows the user to specify a seed for the random number generator. +These are used in initialising the velocities and in stochastic thermostats. +The state of the random number generator is kept track of, so that the if the +simulation is restarted from a checkpoint, we will see the same dynamics as if +it had not been stopped. + +Classes: + Random: An interface between the numpy.random module and the user. +""" + +__all__ = ['Random'] + +import numpy as np +import math + +class Random(object): + """Class to interface with the standard pseudo-random number generator. + + Initialises the standard numpy pseudo-random number generator from a seed + at the beginning of the simulation, and keeps track of the state so that + it can be output to the checkpoint files throughout the simulation. + + Attributes: + rng: The random number generator to be used. + seed: The seed number to start the generator. + state: A tuple of five objects giving the current state of the random + number generator. The first is the type of random number generator, + here 'MT19937', the second is an array of 624 integers, the third + is the current position in the array that is being read from, the + fourth gives whether it has a gaussian random number stored, and + the fifth is this stored Gaussian random number, or else the last + Gaussian random number returned. + """ + + def __init__(self, seed=12345, state=None): + """Initialises Random. + + Args: + seed: An optional seed giving an integer to initialise the state with. + state: An optional state tuple to initialise the state with. + """ + + self.rng = np.random.mtrand.RandomState(seed=seed) + self.seed = seed + if state is None: + self.rng.seed(seed) + else: + self.state = state + + def get_state(self): + """Interface to the standard get_state() function.""" + + return self.rng.get_state() + + def set_state(self, value): + """Interface to the standard set_state() function. + + Should only be used with states generated from another similar random + number generator, such as one from a previous run. + """ + + return self.rng.set_state(value) + + state=property(get_state, set_state) + + @property + def u(self): + """Interface to the standard random_sample() function. + + Returns: + A pseudo-random number from a uniform distribution from 0-1. + """ + + return self.rng.random_sample() + + @property + def g(self): + """Interface to the standard standard_normal() function. + + Returns: + A pseudo-random number from a normal Gaussian distribution. + """ + + return self.rng.standard_normal() + + def gamma(self, k, theta=1.0): + """Interface to the standard gamma() function. + + Args: + k: Shape parameter for the gamma distribution. + theta: Mean of the distribution. + + Returns: + A random number from a gamma distribution with a shape k and a + mean value theta. + """ + + return self.rng.gamma(k,theta) + + def gvec(self, shape): + """Interface to the standard_normal array function. + + Args: + shape: The shape of the array to be returned. + + Returns: + An array with the required shape where each element is taken from + a normal Gaussian distribution. + """ + + return self.rng.standard_normal(shape) diff --git a/tools/i-pi/ipi/utils/softexit.py b/tools/i-pi/ipi/utils/softexit.py new file mode 100644 index 000000000..5d22d9de6 --- /dev/null +++ b/tools/i-pi/ipi/utils/softexit.py @@ -0,0 +1,73 @@ +"""Utility functions for killing the wrapper softly. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + Softexit: Concise class to manage cleaning up in case of an emergency exit. +""" + +import traceback, sys +from ipi.utils.messages import verbosity, warning + +__all__ = ['Softexit', 'softexit'] + + +class Softexit(object): + """Class to deal with stopping a simulation half way through. + + Holds the functions used to clean up a simulation that has been + stopped early, either because of a SIGTERM signal or because the + user has added an EXIT file to the directory in which it is + running. This will then properly shut down the socket interface, + and print out a RESTART file for the appropriate time step. + + Attributes: + flist: A list of functions used to close down the socket + interface. + """ + + def __init__(self): + """Initializes SoftExit.""" + + self.flist = [] + + def register(self, func): + """Adds another function to flist. + + Args: + func: The function to be added to flist. + """ + + self.flist.append(func) + + def trigger(self, message=""): + """Halts the simulation. + + Prints out a warning message, then runs all the exit functions in flist + before terminating the simulation. + + Args: + message: The message to output to standard output. + """ + + if message != "": + warning("Soft exit has been requested with message: '" + message + "'. Cleaning up.", verbosity.low) + for f in self.flist: + f() + sys.exit() + +softexit = Softexit() diff --git a/tools/i-pi/ipi/utils/units.py b/tools/i-pi/ipi/utils/units.py new file mode 100644 index 000000000..93d05ea0f --- /dev/null +++ b/tools/i-pi/ipi/utils/units.py @@ -0,0 +1,358 @@ +"""Contains fundamental constants in atomic units. + +Copyright (C) 2013, Joshua More and Michele Ceriotti + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +Classes: + Constants: Class whose members are fundamental constants. + Elements: Class which contains the mass of different elements + Units: Class which contains the methods needed to transform + between different systems of units. +""" + +import re +from ipi.utils.messages import verbosity, info + +__all__ = ['Constants', 'Elements', 'unit_to_internal', 'unit_to_user'] + + +class Constants: + """Class whose members are fundamental constants. + + Attributes: + kb: Boltzmann constant. + hbar: Reduced Planck's constant. + amu: Atomic mass unit. + """ + + kb = 1.0 + hbar = 1.0 + amu = 1822.8885 + + +class Elements(dict): + """Class which contains the mass of different elements. + + Attributes: + mass_list: A dictionary containing the masses of different elements. + Has the form {"label": Mass in a.m.u.}. Note that the generic "X" + label is assumed to be an electron. + """ + + mass_list={ + "X" : 1.0000/Constants.amu, + "H" : 1.00794, + "D" : 2.0141, + "Z" : 1.382943, #an interpolated H-D atom, based on y=1/sqrt(m) scaling + "H2" : 2.0160, + "He" : 4.002602, + "Li" : 6.9410, + "Be" : 9.012182, + "B" : 10.811, + "C" : 12.0107, + "N" : 14.00674, + "O" : 15.9994, + "F" : 18.998403, + "Ne" : 20.1797, + "Na" : 22.989770, + "Mg" : 24.3050, + "Al" : 26.981538, + "Si" : 28.0855, + "P" : 30.973761, + "S" : 32.066, + "Cl" : 35.4527, + "Ar" : 39.9480, + "K" : 39.0983, + "Ca" : 40.078, + "Sc" : 44.955910, + "Ti" : 47.867, + "V" : 50.9415, + "Cr" : 51.9961, + "Mn" : 54.938049, + "Fe" : 55.845, + "Co" : 58.933200, + "Ni" : 58.6934, + "Cu" : 63.546, + "Zn" : 65.39, + "Ga" : 69.723, + "Ge" : 72.61, + "As" : 74.92160, + "Se" : 78.96, + "Br" : 79.904, + "Kr" : 83.80, + "Rb" : 85.4678, + "Sr" : 87.62, + "Y" : 88.90585, + "Zr" : 91.224, + "Nb" : 92.90638, + "Mo" : 95.94, + "Tc" : 98, + "Ru" : 101.07, + "Rh" : 102.90550, + "Pd" : 106.42, + "Ag" : 107.8682, + "Cd" : 112.411, + "In" : 114.818, + "Sn" : 118.710, + "Sb" : 121.760, + "Te" : 127.60, + "I" : 126.90447, + "Xe" : 131.29, + "Cs" : 132.90545, + "Ba" : 137.327, + "La" : 138.9055, + "Ce" : 140.166, + "Pr" : 140.90765, + "Nd" : 144.24, + "Pm" : 145, + "Sm" : 150.36, + "Eu" : 151.964, + "Gd" : 157.25, + "Tb" : 158.92534, + "Dy" : 162.50, + "Ho" : 164.93032, + "Er" : 167.26, + "Tm" : 168.93241, + "Yb" : 173.04, + "Lu" : 174.967, + "Hf" : 178.49, + "Ta" : 180.9479, + "W" : 183.84, + "Re" : 186.207, + "Os" : 190.23, + "Ir" : 192.217, + "Pt" : 195.078, + "Au" : 196.96655, + "Hg" : 200.59, + "Tl" : 204.3833, + "Pb" : 207.2, + "Bi" : 208.98038, + "Po" : 209, + "At" : 210, + "Rn" : 222, + "Fr" : 223, + "Ra" : 226, + "Ac" : 227, + "Th" : 232.0381, + "Pa" : 231.03588, + "U" : 238.0289, + "Np" : 237, + "Pu" : 244, + "Am" : 243, + "Cm" : 247, + "Bk" : 247, + "Cf" : 251, + "Es" : 252, + "Fm" : 257, + "Md" : 258, + "No" : 259, + "Lr" : 262, + "Rf" : 267, + "Db" : 268, + "Sg" : 269, + "Bh" : 270, + "Hs" : 269, + "Mt" : 278, + "Ds" : 281, + "Rg" : 280, + "Cn" : 285, + "Uut" : 286, + "Fl" : 289, + "Uup" : 288, + "Lv" : 293, + "Uus" : 294, + "Uuo" : 294 + } + + @classmethod + def mass(cls, label): + """Function to access the mass_list attribute. + + Note that this does not require an instance of the Elements class to be + created, as this is a class method. Therefore using Elements.mass(label) + will give the mass of the element with the atomic symbol given by label. + + Args: + label: The atomic symbol of the atom whose mass is required. + + Returns: + A float giving the mass of the atom with atomic symbol label. + """ + + try: + return cls.mass_list[label]*Constants.amu + except KeyError: + info("Unknown element given, you must specify the mass", verbosity.low) + return -1.0 + +# these are the conversion FROM the unit stated to internal (atomic) units +UnitMap = { + "undefined": { + "" : 1.00 + }, + "energy": { + "" : 1.00, + "atomic_unit" : 1.00, + "electronvolt" : 0.036749326, + "j/mol" : 0.00000038087989, + "cal/mol" : 0.0000015946679, + "kelvin" : 3.1668152e-06 + }, + "temperature": { + "" : 1.00, + "atomic_unit" : 1.00, + "kelvin" : 3.1668152e-06 + }, + "time": { + "" : 1.00, + "atomic_unit" : 1.00, + "second" : 4.1341373e+16 + }, + "frequency" : { # NB Internally, ANGULAR frequencies are used. + "" : 1.00, + "atomic_unit" : 1.00, + "inversecm" : 4.5563353e-06, + "hertz*rad" : 2.4188843e-17, + "hertz" : 1.5198298e-16 + }, + "ms-momentum" : { # TODO fill up units here (mass-scaled momentum) + "" : 1.00, + "atomic_unit" : 1.00 + }, + "length" : { + "" : 1.00, + "atomic_unit" : 1.00, + "angstrom" : 1.8897261, + "meter" : 1.8897261e+10 + }, + "volume" : { + "" : 1.00, + "atomic_unit" : 1.00, + "angstrom3" : 6.748334231, + }, + "velocity": { + "" : 1.00, + "atomic_unit" : 1.00, + "m/s" : 4.5710289e-7 + }, + "momentum": { + "" : 1.00, + "atomic_unit" : 1.00 + }, + "mass": { + "" : 1.00, + "atomic_unit" : 1.00, + "dalton" : 1.00*Constants.amu, + "electronmass" : 1.00 + }, + "pressure" : { + "" : 1.00, + "atomic_unit" : 1.00, + "bar" : 3.398827377e-9, + "atmosphere" : 3.44386184e-9, + "pascal" : 3.398827377e-14 + }, + "density" : { + "" : 1.00, + "atomic_unit" : 1.00, + "g/cm3" : 162.67263 + }, + "force" : { + "" : 1.00, + "atomic_unit" : 1.00, + "newton" : 12137805 + } + +} + +# a list of magnitude prefixes +UnitPrefix = { + "" : 1.0, + "yotta" : 1e24, "zetta" : 1e21, "exa" : 1e18, "peta" : 1e15, + "tera" : 1e12, "giga" : 1e9, "mega" : 1e6, "kilo" : 1e3, + "milli" : 1e-3, "micro" : 1e-6, "nano" : 1e-9, "pico" : 1e-12, + "femto" : 1e-15, "atto" : 1e-18, "zepto" : 1e-21, "yocto" : 1e-24 +} + +# builds a RE to match prefix and split out the base unit +UnitPrefixRE = "" +for key in UnitPrefix: + UnitPrefixRE = UnitPrefixRE + key + "|" +UnitPrefixRE = " *(" + UnitPrefixRE[1:] + ")(.*) *" +UnitPrefixRE = re.compile(UnitPrefixRE) + +######################################################################## +# Atomic units are used EVERYWHERE internally. In order to quickly # +# interface with any "outside" unit, we set up a simple conversion # +# library. # +######################################################################## + +def unit_to_internal(family, unit, number): + """Converts a number of given dimensions and units into internal units. + + Args: + family: The dimensionality of the number. + unit: The units 'number' is originally in. + number: The value of the parameter in the units 'unit'. + + Returns: + The number in internal units. + + Raises: + ValueError: Raised if the user specified units aren't given in the + UnitMap dictionary. + IndexError: Raised if the programmer specified dimensionality for the + parameter isn't in UnitMap. Shouldn't happen, for obvious reasons. + TypeError: Raised if the prefix is correct, but the base unit is not, in + the user specified unit string. + """ + + if not (family == "number" or family in UnitMap): + raise IndexError(family + " is an undefined units kind.") + if family == "number": + return number + + + if unit == "": + prefix = "" + base = "" + else: + m = UnitPrefixRE.match(unit); + if m is None: + raise ValueError("Unit " + unit + " is not structured with a prefix+base syntax.") + prefix = m.group(1) + base = m.group(2) + + if not prefix in UnitPrefix: + raise TypeError(prefix + " is not a valid unit prefix.") + if not base in UnitMap[family]: + raise TypeError(base + " is an undefined unit for kind " + family + ".") + + return number*UnitMap[family][base]*UnitPrefix[prefix] + +def unit_to_user(family, unit, number): + """Converts a number of given dimensions from internal to user units. + + Args: + family: The dimensionality of the number. + unit: The units 'number' should be changed to. + number: The value of the parameter in internal units. + + Returns: + The number in the user specified units + """ + + return number/unit_to_internal(family, unit, 1.0) diff --git a/tools/i-pi/licenses/license_GPL.txt b/tools/i-pi/licenses/license_GPL.txt new file mode 100644 index 000000000..10926e87f --- /dev/null +++ b/tools/i-pi/licenses/license_GPL.txt @@ -0,0 +1,675 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/tools/i-pi/licenses/license_MIT.txt b/tools/i-pi/licenses/license_MIT.txt new file mode 100644 index 000000000..3a85b00ea --- /dev/null +++ b/tools/i-pi/licenses/license_MIT.txt @@ -0,0 +1,21 @@ + MIT license + Modern Style with sublicense + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/i-pi/manual.pdf b/tools/i-pi/manual.pdf new file mode 100644 index 000000000..b4a239d43 Binary files /dev/null and b/tools/i-pi/manual.pdf differ