Merge branch 'develop' into collected-small-changes

This commit is contained in:
Axel Kohlmeyer
2024-06-04 17:16:16 -04:00
122 changed files with 304 additions and 29495 deletions

View File

@ -148,6 +148,14 @@ performance characteristics on NVIDIA GPUs. Both, the KOKKOS
and the :ref:`GPU package <PKG-GPU>` are maintained
and allow running LAMMPS with GPU acceleration.
i-PI tool
---------
.. versionchanged:: TBD
The i-PI tool has been removed from the LAMMPS distribution. Instead,
instructions to install i-PI from PyPi via pip are provided.
restart2data tool
-----------------

View File

@ -305,6 +305,8 @@ of the contents of the :f:mod:`LIBLAMMPS` Fortran interface to LAMMPS.
:ftype extract_setting: function
:f extract_global: :f:func:`extract_global`
:ftype extract_global: function
:f map_atom: :f:func:`map_atom`
:ftype map_atom: function
:f extract_atom: :f:func:`extract_atom`
:ftype extract_atom: function
:f extract_compute: :f:func:`extract_compute`

View File

@ -13,6 +13,7 @@ This section documents the following functions:
- :cpp:func:`lammps_extract_setting`
- :cpp:func:`lammps_extract_global_datatype`
- :cpp:func:`lammps_extract_global`
- :cpp:func:`lammps_map_atom`
--------------------
@ -120,3 +121,8 @@ subdomains and processors.
.. doxygenfunction:: lammps_extract_global
:project: progguide
-----------------------
.. doxygenfunction:: lammps_map_atom
:project: progguide

View File

