diff --git a/dpdata/cp2k/output.py b/dpdata/cp2k/output.py index a29f4221f..04bd000da 100644 --- a/dpdata/cp2k/output.py +++ b/dpdata/cp2k/output.py @@ -1,9 +1,9 @@ # %% +import math import re from collections import OrderedDict import numpy as np -from scipy.constants import R from ..unit import ( EnergyConversion, @@ -13,7 +13,6 @@ ) from .cell import cell_to_low_triangle -# %% AU_TO_ANG = LengthConversion("bohr", "angstrom").value() AU_TO_EV = EnergyConversion("hartree", "eV").value() AU_TO_EV_EVERY_ANG = ForceConversion("hartree/bohr", "eV/angstrom").value() @@ -38,8 +37,10 @@ def __init__(self, log_file_name, xyz_file_name, restart=False): self.log_block_generator = self.get_log_block_generator() self.xyz_block_generator = self.get_xyz_block_generator() self.restart_flag = restart + self.cell = None self.print_level = None + self.atomic_kinds = None if self.restart_flag: @@ -63,7 +64,9 @@ def __next__(self): # assert all(eq1), (log_info_dict,xyz_info_dict,'There may be errors in the file. If it is a restart task; use restart=True') # assert all(eq2), (log_info_dict,xyz_info_dict,'There may be errors in the file. If it is a restart task; use restart=True') # assert all(eq3), (log_info_dict,xyz_info_dict,'There may be errors in the file. If it is a restart task; use restart=True') - assert log_info_dict["energies"] == xyz_info_dict["energies"], ( + assert math.isclose( + log_info_dict["energies"], xyz_info_dict["energies"], abs_tol=1.0e-6 + ), ( log_info_dict["energies"], xyz_info_dict["energies"], "There may be errors in the file", @@ -257,7 +260,7 @@ def handle_single_log_frame(self, lines): [cell_bx, cell_by, cell_bz], [cell_cx, cell_cy, cell_cz], ] - ).astype("float32") + ).astype("float64") if atomic_kinds: self.atomic_kinds = atomic_kinds # print(self.atomic_kinds) @@ -299,7 +302,7 @@ def handle_single_log_frame(self, lines): GPa = PressureConversion("eV/angstrom^3", "GPa").value() if stress: stress = np.array(stress) - stress = stress.astype("float32") + stress = stress.astype("float64") stress = stress[np.newaxis, :, :] # stress to virial conversion, default unit in cp2k is GPa # note the stress is virial = stress * volume @@ -314,11 +317,11 @@ def handle_single_log_frame(self, lines): info_dict["atom_numbs"] = atom_numbs info_dict["atom_types"] = np.asarray(atom_types_idx_list) info_dict["print_level"] = self.print_level - info_dict["cells"] = np.asarray([self.cell]).astype("float32") - info_dict["energies"] = np.asarray([energy]).astype("float32") - info_dict["forces"] = np.asarray([forces_list]).astype("float32") + info_dict["cells"] = np.asarray([self.cell]).astype("float64") + info_dict["energies"] = np.asarray([energy]).astype("float64") + info_dict["forces"] = np.asarray([forces_list]).astype("float64") if virial is not None: - info_dict["virials"] = np.asarray([virial]).astype("float32") + info_dict["virials"] = np.asarray([virial]).astype("float64") return info_dict def handle_single_xyz_frame(self, lines): @@ -337,7 +340,7 @@ def handle_single_xyz_frame(self, lines): energy = 0 if prop_dict.get("E"): energy = float(prop_dict.get("E")) * AU_TO_EV - # info_dict['energies'] = np.array([prop_dict['E']]).astype('float32') + # info_dict['energies'] = np.array([prop_dict['E']]).astype('float64') element_index = -1 element_dict = OrderedDict() @@ -364,8 +367,8 @@ def handle_single_xyz_frame(self, lines): # info_dict['atom_names'] = atom_names # info_dict['atom_numbs'] = atom_numbs # info_dict['atom_types'] = np.asarray(atom_types_list) - info_dict["coords"] = np.asarray([coords_list]).astype("float32") - info_dict["energies"] = np.array([energy]).astype("float32") + info_dict["coords"] = np.asarray([coords_list]).astype("float64") + info_dict["energies"] = np.array([energy]).astype("float64") info_dict["orig"] = np.zeros(3) return info_dict @@ -392,6 +395,7 @@ def get_frames(fname): content = fp.read() count = content.count("SCF run converged") if count == 0: + fp.close() return [], [], [], [], [], [], [], None # search duplicated header @@ -450,10 +454,10 @@ def get_frames(fname): # conver to float array and add extra dimension for nframes cell = np.array(cell) - cell = cell.astype("float32") + cell = cell.astype("float64") cell = cell[np.newaxis, :, :] coord = np.array(coord) - coord = coord.astype("float32") + coord = coord.astype("float64") coord = coord[np.newaxis, :, :] atom_symbol_idx_list = np.array(atom_symbol_idx_list) atom_symbol_idx_list = atom_symbol_idx_list.astype(int) @@ -461,13 +465,13 @@ def get_frames(fname): atom_symbol_list = np.array(atom_symbol_list) atom_symbol_list = atom_symbol_list[atom_symbol_idx_list] force = np.array(force) - force = force.astype("float32") + force = force.astype("float64") force = force[np.newaxis, :, :] # virial is not necessary if stress: stress = np.array(stress) - stress = stress.astype("float32") + stress = stress.astype("float64") stress = stress[np.newaxis, :, :] # stress to virial conversion, default unit in cp2k is GPa # note the stress is virial = stress * volume @@ -479,7 +483,7 @@ def get_frames(fname): force = force * eV / angstrom # energy unit conversion, default unit in cp2k is hartree energy = float(energy) * eV - energy = np.array(energy).astype("float32") + energy = np.array(energy).astype("float64") energy = energy[np.newaxis] tmp_names, symbol_idx = np.unique(atom_symbol_list, return_index=True) diff --git a/tests/.coverage b/tests/.coverage new file mode 100644 index 000000000..dd0aa252c Binary files /dev/null and b/tests/.coverage differ diff --git a/tests/cp2k/aimd/deepmd/set.000/box.npy b/tests/cp2k/aimd/deepmd/set.000/box.npy index fd2920c5c..b660faebd 100644 Binary files a/tests/cp2k/aimd/deepmd/set.000/box.npy and b/tests/cp2k/aimd/deepmd/set.000/box.npy differ diff --git a/tests/cp2k/aimd/deepmd/set.000/coord.npy b/tests/cp2k/aimd/deepmd/set.000/coord.npy index d4b4b5386..3f67f14a5 100644 Binary files a/tests/cp2k/aimd/deepmd/set.000/coord.npy and b/tests/cp2k/aimd/deepmd/set.000/coord.npy differ diff --git a/tests/cp2k/aimd/deepmd/set.000/energy.npy b/tests/cp2k/aimd/deepmd/set.000/energy.npy index ec640591f..d186c528a 100644 Binary files a/tests/cp2k/aimd/deepmd/set.000/energy.npy and b/tests/cp2k/aimd/deepmd/set.000/energy.npy differ diff --git a/tests/cp2k/aimd/deepmd/set.000/force.npy b/tests/cp2k/aimd/deepmd/set.000/force.npy index c128e024d..3815d933c 100644 Binary files a/tests/cp2k/aimd/deepmd/set.000/force.npy and b/tests/cp2k/aimd/deepmd/set.000/force.npy differ diff --git a/tests/cp2k/aimd_stress/deepmd/box.raw b/tests/cp2k/aimd_stress/deepmd/box.raw deleted file mode 100644 index 8f2014f0a..000000000 --- a/tests/cp2k/aimd_stress/deepmd/box.raw +++ /dev/null @@ -1 +0,0 @@ -1.000000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+01 diff --git a/tests/cp2k/aimd_stress/deepmd/coord.raw b/tests/cp2k/aimd_stress/deepmd/coord.raw deleted file mode 100644 index 0ee1d8197..000000000 --- a/tests/cp2k/aimd_stress/deepmd/coord.raw +++ /dev/null @@ -1 +0,0 @@ -5.701910018920898438e+00 3.809600114822387695e+00 4.388450145721435547e+00 4.446010112762451172e+00 4.656809806823730469e+00 5.381949901580810547e+00 4.492159843444824219e+00 4.909910202026367188e+00 3.577559947967529297e+00 5.838250160217285156e+00 5.622280120849609375e+00 4.610680103302001953e+00 5.116660118103027344e+00 4.755330085754394531e+00 4.461229801177978516e+00 diff --git a/tests/cp2k/aimd_stress/deepmd/energy.raw b/tests/cp2k/aimd_stress/deepmd/energy.raw deleted file mode 100644 index 0cc396e4c..000000000 --- a/tests/cp2k/aimd_stress/deepmd/energy.raw +++ /dev/null @@ -1 +0,0 @@ --2.196554718017578125e+02 diff --git a/tests/cp2k/aimd_stress/deepmd/force.raw b/tests/cp2k/aimd_stress/deepmd/force.raw deleted file mode 100644 index 346b4953e..000000000 --- a/tests/cp2k/aimd_stress/deepmd/force.raw +++ /dev/null @@ -1 +0,0 @@ --2.743706703186035156e-01 4.712709188461303711e-01 -1.367179006338119507e-01 7.652513980865478516e-01 2.514204978942871094e-01 -1.059429287910461426e+00 2.538656070828437805e-02 1.183478906750679016e-02 -1.267343163490295410e-01 -8.532900810241699219e-01 -9.029597043991088867e-01 -1.871660351753234863e-01 3.367811143398284912e-01 1.687173396348953247e-01 1.509592533111572266e+00 diff --git a/tests/cp2k/aimd_stress/deepmd/set.000/box.npy b/tests/cp2k/aimd_stress/deepmd/set.000/box.npy new file mode 100644 index 000000000..bd18246cd Binary files /dev/null and b/tests/cp2k/aimd_stress/deepmd/set.000/box.npy differ diff --git a/tests/cp2k/aimd_stress/deepmd/set.000/coord.npy b/tests/cp2k/aimd_stress/deepmd/set.000/coord.npy new file mode 100644 index 000000000..3ac7fb451 Binary files /dev/null and b/tests/cp2k/aimd_stress/deepmd/set.000/coord.npy differ diff --git a/tests/cp2k/aimd_stress/deepmd/set.000/energy.npy b/tests/cp2k/aimd_stress/deepmd/set.000/energy.npy new file mode 100644 index 000000000..f8124b2aa Binary files /dev/null and b/tests/cp2k/aimd_stress/deepmd/set.000/energy.npy differ diff --git a/tests/cp2k/aimd_stress/deepmd/set.000/force.npy b/tests/cp2k/aimd_stress/deepmd/set.000/force.npy new file mode 100644 index 000000000..438531293 Binary files /dev/null and b/tests/cp2k/aimd_stress/deepmd/set.000/force.npy differ diff --git a/tests/cp2k/aimd_stress/deepmd/set.000/virial.npy b/tests/cp2k/aimd_stress/deepmd/set.000/virial.npy new file mode 100644 index 000000000..cbd96c950 Binary files /dev/null and b/tests/cp2k/aimd_stress/deepmd/set.000/virial.npy differ diff --git a/tests/cp2k/aimd_stress/deepmd/virial.raw b/tests/cp2k/aimd_stress/deepmd/virial.raw deleted file mode 100644 index 90c5ec17a..000000000 --- a/tests/cp2k/aimd_stress/deepmd/virial.raw +++ /dev/null @@ -1 +0,0 @@ --1.305763244628906250e+00 -5.517681837081909180e-01 5.745944380760192871e-01 -5.517681837081909180e-01 -1.251762151718139648e+00 5.180240049958229065e-02 5.745944380760192871e-01 5.180240049958229065e-02 -8.817730545997619629e-01 diff --git a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/box.npy b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/box.npy index d25b7045c..0a3b8a932 100644 Binary files a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/box.npy and b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/box.npy differ diff --git a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/coord.npy b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/coord.npy index 257a33e5b..cebfc4725 100644 Binary files a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/coord.npy and b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/coord.npy differ diff --git a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/energy.npy b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/energy.npy index 28e8479ea..2760be3ad 100644 Binary files a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/energy.npy and b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/energy.npy differ diff --git a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/force.npy b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/force.npy index 576b1cf60..485ef6eb8 100644 Binary files a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/force.npy and b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/force.npy differ diff --git a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/virial.npy b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/virial.npy index 14f311896..65ef8d815 100644 Binary files a/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/virial.npy and b/tests/cp2k/cp2k_duplicate_header/deepmd/set.000/virial.npy differ diff --git a/tests/cp2k/cp2k_element_replace/deepmd/set.000/box.npy b/tests/cp2k/cp2k_element_replace/deepmd/set.000/box.npy index bf47a61af..f33aca760 100644 Binary files a/tests/cp2k/cp2k_element_replace/deepmd/set.000/box.npy and b/tests/cp2k/cp2k_element_replace/deepmd/set.000/box.npy differ diff --git a/tests/cp2k/cp2k_element_replace/deepmd/set.000/coord.npy b/tests/cp2k/cp2k_element_replace/deepmd/set.000/coord.npy index 5e1ec8031..d366710ad 100644 Binary files a/tests/cp2k/cp2k_element_replace/deepmd/set.000/coord.npy and b/tests/cp2k/cp2k_element_replace/deepmd/set.000/coord.npy differ diff --git a/tests/cp2k/cp2k_element_replace/deepmd/set.000/energy.npy b/tests/cp2k/cp2k_element_replace/deepmd/set.000/energy.npy index 1898c6f2d..788b4c4ad 100644 Binary files a/tests/cp2k/cp2k_element_replace/deepmd/set.000/energy.npy and b/tests/cp2k/cp2k_element_replace/deepmd/set.000/energy.npy differ diff --git a/tests/cp2k/cp2k_element_replace/deepmd/set.000/force.npy b/tests/cp2k/cp2k_element_replace/deepmd/set.000/force.npy index aeacd1f68..fee5711cf 100644 Binary files a/tests/cp2k/cp2k_element_replace/deepmd/set.000/force.npy and b/tests/cp2k/cp2k_element_replace/deepmd/set.000/force.npy differ diff --git a/tests/cp2k/cp2k_element_replace/deepmd/set.000/virial.npy b/tests/cp2k/cp2k_element_replace/deepmd/set.000/virial.npy index 930025ce2..acfb96f32 100644 Binary files a/tests/cp2k/cp2k_element_replace/deepmd/set.000/virial.npy and b/tests/cp2k/cp2k_element_replace/deepmd/set.000/virial.npy differ diff --git a/tests/cp2k/cp2k_normal_output/deepmd/set.000/box.npy b/tests/cp2k/cp2k_normal_output/deepmd/set.000/box.npy index d25b7045c..0a3b8a932 100644 Binary files a/tests/cp2k/cp2k_normal_output/deepmd/set.000/box.npy and b/tests/cp2k/cp2k_normal_output/deepmd/set.000/box.npy differ diff --git a/tests/cp2k/cp2k_normal_output/deepmd/set.000/coord.npy b/tests/cp2k/cp2k_normal_output/deepmd/set.000/coord.npy index 257a33e5b..cebfc4725 100644 Binary files a/tests/cp2k/cp2k_normal_output/deepmd/set.000/coord.npy and b/tests/cp2k/cp2k_normal_output/deepmd/set.000/coord.npy differ diff --git a/tests/cp2k/cp2k_normal_output/deepmd/set.000/energy.npy b/tests/cp2k/cp2k_normal_output/deepmd/set.000/energy.npy index 28e8479ea..2760be3ad 100644 Binary files a/tests/cp2k/cp2k_normal_output/deepmd/set.000/energy.npy and b/tests/cp2k/cp2k_normal_output/deepmd/set.000/energy.npy differ diff --git a/tests/cp2k/cp2k_normal_output/deepmd/set.000/force.npy b/tests/cp2k/cp2k_normal_output/deepmd/set.000/force.npy index 576b1cf60..485ef6eb8 100644 Binary files a/tests/cp2k/cp2k_normal_output/deepmd/set.000/force.npy and b/tests/cp2k/cp2k_normal_output/deepmd/set.000/force.npy differ diff --git a/tests/cp2k/cp2k_normal_output/deepmd/set.000/virial.npy b/tests/cp2k/cp2k_normal_output/deepmd/set.000/virial.npy index 14f311896..65ef8d815 100644 Binary files a/tests/cp2k/cp2k_normal_output/deepmd/set.000/virial.npy and b/tests/cp2k/cp2k_normal_output/deepmd/set.000/virial.npy differ diff --git a/tests/test_cp2k_aimd_output.py b/tests/test_cp2k_aimd_output.py index 34c139d31..8e9932d11 100644 --- a/tests/test_cp2k_aimd_output.py +++ b/tests/test_cp2k_aimd_output.py @@ -22,7 +22,7 @@ class TestCp2kAimdStressOutput(unittest.TestCase, CompLabeledSys): def setUp(self): self.system_1 = dpdata.LabeledSystem("cp2k/aimd_stress", fmt="cp2k/aimd_output") self.system_2 = dpdata.LabeledSystem( - "cp2k/aimd_stress/deepmd", fmt="deepmd/raw" + "cp2k/aimd_stress/deepmd", fmt="deepmd/npy" ) self.places = 6 self.e_places = 6