Commit dfecd23b authored by Lauri Himanen's avatar Lauri Himanen

Added the parsing of MD velocities, added unit conversion to external...

Added the parsing of MD velocities, added unit conversion to external trajectory and velocity files.
parent d54553aa
......@@ -41,11 +41,11 @@ class CommonMatcher(object):
#=======================================================================
# Globally cached values
self.cache_service.add_cache_object("simulation_cell", single=False, update=True)
self.cache_service.add_cache_object("number_of_scf_iterations", 0)
self.cache_service.add_cache_object("atom_positions", single=False, update=True)
self.cache_service.add_cache_object("atom_labels", single=False, update=False)
self.cache_service.add_cache_object("number_of_atoms", single=False, update=False)
self.cache_service.add("simulation_cell", single=False, update=True)
self.cache_service.add("number_of_scf_iterations", 0)
self.cache_service.add("atom_positions", single=False, update=True)
self.cache_service.add("atom_labels", single=False, update=False)
self.cache_service.add("number_of_atoms", single=False, update=False)
#===========================================================================
# SimpleMatchers
......
......@@ -22,10 +22,10 @@ class CP2KGeoOptParser(MainHierarchicalParser):
#=======================================================================
# Globally cached values
self.cache_service.add_cache_object("number_of_frames_in_sequence", 0)
self.cache_service.add_cache_object("frame_sequence_potential_energy", [])
self.cache_service.add_cache_object("frame_sequence_local_frames_ref", [])
self.cache_service.add_cache_object("geometry_optimization_method")
self.cache_service.add("number_of_frames_in_sequence", 0)
self.cache_service.add("frame_sequence_potential_energy", [])
self.cache_service.add("frame_sequence_local_frames_ref", [])
self.cache_service.add("geometry_optimization_method")
#=======================================================================
# Cache levels
......
......@@ -39,13 +39,31 @@ class CP2KInputParser(BasicParser):
super(CP2KInputParser, self).__init__(file_path, parser_context)
self.input_tree = None
self.input_lines = None
self.unit_mapping = {
# Distance
"BOHR": "bohr",
"M": "m",
"PM": "pm",
"NM": "nm",
"ANGSTROM": "angstrom",
# Time
"S": "s",
"FS": "fs",
"PS": "ps",
"AU_T": "(planckConstant/hartree)",
"WAVENUMBER_T": None,
}
#=======================================================================
# Cached values
self.cache_service.add_cache_object("configuration_periodic_dimensions", single=False, update=False)
self.cache_service.add_cache_object("trajectory_format")
self.cache_service.add_cache_object("each_geo_opt")
self.cache_service.add_cache_object("traj_add_last")
self.cache_service.add("configuration_periodic_dimensions", single=False, update=False)
self.cache_service.add("trajectory_format")
self.cache_service.add("trajectory_unit")
self.cache_service.add("velocity_format")
self.cache_service.add("velocity_unit")
self.cache_service.add("vel_add_last")
self.cache_service.add("each_geo_opt")
self.cache_service.add("traj_add_last")
def parse(self):
......@@ -178,9 +196,25 @@ class CP2KInputParser(BasicParser):
self.setup_force_file_name()
#=======================================================================
# Trajectory file name and print settings
# Trajectory file name
self.setup_trajectory_file_name()
#=======================================================================
# Trajectory file format
self.cache_service["trajectory_format"] = self.input_tree.get_keyword("MOTION/PRINT/TRAJECTORY/FORMAT")
self.cache_service["traj_add_last"] = self.input_tree.get_keyword("MOTION/PRINT/TRAJECTORY/ADD_LAST")
traj_unit = self.input_tree.get_keyword("MOTION/PRINT/TRAJECTORY/UNIT")
pint_traj_unit = self.get_pint_unit_string(traj_unit)
self.cache_service["trajectory_unit"] = pint_traj_unit
#=======================================================================
# Velocity file format
self.cache_service["velocity_format"] = self.input_tree.get_keyword("MOTION/PRINT/VELOCITIES/FORMAT")
self.cache_service["vel_add_last"] = self.input_tree.get_keyword("MOTION/PRINT/VELOCITIES/ADD_LAST")
vel_unit = self.input_tree.get_keyword("MOTION/PRINT/VELOCITIES/UNIT")
pint_vel_unit = self.get_pint_unit_string(vel_unit)
self.cache_service["velocity_unit"] = pint_vel_unit
#=======================================================================
# Stress tensor calculation method
stress_tensor_method = self.input_tree.get_keyword("FORCE_EVAL/STRESS_TENSOR")
......@@ -214,6 +248,19 @@ class CP2KInputParser(BasicParser):
normalized_path = project_name
return normalized_path
def get_pint_unit_string(self, cp2k_unit_string):
"""Translate the CP2K unit definition into a valid pint unit.
"""
units = re.split('[\^\-\+\*\d]+', cp2k_unit_string)
for unit in units:
if unit == "":
continue
pint_unit = self.unit_mapping.get(unit.upper())
if pint_unit is None:
return None
cp2k_unit_string = cp2k_unit_string.replace(unit, pint_unit)
return cp2k_unit_string
def setup_force_file_name(self):
"""Setup the force file path.
"""
......@@ -229,11 +276,9 @@ class CP2KInputParser(BasicParser):
"""
traj_format = self.input_tree.get_keyword("MOTION/PRINT/TRAJECTORY/FORMAT")
traj_filename = self.input_tree.get_keyword("MOTION/PRINT/TRAJECTORY/FILENAME")
self.cache_service["traj_add_last"] = self.input_tree.get_keyword("MOTION/PRINT/TRAJECTORY/ADD_LAST")
self.cache_service["each_geo_opt"] = self.input_tree.get_keyword("MOTION/PRINT/TRAJECTORY/EACH/GEO_OPT")
if traj_filename is None:
traj_filename = ""
self.cache_service["trajectory_format"] = traj_format
extension_map = {
"XYZ": "xyz",
"XMOL": "xyz",
......@@ -323,24 +368,7 @@ class CP2KInputParser(BasicParser):
else:
keyword_value = split[1]
keyword_name = split[0].upper()
try:
self.input_tree.set_keyword(path + "/" + keyword_name, keyword_value)
except UnboundLocalError:
print line
# Here we store some exceptional print settings that are
# inportant to the parsing. These dont exist in the input tree
# because they take much space and are not really important
# otherwise.
# if path == "FORCE_EVAL/PRINT/FORCES":
# if keyword_name == "FILENAME":
# self.force_file_name = keyword_value
# if path == "MOTION/PRINT/TRAJECTORY":
# if keyword_name == "FILENAME":
# self.trajectory_file_name = keyword_value
# if path == "MOTION/PRINT/TRAJECTORY":
# if keyword_name == "FORMAT":
# self.trajectory_format = keyword_value
self.input_tree.set_keyword(path + "/" + keyword_name, keyword_value)
def fill_metadata(self):
"""Goes through the input data and pushes everything to the
......
......@@ -7,7 +7,6 @@ import cp2kparser.generic.csvparsing
from nomadcore.caching_backend import CachingLevel
from nomadcore.unit_conversion.unit_conversion import convert_unit
import logging
import math
logger = logging.getLogger("nomad")
......@@ -23,6 +22,7 @@ class CP2KMDParser(MainHierarchicalParser):
super(CP2KMDParser, self).__init__(file_path, parser_context)
self.setup_common_matcher(CommonMatcher(parser_context))
self.traj_iterator = None
self.vel_iterator = None
self.energy_iterator = None
self.cell_iterator = None
self.n_steps = None
......@@ -168,28 +168,35 @@ class CP2KMDParser(MainHierarchicalParser):
# Files
coord_filename = section.get_latest_value("x_cp2k_md_coordinates_filename")
velocities_filename = section.get_latest_value("x_cp2k_md_velocities_filename")
vel_filename = section.get_latest_value("x_cp2k_md_velocities_filename")
energies_filename = section.get_latest_value("x_cp2k_md_energies_filename")
cell_filename = section.get_latest_value("x_cp2k_md_simulation_cell_filename")
self.file_service.set_file_id(coord_filename, "coordinates")
self.file_service.set_file_id(velocities_filename, "velocities")
coord_filepath = self.file_service.set_file_id(coord_filename, "coordinates")
vel_filepath = self.file_service.set_file_id(vel_filename, "velocities")
cell_filepath = self.file_service.set_file_id(cell_filename, "cell")
energies_filepath = self.file_service.set_file_id(energies_filename, "energies")
# Setup trajectory iterator
traj_format = self.cache_service["trajectory_format"]
traj_file = self.file_service.get_file_by_id("coordinates")
if traj_format is not None and traj_file is not None:
if traj_format is not None and coord_filepath is not None:
# Use special parsing for CP2K pdb files because they don't follow the proper syntax
if traj_format == "PDB":
self.traj_iterator = cp2kparser.generic.csvparsing.iread(traj_file, columns=[3, 4, 5], start="CRYST", end="END")
self.traj_iterator = cp2kparser.generic.csvparsing.iread(coord_filepath, columns=[3, 4, 5], start="CRYST", end="END")
else:
try:
self.traj_iterator = cp2kparser.generic.configurationreading.iread(traj_file)
self.traj_iterator = cp2kparser.generic.configurationreading.iread(coord_filepath)
except ValueError:
pass
# Setup velocity iterator
vel_format = self.cache_service["velocity_format"]
if vel_format is not None and vel_filepath is not None:
try:
self.vel_iterator = cp2kparser.generic.configurationreading.iread(vel_filepath)
except ValueError:
pass
# Setup energy file iterator
if energies_filepath is not None:
self.energy_iterator = cp2kparser.generic.csvparsing.iread(energies_filepath, columns=[0, 1, 2, 3, 4, 5, 6], comments="#")
......@@ -204,7 +211,7 @@ class CP2KMDParser(MainHierarchicalParser):
# single configuration calculations
freqs = {
"output": [self.output_freq, True],
"coordinates": [self.coord_freq, True],
"trajectory": [self.coord_freq, True],
"velocities": [self.velo_freq, True],
"energies": [self.energy_freq, True],
"cell": [self.cell_freq, True],
......@@ -213,7 +220,7 @@ class CP2KMDParser(MainHierarchicalParser):
# See if the files actually exist
traj_file = self.file_service.get_file_by_id("coordinates")
if traj_file is None:
freqs["coordinates"][1] = False
freqs["trajectory"][1] = False
velocities_file = self.file_service.get_file_by_id("velocities")
if velocities_file is None:
freqs["velocities"][1] = False
......@@ -224,12 +231,26 @@ class CP2KMDParser(MainHierarchicalParser):
if cell_file is None:
freqs["cell"][1] = False
# See if we can determine the units
traj_unit = self.cache_service["trajectory_unit"]
if traj_unit is None:
freqs["coordinates"][1] = False
vel_unit = self.cache_service["velocity_unit"]
if vel_unit is None:
freqs["velocities"][1] = False
# Trajectory print settings
add_last_traj = False
add_last_traj_setting = self.cache_service["traj_add_last"]
if add_last_traj_setting == "NUMERIC" or add_last_traj_setting == "SYMBOLIC":
add_last_traj = True
# Velocities print settings
add_last_vel = False
add_last_vel_setting = self.cache_service["vel_add_last"]
if add_last_vel_setting == "NUMERIC" or add_last_vel_setting == "SYMBOLIC":
add_last_vel = True
last_step = self.n_steps - 1
md_steps = section["x_cp2k_section_md_step"]
......@@ -249,14 +270,24 @@ class CP2KMDParser(MainHierarchicalParser):
single_conf_gids.append(sectionGID)
# Trajectory
if self.traj_iterator is not None:
if (i_step + 1) % freqs["coordinates"][0] == 0 or (i_step == last_step and add_last_traj):
if freqs["trajectory"][1] and self.traj_iterator is not None:
if (i_step + 1) % freqs["trajectory"][0] == 0 or (i_step == last_step and add_last_traj):
try:
pos = next(self.traj_iterator)
except StopIteration:
logger.error("Could not get the next geometries from an external file. It seems that the number of optimization steps in the CP2K outpufile doesn't match the number of steps found in the external trajectory file.")
else:
backend.addArrayValues("atom_positions", pos, unit="angstrom")
backend.addArrayValues("atom_positions", pos, unit=traj_unit)
# Velocities
if freqs["velocities"][1] and self.vel_iterator is not None:
if (i_step + 1) % freqs["velocities"][0] == 0 or (i_step == last_step and add_last_vel):
try:
vel = next(self.vel_iterator)
except StopIteration:
logger.error("Could not get the next velociies from an external file. It seems that the number of optimization steps in the CP2K outpufile doesn't match the number of steps found in the external velocities file.")
else:
backend.addArrayValues("atom_velocities", vel, unit=vel_unit)
# Energy file
if self.energy_iterator is not None:
......@@ -334,31 +365,26 @@ class CP2KMDParser(MainHierarchicalParser):
# Temperature stats
mean_temp = frame_sequence_temperature.mean()
c = frame_sequence_temperature - mean_temp
std_temp = math.sqrt(np.dot(c, c)/frame_sequence_temperature.size)
std_temp = frame_sequence_temperature.std()
backend.addArrayValues("frame_sequence_temperature_stats", np.array([mean_temp, std_temp]))
# Potential energy stats
mean_pot = frame_sequence_potential_energy.mean()
c = frame_sequence_potential_energy - mean_pot
std_pot = math.sqrt(np.dot(c, c)/frame_sequence_potential_energy.size)
std_pot = frame_sequence_potential_energy.std()
backend.addArrayValues("frame_sequence_potential_energy_stats", np.array([mean_pot, std_pot]))
# Kinetic energy stats
mean_kin = frame_sequence_kinetic_energy.mean()
c = frame_sequence_kinetic_energy - mean_kin
std_kin = math.sqrt(np.dot(c, c)/frame_sequence_kinetic_energy.size)
std_kin = frame_sequence_kinetic_energy.std()
backend.addArrayValues("frame_sequence_kinetic_energy_stats", np.array([mean_kin, std_kin]))
# Conserved quantity stats
mean_cons = frame_sequence_conserved_quantity.mean()
c = frame_sequence_conserved_quantity - mean_cons
std_cons = math.sqrt(np.dot(c, c)/frame_sequence_conserved_quantity.size)
std_cons = frame_sequence_conserved_quantity.std()
backend.addArrayValues("frame_sequence_conserved_quantity_stats", np.array([mean_cons, std_cons]))
# Pressure stats
if frame_sequence_pressure.size != 0:
mean_pressure = frame_sequence_pressure.mean()
c = frame_sequence_pressure - mean_pressure
std_pressure = math.sqrt(np.dot(c, c)/frame_sequence_pressure.size)
std_pressure = frame_sequence_pressure.std()
backend.addArrayValues("frame_sequence_pressure_stats", np.array([mean_pressure, std_pressure]))
......@@ -13,16 +13,18 @@ def main():
version="0.1",
include_package_data=True,
package_data={
'cp2kparser.versions.cp2k262': ['input_data/*.json', 'input_data/*.pickle'],
'cp2kparser.versions.cp2k262': ['input_data/cp2k_input_tree.pickle'],
},
description="NoMaD parser implementation for CP2K",
description="NoMaD parser implementation for CP2K.",
author="Lauri Himanen",
author_email="lauri.himanen@gmail.com",
author_email="lauri.himanen@aalto.fi",
license="GPL3",
packages=find_packages(),
install_requires=[
'pint',
'numpy',
'mdtraj',
'ase'
],
zip_safe=False
)
......
# Step Nr. Time[fs] Kin.[a.u.] Temp[K] Pot.[a.u.] Cons Qty[a.u.] UsedTime[s]
0 0.000000 0.007125335 300.000000000 -34.336403530 -34.324047996 0.000000000
1 0.500000 0.007358038 309.797597156 -34.336638312 -34.324054403 2.884762674
2 1.000000 0.007414878 312.190722217 -34.336698674 -34.324056733 0.846901371
3 1.500000 0.007245416 305.055835462 -34.336539787 -34.324059082 1.401093733
4 2.000000 0.006832946 287.689475065 -34.336141815 -34.324057040 1.396403917
5 2.500000 0.006241331 262.780549510 -34.335562912 -34.324043992 1.396984484
6 3.000000 0.005685824 239.391887129 -34.335021181 -34.324022684 0.848225022
7 3.500000 0.005480859 230.762197167 -34.334844452 -34.324007616 1.259262077
8 4.000000 0.005835031 245.673981276 -34.335254239 -34.324014235 1.244773507
9 4.500000 0.006642601 279.675336061 -34.336142063 -34.324043595 1.243345618
10 5.000000 0.007478540 314.871094720 -34.337060810 -34.324078054 1.577752011
1 0.500000 0.007358038 309.797597156 -34.336638312 -34.324054403 1.972006205
2 1.000000 0.007414878 312.190722217 -34.336698674 -34.324056733 0.606219402
3 1.500000 0.007245416 305.055835462 -34.336539787 -34.324059082 0.961466920
4 2.000000 0.006832946 287.689475065 -34.336141815 -34.324057040 0.950284295
5 2.500000 0.006241331 262.780549510 -34.335562912 -34.324043992 0.942355444
6 3.000000 0.005685824 239.391887130 -34.335021181 -34.324022684 0.560770646
7 3.500000 0.005480859 230.762197167 -34.334844452 -34.324007616 0.823932849
8 4.000000 0.005835031 245.673981276 -34.335254239 -34.324014235 0.818104614
9 4.500000 0.006642601 279.675336061 -34.336142063 -34.324043595 0.821988390
10 5.000000 0.007478540 314.871094721 -34.337060810 -34.324078054 0.911705150
......@@ -13,7 +13,7 @@
H -3.7808196412 5.3299000381 0.9495250366
H -5.0946313631 4.5838911317 1.1707137947
H -3.7897032638 8.3431761391 0.9355342799
H -5.0853477221 7.6085130826 1.1707220814
H -5.0853477221 7.6085130826 1.1707220815
6
i = 2, time = 1.000, E = -34.3366986739
O -4.5799918657 5.3371286726 1.5575079911
......@@ -56,7 +56,7 @@
H -5.1256013031 7.6656128586 1.1416025367
6
i = 7, time = 3.500, E = -34.3348444523
O -4.5722672947 5.3417167646 1.5466308712
O -4.5722672947 5.3417167645 1.5466308712
O -4.5859384471 8.3550968032 1.5566437253
H -3.8079480022 5.3235909353 1.0032208412
H -5.1403047092 4.5825311319 1.1745837856
......
# Step Nr. Time[fs] Kin.[a.u.] Temp[K] Pot.[a.u.] Cons Qty[a.u.] UsedTime[s]
0 0.000000 0.007125335 300.000000000 -34.330396471 -34.323271136 0.000000000
1 0.500000 0.006533348 275.075405378 -34.329778993 -34.323245645 5.414899533
2 1.000000 0.005583688 235.091633019 -34.328790653 -34.323206964 2.154411584
3 1.500000 0.004815598 202.752506973 -34.327998978 -34.323183380 2.151178669
4 2.000000 0.004566544 192.266488819 -34.327754290 -34.323187747 2.153232291
5 2.500000 0.004788928 201.629598676 -34.327997890 -34.323208962 2.147207047
6 3.000000 0.005184860 218.299664775 -34.328412394 -34.323227533 2.143539461
7 3.500000 0.005470470 230.324748557 -34.328704052 -34.323233583 1.394323290
8 4.000000 0.005526692 232.691881533 -34.328757407 -34.323230715 2.172615763
9 4.500000 0.005371243 226.146979313 -34.328598255 -34.323227013 2.138109658
10 5.000000 0.005062914 213.165337396 -34.328287038 -34.323224123 2.151595352
1 0.500000 0.006533348 275.075405378 -34.329778993 -34.323245645 4.509932898
2 1.000000 0.005583688 235.091633019 -34.328790653 -34.323206964 1.747029864
3 1.500000 0.004815598 202.752506973 -34.327998978 -34.323183380 1.775364981
4 2.000000 0.004566544 192.266488819 -34.327754290 -34.323187747 1.743290058
5 2.500000 0.004788928 201.629598676 -34.327997890 -34.323208962 1.722652494
6 3.000000 0.005184860 218.299664775 -34.328412394 -34.323227533 1.726261713
7 3.500000 0.005470470 230.324748557 -34.328704052 -34.323233583 1.125520098
8 4.000000 0.005526692 232.691881533 -34.328757407 -34.323230715 1.758628617
9 4.500000 0.005371243 226.146979313 -34.328598255 -34.323227013 1.736696822
10 5.000000 0.005062914 213.165337396 -34.328287038 -34.323224123 1.731137692
# Step Time [fs] xx [bar] xy [bar] xz [bar] yx [bar] yy [bar] yz [bar] zx [bar] zy [bar] zz [bar]
0 0.000 3188.5381565467 -910.2707492147 -386.3720503451 -910.2707492147 1595.9782110598 -95.0502014410 -386.3720503451 -95.0502014410 1388.9989761559
1 0.500 2768.9454897172 -1030.8010041752 -1513.5283901605 -1030.8010041752 2170.9082578351 47.6901641714 -1513.5283901605 47.6901641714 1394.4156422630
2 1.000 2027.6966344004 -964.6037791919 -2366.5620483656 -964.6037791919 2426.0161743730 188.1902150437 -2366.5620483656 188.1902150437 1220.5743970236
3 1.500 1001.4586030693 -707.6691243940 -2822.0793506936 -707.6691243940 2310.4643572158 298.8886807875 -2822.0793506936 298.8886807875 886.4284757691
4 2.000 -223.0759992619 -289.5766423965 -2838.1956670980 -289.5766423965 1838.3430325624 354.9795374366 -2838.1956670980 354.9795374366 428.7697054591
5 2.500 -1516.4620326882 228.5480546051 -2450.2192168589 228.5480546051 1087.8444542250 342.5326078152 -2450.2192168589 342.5326078152 -92.3575964328
6 3.000 -2718.1530466205 766.6607468116 -1746.3712491068 766.6607468116 178.2562259178 261.5771290575 -1746.3712491068 261.5771290575 -603.1238347886
7 3.500 -3655.8283071244 1243.5845231699 -836.4733793151 1243.5845231699 -760.6918189509 123.9547839784 -836.4733793151 123.9547839784 -1032.7376376763
8 4.000 -4180.4600166230 1592.2212773121 173.2273916320 1592.2212773121 -1611.4078109125 -51.2035587799 173.2273916320 -51.2035587799 -1323.8694355803
9 4.500 -4207.7062193525 1768.3572863524 1188.7544063041 1768.3572863524 -2279.0968250839 -241.6347039653 1188.7544063041 -241.6347039653 -1433.8355926924
10 5.000 -3741.3379979342 1754.0704259022 2125.6524791911 1754.0704259022 -2698.5126532575 -423.9403447230 2125.6524791911 -423.9403447230 -1336.7518279209
6
i = 0, time = 0.000, E = -34.3303964710
O -0.0051113524 -0.0116682698 -0.0173716502
O 0.0031727484 -0.0214847893 0.0029206097
H -0.0111148574 0.0131903452 0.0096270538
H 0.0162471668 -0.0006417640 0.0094661991
H -0.0139497666 0.0106352478 0.0061900539
H 0.0114080321 0.0105987085 -0.0115332886
6
i = 1, time = 0.500, E = -34.3297789925
O 0.0104184711 -0.0147492931 -0.0106087690
O 0.0077529156 -0.0335024380 0.0029360038
H -0.0103819564 0.0140443537 0.0115032675
H -0.0005638016 0.0013812971 0.0013014818
H -0.0230397325 0.0183506751 0.0109135842
H 0.0160931356 0.0147332260 -0.0164120809
6
i = 2, time = 1.000, E = -34.3287906528
O 0.0225449677 -0.0158482967 -0.0035486174
O 0.0113045381 -0.0411954844 0.0017851754
H -0.0081058938 0.0127629308 0.0119485360
H -0.0158049093 0.0034249646 -0.0058808815
H -0.0291726943 0.0237981010 0.0143670588
H 0.0185824665 0.0168852242 -0.0185461410
6
i = 3, time = 1.500, E = -34.3279989781
O 0.0301292557 -0.0149239480 0.0029973834
O 0.0129491199 -0.0427906935 -0.0000589924
H -0.0044049345 0.0095586397 0.0110741967
H -0.0277182746 0.0053527699 -0.0114121937
H -0.0306922598 0.0256759188 0.0156813735
H 0.0181696678 0.0166148326 -0.0176304536
6
i = 4, time = 2.000, E = -34.3277542904
O 0.0331718646 -0.0123466768 0.0084970575
O 0.0123031729 -0.0379119181 -0.0019452077
H 0.0003664989 0.0050061256 0.0092291761
H -0.0357362404 0.0070718099 -0.0150566089
H -0.0270726116 0.0234577585 0.0144494433
H 0.0147692160 0.0140427165 -0.0140189802
6
i = 5, time = 2.500, E = -34.3279978897
O 0.0322752582 -0.0087239378 0.0125543535
O 0.0097038281 -0.0277783493 -0.0033503256
H 0.0056660495 -0.0001430110 0.0068640720
H -0.0400333118 0.0084921474 -0.0167883893
H -0.0192363915 0.0176437422 0.0108802262
H 0.0090136001 0.0097870683 -0.0085687914
6
i = 6, time = 3.000, E = -34.3284123938
O 0.0281662678 -0.0046881479 0.0148296955
O 0.0060040547 -0.0146480193 -0.0040490901
H 0.0108475167 -0.0051588873 0.0044067330
H -0.0408814111 0.0095038932 -0.0166358603
H -0.0090712790 0.0095284617 0.0056498749
H 0.0020807572 0.0046966693 -0.0023430550
6
i = 7, time = 3.500, E = -34.3287040522
O 0.0214183025 -0.0007505469 0.0150118640
O 0.0021350440 -0.0009240315 -0.0040789292
H 0.0152881345 -0.0094608859 0.0021918792
H -0.0383522483 0.0099829458 -0.0145984164
H 0.0014008229 0.0007139130 -0.0003533513
H -0.0047493882 -0.0004352835 0.0036972916
6
i = 8, time = 4.000, E = -34.3287574070
O 0.0123774810 0.0027469390 0.0128137710
O -0.0012358484 0.0115233857 -0.0036056635
H 0.0185065185 -0.0126488899 0.0004490628
H -0.0322717825 0.0098097107 -0.0106257864
H 0.0106627427 -0.0073787658 -0.0062168665
H -0.0105702119 -0.0050282434 0.0088778036
6
i = 9, time = 4.500, E = -34.3285982555
O 0.0012986124 0.0055958132 0.0080268729
O -0.0037946089 0.0215470472 -0.0028031321
H 0.0202015298 -0.0144688984 -0.0006764244
H -0.0224236823 0.0088983437 -0.0046822398
H 0.0178766967 -0.0138368861 -0.0111595296
H -0.0149760490 -0.0087128434 0.0128179743
6
i = 10, time = 5.000, E = -34.3282870379
O -0.0113686409 0.0076384898 0.0006427492
O -0.0055062210 0.0286073756 -0.0018076711
H 0.0202130994 -0.0147546410 -0.0010870336
H -0.0091230759 0.0072344012 0.0031139494
H 0.0227426182 -0.0183175217 -0.0146901267
H -0.0178560776 -0.0112779270 0.0153524783
6
i = 0, time = 0.000, E = -34.3303964710
O 0.0000299284 0.0000082360 -0.0000216368
O -0.0001665963 0.0001143863 -0.0000622640
H -0.0005732926 -0.0003112611 -0.0007149779
H 0.0013083605 -0.0009262219 0.0006258560
H 0.0012002313 -0.0003701042 0.0002810523
H 0.0002340810 -0.0003388418 0.0011398583
6
i = 1, time = 0.500, E = -34.3297789925
O 0.0000318091 -0.0000011257 -0.0000315523
O -0.0001627246 0.0000949003 -0.0000601886
H -0.0006942143 -0.0001580632 -0.0005961178
H 0.0013965809 -0.0009220620 0.0006864253
H 0.0009921617 -0.0002070555 0.0003772619
H 0.0003887778 -0.0001963472 0.0009826628
6
i = 2, time = 1.000, E = -34.3287906528
O 0.0000434905 -0.0000119687 -0.0000365693
O -0.0001559711 0.0000684294 -0.0000585155
H -0.0007982103 -0.0000072696 -0.0004641991
H 0.0013045053 -0.0008950263 0.0006606657
H 0.0006984616 0.0000300355 0.0005194680
H 0.0005838315 -0.0000184903 0.0007860194
6
i = 3, time = 1.500, E = -34.3279989781
O 0.0000621568 -0.0000228735 -0.0000367647
O -0.0001473763 0.0000386669 -0.0000579038
H -0.0008685849 0.0001182914 -0.0003346940
H 0.0010596831 -0.0008456506 0.0005633905
H 0.0003617154 0.0003083317 0.0006884934
H 0.0007905658 0.0001699508 0.0005825225
6
i = 4, time = 2.000, E = -34.3277542904
O 0.0000845891 -0.0000325375 -0.0000326914
O -0.0001384275 0.0000100680 -0.0000586140
H -0.0008913015 0.0002002196 -0.0002204855
H 0.0007027452 -0.0007757612 0.0004145009
H 0.0000367823 0.0005847135 0.0008579822
H 0.0009758503 0.0003424026 0.0004044913
6
i = 5, time = 2.500, E = -34.3279978897
O 0.0001077818 -0.0000400044 -0.0000252313
O -0.0001306288 -0.0000132109 -0.0000604906
H -0.0008573679 0.0002275751 -0.0001299594
H 0.0002765341 -0.0006882124 0.0002353696
H -0.0002237104 0.0008159135 0.0010004641
H 0.0011096310 0.0004764474 0.0002774328
6
i = 6, time = 3.000, E = -34.3284123938
O 0.0001292006 -0.0000447573 -0.0000155271
O -0.0001250624 -0.0000282456 -0.0000631128
H -0.0007644774 0.0001977514 -0.0000665600
H -0.0001786192 -0.0005869829 0.0000473549
H -0.0003829438 0.0009687598 0.0010934476
H 0.0011720378 0.0005579199 0.0002160526
6
i = 7, time = 3.500, E = -34.3287040522
O 0.0001467721 -0.0000466846 -0.0000049521
O -0.0001221781 -0.0000337639 -0.0000659931
H -0.0006174618 0.0001155138 -0.0000294422
H -0.0006243164 -0.0004773675 -0.0001283410
H -0.0004260909 0.0010263742 0.0011232410
H 0.0011570265 0.0005818906 0.0002236703
6
i = 8, time = 4.000, E = -34.3287574070
O 0.0001587484 -0.0000459771 0.0000049086
O -0.0001218595 -0.0000300078 -0.0000687164
H -0.0004273636 -0.0000088559 -0.0000145866
H -0.0010215835 -0.0003660318 -0.0002702296
H -0.0003582322 0.0009888837 0.0010862829
H 0.0010708523 0.0005511577 0.0002944065
6
i = 9, time = 4.500, E = -34.3285982555
O 0.0001635949 -0.0000430207 0.0000122940
O -0.0001236421 -0.0000182885 -0.0000709875
H -0.0002096270 -0.0001613961 -0.0000158655
H -0.0013292509 -0.0002607972 -0.0003563387
H -0.0001976950 0.0008695436 0.0009885390
H 0.0009271520 0.0004738628 0.0004164474
6