@ -90,7 +90,7 @@ Miscellaneous tools
* :ref:`LAMMPS coding standards <coding_standard>`
* :ref:`emacs <emacs>`
* :ref:`i-pi <ipi>`
* :ref:`i-PI <ipi>`
* :ref:`kate <kate>`
* :ref:`LAMMPS shell <lammps_shell>`
* :ref:`LAMMPS GUI <lammps_gui>`
@ -376,21 +376,40 @@ See README file in the tools/fep directory.
.. _ipi:
i-pi tool
i-PI tool
-------------------
The tools/i-pi directory contains a version of the i-PI package, with
all the LAMMPS-unrelated files removed. It is provided so that it can
be used with the :doc:`fix ipi <fix_ipi>` command to perform
path-integral molecular dynamics (PIMD).
.. versionchanged:: TBD
The tools/i-pi directory used to contain a bundled version of the i-PI
software package for use with LAMMPS. This version, however, was
removed in 06/2024.
The i-PI package was created and is maintained by Michele Ceriotti,
michele.ceriotti at gmail.com, to interface to a variety of molecular
dynamics codes.
See the tools/i-pi/manual.pdf file for an overview of i-PI, and the
:doc:`fix ipi <fix_ipi>` page for further details on running PIMD
calculations with LAMMPS.
i-PI is now available via PyPi using the pip package manager at:
https://pypi.org/project/ipi/
Here are the commands to set up a virtual environment and install
i-PI into it with all its dependencies.
.. code-block:: sh
python -m venv ipienv
source ipienv/bin/activate
pip install --upgrade pip
pip install ipi
To install the development version from GitHub, please use:
.. code-block:: sh
pip install git+https://github.com/i-pi/i-pi.git
For further information, please consult the [i-PI home
page](https://ipi-code.org).
----------

View File

@ -79,10 +79,16 @@ setting the *reset* switch.
Obtaining i-PI
""""""""""""""
A simple version of the i-PI package, containing only files needed for use
with LAMMPS, is provided in the tools/i-pi directory. We recommend you
obtain the latest stable version from the github repository of i-PI,
or from the python package index.
Here are the commands to set up a virtual environment and install
i-PI into it with all its dependencies via the PyPi repository and
the pip package manager.
.. code-block:: sh
python -m venv ipienv
source ipienv/bin/activate
pip install --upgrade pip
pip install ipi
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@ -125,7 +131,7 @@ Related commands
.. _IPICPC2:
**(IPI-CPC-2019)** Kapil et al., Comp Phys Comm 236, 214223 (2019).
**(IPI-CPC-2019)** Kapil et al., Comp Phys Comm 236, 214-223 (2019).
.. _ipihome:

View File

@ -992,6 +992,7 @@ emax
Emax
Embt
emi
Emilie
Emmrich
emol
eN
@ -1732,6 +1733,7 @@ Kalia
Kamberaj
Kantorovich
Kapfer
Kapil
Karhunen
Karls
Karlsruhe
@ -1763,8 +1765,10 @@ keflag
Keir
Kelchner
Kelkar
Kemppainen
Kemper
kepler
Kemppainen
keV
Keyes
keyfile
@ -2483,6 +2487,7 @@ Nevery
newfile
Newns
newtype
nextsort
Neyts
Nf
nfft
@ -2672,6 +2677,7 @@ nzlo
ocl
octahedral
octants
Odegard
Ohara
O'Hearn
ohenrich
@ -3288,6 +3294,7 @@ Saidi
saip
Salanne
Salles
sametag
sandia
Sandia
sandybrown
@ -3405,6 +3412,7 @@ sinh
sinusoid
sinusoidally
SiO
Siochi
Sirk
Sival
sizeI
@ -3452,6 +3460,7 @@ solvated
solvation
someuser
Sorensen
sortfreq
soundspeed
sourceforge
Souza
@ -4150,6 +4159,7 @@ yy
yz
Zagaceta
Zannoni
Zavada
Zavattieri
zbl
ZBL

View File

@ -101,6 +101,7 @@ liblammpsplugin_t *liblammpsplugin_load(const char *lib)
ADDSYM(extract_setting);
ADDSYM(extract_global_datatype);
ADDSYM(extract_global);
ADDSYM(map_atom);
ADDSYM(extract_atom_datatype);
ADDSYM(extract_atom);

View File

@ -146,6 +146,7 @@ struct _liblammpsplugin {
int (*extract_setting)(void *, const char *);
int *(*extract_global_datatype)(void *, const char *);
void *(*extract_global)(void *, const char *);
void *(*map_atom)(void *, const void *);
int *(*extract_atom_datatype)(void *, const char *);
void *(*extract_atom)(void *, const char *);

View File

@ -113,6 +113,9 @@ MODULE LIBLAMMPS
PROCEDURE :: get_mpi_comm => lmp_get_mpi_comm
PROCEDURE :: extract_setting => lmp_extract_setting
PROCEDURE :: extract_global => lmp_extract_global
PROCEDURE, PRIVATE :: lmp_map_atom_int
PROCEDURE, PRIVATE :: lmp_map_atom_big
GENERIC :: map_atom => lmp_map_atom_int, lmp_map_atom_big
PROCEDURE :: extract_atom => lmp_extract_atom
PROCEDURE :: extract_compute => lmp_extract_compute
PROCEDURE :: extract_fix => lmp_extract_fix
@ -508,6 +511,13 @@ MODULE LIBLAMMPS
TYPE(c_ptr) :: lammps_extract_global
END FUNCTION lammps_extract_global
FUNCTION lammps_map_atom(handle, tag) BIND(C)
IMPORT :: c_ptr, c_int
IMPLICIT NONE
TYPE(c_ptr), INTENT(IN), VALUE :: handle, tag
INTEGER(c_int) :: lammps_map_atom
END FUNCTION lammps_map_atom
FUNCTION lammps_extract_atom_datatype(handle, name) BIND(C)
IMPORT :: c_ptr, c_int
IMPLICIT NONE
@ -1323,6 +1333,38 @@ CONTAINS
END SELECT
END FUNCTION
! equivalent function to lammps_map_atom (for 32-bit integer tags)
INTEGER FUNCTION lmp_map_atom_int(self, id)
CLASS(lammps), INTENT(IN) :: self
INTEGER(c_int), INTENT(IN), TARGET :: id
INTEGER(c_int64_t), TARGET :: id64
TYPE(c_ptr) :: Cptr
IF (SIZE_TAGINT == 8) THEN
id64 = id
Cptr = C_LOC(id64)
ELSE
Cptr = C_LOC(id)
END IF
lmp_map_atom_int = lammps_map_atom(self%handle, Cptr) + 1
END FUNCTION lmp_map_atom_int
! equivalent function to lammps_map_atom (for 64-bit integer tags)
INTEGER FUNCTION lmp_map_atom_big(self, id)
CLASS(lammps), INTENT(IN) :: self
INTEGER(c_int64_t), INTENT(IN), TARGET :: id
INTEGER(c_int), TARGET :: id32
TYPE(c_ptr) :: Cptr
IF (SIZE_TAGINT == 8) THEN
Cptr = C_LOC(id)
ELSE
id32 = id
Cptr = C_LOC(id32)
END IF
lmp_map_atom_big = lammps_map_atom(self%handle, Cptr) + 1
END FUNCTION lmp_map_atom_big
! equivalent function to lammps_extract_atom
! the assignment is actually overloaded so as to bind the pointers to
! lammps data based on the information available from LAMMPS

View File

@ -269,6 +269,9 @@ class lammps(object):
self.lib.lammps_extract_global_datatype.restype = c_int
self.lib.lammps_extract_compute.argtypes = [c_void_p, c_char_p, c_int, c_int]
self.lib.lammps_map_atom.argtypes = [c_void_p, c_void_p]
self.lib.lammps_map_atom.restype = c_int
self.lib.lammps_get_thermo.argtypes = [c_void_p, c_char_p]
self.lib.lammps_get_thermo.restype = c_double
@ -893,6 +896,8 @@ class lammps(object):
veclen = vec_dict[name]
elif name == 'respa_dt':
veclen = self.extract_global('respa_levels',LAMMPS_INT)
elif name == 'sametag':
veclen = self.extract_setting('nall')
else:
veclen = 1
@ -926,6 +931,24 @@ class lammps(object):
else: return target_type(ptr[0])
return None
# -------------------------------------------------------------------------
# map global atom ID to local atom index
def map_atom(self, id):
"""Map a global atom ID (aka tag) to the local atom index
This is a wrapper around the :cpp:func:`lammps_map_atom`
function of the C-library interface.
:param id: atom ID
:type id: int
:return: local index
:rtype: int
"""
tag = self.c_tagint(id)
return self.lib.lammps_map_atom(self.lmp, pointer(tag))
# -------------------------------------------------------------------------
# extract per-atom info datatype

View File

@ -1399,6 +1399,16 @@ int lammps_extract_global_datatype(void * /*handle*/, const char *name)
if (strcmp(name,"special_lj") == 0) return LAMMPS_DOUBLE;
if (strcmp(name,"special_coul") == 0) return LAMMPS_DOUBLE;
if (strcmp(name,"map_style") == 0) return LAMMPS_INT;
#if defined(LAMMPS_BIGBIG)
if (strcmp(name,"map_tag_max") == 0) return LAMMPS_BIGINT;
#else
if (strcmp(name,"map_tag_max") == 0) return LAMMPS_INT;
#endif
if (strcmp(name,"sametag") == 0) return LAMMPS_INT;
if (strcmp(name,"sortfreq") == 0) return LAMMPS_INT;
if (strcmp(name,"nextsort") == 0) return LAMMPS_BIGINT;
if (strcmp(name,"q_flag") == 0) return LAMMPS_INT;
if (strcmp(name,"units") == 0) return LAMMPS_STRING;
@ -1651,6 +1661,26 @@ report the "native" data type. The following tables are provided:
- double
- 4
- special :doc:`pair weighting factors <special_bonds>` for Coulomb interactions (first element is always 1.0)
* - map_style
- int
- 1
- :doc:`atom map setting <atom_modify>`: 0 = none, 1 = array, 2 = hash, 3 = yes
* - map_tag_max
- bigint or int
- 1
- largest atom ID that can be mapped to a local index (bigint only with -DLAMMPS_BIGBIG)
* - sametag
- int
- nlocal+nghost
- index of next local atom with the same ID in ascending order. -1 signals end.
* - sortfreq
- int
- 1
- frequency of atom sorting. 0 means sorting is off.
* - nextsort
- bigint
- 1
- timestep when atoms are sorted next
* - q_flag
- int
- 1
@ -1846,6 +1876,12 @@ void *lammps_extract_global(void *handle, const char *name)
if (strcmp(name,"q_flag") == 0) return (void *) &lmp->atom->q_flag;
if (strcmp(name,"map_style") == 0) return (void *) &lmp->atom->map_style;
if (strcmp(name,"map_tag_max") == 0) return (void *) &lmp->atom->map_tag_max;
if (strcmp(name,"sametag") == 0) return (void *) lmp->atom->sametag;
if (strcmp(name,"sortfreq") == 0) return (void *) &lmp->atom->sortfreq;
if (strcmp(name,"nextsort") == 0) return (void *) &lmp->atom->nextsort;
// global constants defined by units
if (strcmp(name,"boltz") == 0) return (void *) &lmp->force->boltz;
@ -1873,6 +1909,37 @@ void *lammps_extract_global(void *handle, const char *name)
/* ---------------------------------------------------------------------- */
/** Map global atom ID to local atom index
*
\verbatim embed:rst
.. versionadded:: TBD
This function returns an integer that corresponds to the local atom
index for an atom with the global atom ID *id*. The atom ID is passed
as a void pointer so that it can use the same interface for either a
32-bit or 64-bit tagint. The size of the tagint can be determined
using :cpp:func:`lammps_extract_setting`.
\endverbatim
*
* \param handle pointer to a previously created LAMMPS instance
* \param id void pointer to the atom ID (of data type tagint, i.e. 32-bit or 64-bit integer)
* \return local atom index or -1 if the atom is not found or no map exists
* */
int lammps_map_atom(void *handle, const void *id)
{
auto lmp = (LAMMPS *) handle;
auto tag = (const tagint *) id;
if (lmp->atom->map_style > Atom::MAP_NONE)
return lmp->atom->map(*tag);
else
return -1;
}
/* ---------------------------------------------------------------------- */
/** Get data type of a LAMMPS per-atom property
*
\verbatim embed:rst

View File

@ -162,6 +162,8 @@ int lammps_extract_setting(void *handle, const char *keyword);
int lammps_extract_global_datatype(void *handle, const char *name);
void *lammps_extract_global(void *handle, const char *name);
int lammps_map_atom(void *handle, const void *id);
/* ----------------------------------------------------------------------
* Library functions to read or modify per-atom data in LAMMPS
* ---------------------------------------------------------------------- */

View File

@ -1,4 +0,0 @@
set tabstop=3
set softtabstop=3
set shiftwidth=3
set expandtab

View File

@ -1 +0,0 @@
include README.rst

18
tools/i-pi/README.md Normal file
View File

@ -0,0 +1,18 @@
This folder used to contain a bundled version of [i-PI](https://ipi-code.org)
but the bundled version was removed in 06/2024.
i-PI is available via PyPi using the pip package manager at:
https://pypi.org/project/ipi/
Here are the commands to set up a virtual environment and
install i-PI into it with all its dependencies.
``` sh
python -m venv ipienv
source ipienv/bin/activate
pip install --upgrade pip
pip install ipi
```
For further information and other methods of installing i-PI,
please consult the [i-PI home page](https://ipi-code.org).

View File

@ -1,49 +0,0 @@
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)

View File

@ -1,215 +0,0 @@
! 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 neighbour 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

View File

@ -1,42 +0,0 @@
# 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

View File

@ -1,14 +0,0 @@
-- 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.

View File

@ -1,283 +0,0 @@
! 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 neighbour 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

View File

@ -1,174 +0,0 @@
! 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

View File

@ -1,309 +0,0 @@
! 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
! initialize 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

View File

@ -1,147 +0,0 @@
/* 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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <netdb.h>
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<len )
{ nr=read(sockfd,&data[n],len-n); n+=nr; }
if (n == 0) error("Error reading from socket: server has quit or connection broke");
}

View File

@ -1,70 +0,0 @@
# Makefile for the q-TIP4P-F examples
#
# 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 <http.//www.gnu.org/licenses/>.
.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 ..

View File

@ -1,70 +0,0 @@
-- 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
<socket mode="unix"> <port> port_no </port>
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.

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +0,0 @@
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

View File

@ -1,37 +0,0 @@
<simulation>
<initialize nbeads='2'>
<file mode='pdb'> water_298K.pdb </file>
<velocities mode="thermal" units='kelvin'> 298 </velocities>
</initialize>
<output prefix='gle_lammps'>
<properties stride='1' filename='out'> [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, kinetic_cv{kelvin}, potential{kelvin}, pressure_cv{megapascal}] </properties>
<trajectory filename='pos' stride='20'> positions </trajectory>
</output>
<total_steps>500000</total_steps>
<prng><seed>32344</seed></prng>
<forces>
<socket mode='unix'>
<address>piglet_2</address>
</socket>
</forces>
<ensemble mode='nvt'>
<thermostat mode='nm_gle'>
<A shape='(2,9,9)'>
[
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
]
</A>
<C shape='(2,9,9)' units='kelvin'>
[
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
]
</C>
</thermostat>
<timestep units='femtosecond'> 0.1</timestep>
<temperature units='kelvin'>298</temperature>
</ensemble>
</simulation>

View File

@ -1,650 +0,0 @@
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

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +0,0 @@
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

View File

@ -1,40 +0,0 @@
<simulation>
<initialize nbeads='4'>
<file mode='pdb'> water_298K.pdb </file>
<velocities mode="thermal" units='kelvin'> 298 </velocities>
</initialize>
<output prefix='gle_lammps'>
<properties stride='1' filename='out'> [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, kinetic_cv{kelvin}, potential{kelvin}, pressure_cv{megapascal}] </properties>
<trajectory filename='pos' stride='20'> positions </trajectory>
</output>
<total_steps>500000</total_steps>
<prng><seed>32343</seed></prng>
<forces>
<socket mode='unix'>
<address>piglet_4</address>
</socket>
</forces>
<ensemble mode='nvt'>
<thermostat mode='nm_gle'>
<A shape='(4,9,9)'>
[
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
]
</A>
<C shape='(4,9,9)' units='kelvin'>
[
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
]
</C>
</thermostat>
<timestep units='femtosecond'> 0.1</timestep>
<temperature units='kelvin'>298</temperature>
</ensemble>
</simulation>

View File

@ -1,650 +0,0 @@
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

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +0,0 @@
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

View File

@ -1,49 +0,0 @@
<simulation>
<initialize nbeads='8'>
<file mode='pdb'> water_298K.pdb </file>
<velocities mode="thermal" units='kelvin'> 298 </velocities>
</initialize>
<output prefix='gle_lammps'>
<properties stride='1' filename='out'> [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, kinetic_cv{kelvin}, potential{kelvin}, pressure_cv{megapascal}] </properties>
<trajectory filename='pos' stride='20'> positions </trajectory>
</output>
<total_steps>500000</total_steps>
<prng><seed>32342</seed></prng>
<forces>
<socket mode='unix'>
<address>piglet_8</address>
</socket>
</forces>
<ensemble mode='nvt'>
<thermostat mode='nm_gle'>
<A shape='(8,9,9)'>
[
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
]
</A>
<C shape='(8,9,9)' units='kelvin'>
[
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
]
</C>
</thermostat>
<timestep units='femtosecond'> 0.1</timestep>
<temperature units='kelvin'>298</temperature>
</ensemble>
</simulation>

View File

@ -1,650 +0,0 @@
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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,33 +0,0 @@
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

View File

@ -1,34 +0,0 @@
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

View File

@ -1,27 +0,0 @@
<simulation>
<initialize nbeads='32'>
<file mode='pdb'> water_298K.pdb </file>
<velocities mode="thermal" units='kelvin'> 298 </velocities>
</initialize>
<output prefix='rpc'>
<properties stride='1' filename='out'> [ step, time{picosecond}, conserved, temperature{kelvin}, kinetic_cv, potential, pressure_cv{megapascal}] </properties>
<trajectory filename='pos' stride='20'> positions </trajectory>
</output>
<total_steps>500000</total_steps>
<prng><seed>32346</seed></prng>
<forces>
<socket mode='unix'>
<address>rpc_short</address>
</socket>
<socket mode='unix' nbeads='5'>
<address> rpc_long </address>
</socket>
</forces>
<ensemble mode='nvt'>
<thermostat mode='svr'>
<tau units='femtosecond'>25</tau>
</thermostat>
<timestep units='femtosecond'> 0.25</timestep>
<temperature units='kelvin'>298</temperature>
</ensemble>
</simulation>

View File

@ -1,650 +0,0 @@
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

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +0,0 @@
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

View File

@ -1,24 +0,0 @@
<simulation>
<initialize nbeads='32'>
<file mode='pdb'> water_298K.pdb </file>
<velocities mode="thermal" units='kelvin'> 298 </velocities>
</initialize>
<output prefix='no_rpc'>
<properties stride='1' filename='out'> [ step, time{picosecond}, conserved, temperature{kelvin}, kinetic_cv, potential, pressure_cv{megapascal}] </properties>
<trajectory filename='pos' stride='20'> positions </trajectory>
</output>
<total_steps>500000</total_steps>
<prng><seed>32345</seed></prng>
<forces>
<socket mode='unix'>
<address>no_rpc</address>
</socket>
</forces>
<ensemble mode='nvt'>
<thermostat mode='svr'>
<tau units='femtosecond'>25</tau>
</thermostat>
<timestep units='femtosecond'> 0.25</timestep>
<temperature units='kelvin'>298</temperature>
</ensemble>
</simulation>

View File

@ -1,650 +0,0 @@
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

View File

@ -1,6 +0,0 @@
-- 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.

View File

@ -1,111 +0,0 @@
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

View File

@ -1,110 +0,0 @@
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

View File

@ -1,26 +0,0 @@
<simulation verbosity='high'>
<initialize nbeads='4'>
<file mode='pdb' units='angstrom'> our_ref.pdb </file>
<velocities mode='thermal' units='kelvin'> 25 </velocities>
</initialize>
<output prefix='tut1'>
<properties filename='md' stride='1'> [step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, kinetic_cv{kelvin}] </properties>
<properties filename='force' stride='20'> [atom_f{piconewton}(atom=0;bead=0)] </properties>
<trajectory filename='pos' stride='100' format='pdb' cell_units='angstrom'> positions{angstrom} </trajectory>
<checkpoint filename='checkpoint' stride='1000' overwrite='True'/>
</output>
<total_steps> 5000 </total_steps>
<forces>
<socket mode="inet">
<address>localhost</address>
<port> 31415 </port>
</socket>
</forces>
<ensemble mode='nvt'>
<thermostat mode='pile_g'>
<tau units='femtosecond'> 25 </tau>
</thermostat>
<timestep units='femtosecond'> 1 </timestep>
<temperature units='kelvin'> 25 </temperature>
</ensemble>
</simulation>

View File

@ -1,736 +0,0 @@
<simulation verbosity='high'>
<step>5000</step>
<beads natoms='108' nbeads='4'>
<q shape='(4, 324)'>
[ -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 ]
</q>
<p shape='(4, 324)'>
[ 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 ]
</p>
<m shape='(108)'>
[ 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 ]
</m>
<names shape='(108)'>
[ 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 ]
</names>
</beads>
<total_steps>5000</total_steps>
<cell shape='(3, 3)'>
[ 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 ]
</cell>
<forces>
<socket>
<port>31415</port>
</socket>
</forces>
<output prefix=''>
<properties shape='(6)' filename='tut1.md'>
[ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin},
kinetic_cv{kelvin} ]
</properties>
<properties stride='20' shape='(1)' filename='tut1.force'> [ atom_f{piconewton}(atom=0;bead=0) ] </properties>
<trajectory format='pdb' filename='tut1.pos' stride='100' cell_units='angstrom'>positions{angstrom}</trajectory>
<checkpoint stride='1000' filename='tut1.checkpoint'>6</checkpoint>
</output>
<prng>
<state shape='(624)'>
[ 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 ]
</state>
<seed>12345</seed>
<set_pos>432</set_pos>
<gauss> -8.30560467e-01</gauss>
</prng>
<ensemble mode='nvt'>
<thermostat mode='pile_g'>
<tau> 1.03353433e+03</tau>
<ethermo> 2.24648494e-02</ethermo>
</thermostat>
<timestep> 4.13413730e+01</timestep>
<temperature> 7.91703800e-05</temperature>
</ensemble>
</simulation>

View File

@ -1,742 +0,0 @@
<simulation verbosity='high'>
<beads natoms='108' nbeads='4'>
<q shape='(4, 324)'>
[ -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 ]
</q>
<p shape='(4, 324)'>
[ 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 ]
</p>
<m shape='(108)'>
[ 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 ]
</m>
<names shape='(108)'>
[ 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 ]
</names>
</beads>
<total_steps>100000</total_steps>
<cell shape='(3, 3)'>
[ 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 ]
</cell>
<forces>
<socket>
<port>31415</port>
</socket>
</forces>
<output prefix=''>
<properties shape='(8)' filename='tut2a.md'>
[ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin},
kinetic_cv{kelvin}, pressure_cv{megapascal}, volume ]
</properties>
<properties stride='20' shape='(1)' filename='tut2a.force'> [ atom_f{piconewton}(atom=0;bead=0) ] </properties>
<trajectory format='pdb' filename='tut2a.pos' stride='100' cell_units='angstrom'>positions{angstrom}</trajectory>
<checkpoint stride='1000' filename='tut2a.checkpoint'/>
</output>
<prng>
<state shape='(624)'>
[ 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 ]
</state>
<seed>12345</seed>
<set_pos>432</set_pos>
<gauss> -8.30560467e-01</gauss>
</prng>
<ensemble mode='npt'>
<pressure> 0 </pressure>
<barostat mode='isotropic'>
<thermostat mode='langevin'>
<tau units='femtosecond'> 250 </tau>
</thermostat>
<tau units='femtosecond'> 250 </tau>
</barostat>
<thermostat mode='pile_g'>
<tau> 1.03353433e+03</tau>
<ethermo> 2.24648494e-02</ethermo>
</thermostat>
<timestep> 4.13413730e+01</timestep>
<temperature> 7.91703800e-05</temperature>
</ensemble>
</simulation>

View File

@ -1,33 +0,0 @@
<simulation verbosity='high'>
<initialize nbeads='4'>
<file mode='chk'> tutorial-1_RESTART </file>
</initialize>
<output prefix='tut2b'>
<properties filename='md' stride='1'> [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, kinetic_cv{kelvin}, pressure_cv{megapascal}, volume ] </properties>
<properties filename='force' stride='20'> [atom_f{piconewton}(atom=0;bead=0)] </properties>
<trajectory filename='pos' stride='100' format='pdb' cell_units='angstrom'> positions{angstrom} </trajectory>
<checkpoint filename='checkpoint' stride='1000' overwrite='True'/>
</output>
<total_steps>100000</total_steps>
<prng> <seed> 31415 </seed> </prng>
<forces>
<socket mode="inet">
<address>localhost</address>
<port> 31415 </port>
</socket>
</forces>
<ensemble mode='npt'>
<barostat mode='isotropic'>
<thermostat mode='langevin'>
<tau units='femtosecond'> 250 </tau>
</thermostat>
<tau units='femtosecond'> 250 </tau>
</barostat>
<thermostat mode='pile_g'>
<tau units='femtosecond'> 25 </tau>
</thermostat>
<timestep units='femtosecond'> 1 </timestep>
<temperature units='kelvin'> 25 </temperature>
<pressure> 0 </pressure>
</ensemble>
</simulation>

View File

@ -1,174 +0,0 @@
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

View File

@ -1,31 +0,0 @@
<simulation verbosity='medium'>
<initialize nbeads='16'>
<file mode='chk'> tutorial-3_RESTART </file>
</initialize>
<output prefix='tut3_npt'>
<properties filename='md' stride='1'> [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, kinetic_cv{kelvin}, pressure_cv{megapascal}, volume ] </properties>
<trajectory filename='pos' stride='100' format='pdb' cell_units='angstrom'> positions{angstrom} </trajectory>
<checkpoint filename='checkpoint' stride='1000' overwrite='True'/>
</output>
<total_steps> ??? </total_steps>
<forces>
<socket mode="???">
<address>localhost</address>
<port> 31415 </port>
</socket>
</forces>
<ensemble mode='npt'>
<barostat mode='???'>
<thermostat mode='???'>
<tau units='femtosecond'> ??? </tau>
</thermostat>
<tau units='femtosecond'> ??? </tau>
</barostat>
<thermostat mode='???'>
<tau units='femtosecond'> ??? </tau>
</thermostat>
<timestep units='femtosecond'> ??? </timestep>
<temperature units='kelvin'>25</temperature>
<pressure> 0 </pressure>
</ensemble>
</simulation>

View File

@ -1,25 +0,0 @@
<simulation verbosity='medium'>
<initialize nbeads='16'>
<file mode='pdb'> our_ref.pdb </file>
<velocities mode='thermal' units='kelvin'> ??? </velocities>
</initialize>
<output prefix='tut3_nvt'>
<properties filename='md' stride='1'> [ step, time{picosecond}, conserved{kelvin}, temperature{kelvin}, potential{kelvin}, kinetic_cv{kelvin}, pressure_cv{megapascal} ] </properties>
<trajectory filename='pos' stride='100' format='pdb' cell_units='angstrom'> positions{angstrom} </trajectory>
<checkpoint filename='checkpoint' stride='1000' overwrite='True'/>
</output>
<total_steps> ??? </total_steps>
<forces>
<socket mode="???">
<address>localhost</address>
<port> 31415 </port>
</socket>
</forces>
<ensemble mode='nvt'>
<thermostat mode='???'>
<tau units='femtosecond'> ??? </tau>
</thermostat>
<timestep units='femtosecond'> ??? </timestep>
<temperature units='kelvin'>25</temperature>
</ensemble>
</simulation>

View File

@ -1,60 +0,0 @@
#!/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])

View File

@ -1,14 +0,0 @@
-- 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.

View File

@ -1 +0,0 @@
__all__ = ["engine", "inputs", "interfaces", "utils"]

View File

@ -1,18 +0,0 @@
-- 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.

View File

@ -1,3 +0,0 @@
__all__ = ["atoms", "cell", "simulation", "forces", "ensembles", "properties",
"thermostats", "barostats", "beads", "outputs", "normalmodes",
"initializer" ]

View File

@ -1,269 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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):
"""Initializes 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):
"""Initializes 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 initialization 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

View File

@ -1,450 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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):
"""Initializes 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

View File

@ -1,323 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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):
"""Initializes 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

View File

@ -1,140 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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):
"""Initializes 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)

View File

@ -1,565 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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):
"""Initializes 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 which 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):
"""Initializes 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):
"""Initializes 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 which 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):
"""Initializes 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 which 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):
"""Initializes 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()

View File

@ -1,781 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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):
"""Initializes 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):
"""Initializes 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

View File

@ -1,549 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 specifying 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 specifying 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 initialized 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

View File

@ -1,400 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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

View File

@ -1,378 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 misspelled
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 misspelled
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 behavior 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()

File diff suppressed because it is too large Load Diff

View File

@ -1,232 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 initialize, 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
initialization 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):
"""Initializes 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 initial 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()

View File

@ -1,884 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 generalized langevin equation
thermostat.
ThermoNMGLE: Holds the algorithms for a generalized langevin equation
thermostat in the normal mode representation.
ThermoNMGLEG: Holds the algorithms for a generalized 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):
"""Initializes 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
initialized 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):
"""Initializes 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
initialized 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):
"""Initializes 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 initialized 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):
"""Initializes 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 initialized 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):
"""Initializes 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 initialized 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 auxiliary degrees of freedom.
s: An array holding all the momenta, including the ones for the
auxiliary 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 colored noise."""
SST = Constants.kb*(self.C - np.dot(self.T,np.dot(self.C,self.T.T)))
# Uses a symmetric 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):
"""Initializes 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
initialized 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 reinitialize 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 initialized 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 initialized 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 auxiliary degrees of freedom.
nb: The number of beads.
s: An array holding all the momenta, including the ones for the
auxiliary 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 explicitly)."""
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):
"""Initializes 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
initialized 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 reinitialize 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 initialized 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 initialized 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)

View File

@ -1,24 +0,0 @@
-- 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.

View File

@ -1,3 +0,0 @@
__all__ = [ 'barostats', 'cell', 'simulation', 'ensembles', 'thermostats',
'interface', 'forces', 'atoms', 'beads', 'prng', 'outputs',
'normalmodes', 'initializer']

View File

@ -1,121 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 initialize 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 ""

View File

@ -1,107 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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

View File

@ -1,137 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 initialize 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 <beads> 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 <beads> 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 <beads> 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 <beads> input.")
return beads

View File

@ -1,77 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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)

View File

@ -1,185 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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")

View File

@ -1,176 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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))

View File

@ -1,406 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 )

View File

@ -1,125 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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.")

View File

@ -1,84 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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() )

View File

@ -1,323 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 <checkpoint /> 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))

View File

@ -1,101 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 initialize 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 initialize 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() ))

View File

@ -1,193 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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.")

View File

@ -1,195 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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 colored noise langevin thermostat to the cartesian representation of the momenta, 'nm_gle' attaches a colored 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)

View File

@ -1,8 +0,0 @@
-- 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.

View File

@ -1 +0,0 @@
__all__ = ["sockets"]

View File

@ -1,773 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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. Initializes 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):
"""Initializes 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 initialization 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):
"""Initializes 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 initialization 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 initialization. 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 initializes 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()

View File

@ -1,9 +0,0 @@
-- Nosetests directory --
* This is the directory containing the tests that can be run with nosetests.
* Files:
- common.py: Common helper functions 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.

View File

@ -1,96 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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()

View File

@ -1,56 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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)

View File

@ -1,10 +0,0 @@
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

View File

@ -1,10 +0,0 @@
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

View File

@ -1,127 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
"""
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

View File

@ -1,96 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
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"))

View File

@ -1,24 +0,0 @@
"""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 <http.//www.gnu.org/licenses/>.
"""
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)

Some files were not shown because too many files have changed in this diff Show More