Skip to content

Commit 132c1cf

Browse files
authored
Merge pull request #75 from amcadmus/devel
qe/cp/traj: load cell data if there is any. check the consistency of time
2 parents 410ad7f + 538ac3c commit 132c1cf

File tree

7 files changed

+98
-36
lines changed

7 files changed

+98
-36
lines changed

dpdata/qe/traj.py

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,16 @@ def _load_pos_block(fp, natoms) :
9898
head = fp.readline()
9999
if not head:
100100
# print('get None')
101-
return None
101+
return None, None
102102
else :
103+
ss = head.split()[0]
103104
blk = []
104105
for ii in range(natoms) :
105106
newline = fp.readline()
106107
if not newline :
107-
return None
108+
return None, None
108109
blk.append([float(jj) for jj in newline.split()])
109-
return blk
110+
return blk, ss
110111

111112

112113
def load_data(fname,
@@ -115,18 +116,20 @@ def load_data(fname,
115116
step = 1,
116117
convert = 1.) :
117118
coords = []
119+
steps = []
118120
cc = 0
119121
with open(fname) as fp:
120122
while True:
121-
blk = _load_pos_block(fp, natoms)
123+
blk, ss = _load_pos_block(fp, natoms)
122124
if blk == None :
123125
break
124126
else :
125127
if cc >= begin and (cc - begin) % step == 0 :
126128
coords.append(blk)
129+
steps.append(ss)
127130
cc += 1
128131
coords= convert * np.array(coords)
129-
return coords
132+
return coords, steps
130133

131134

132135
# def load_pos(fname, natoms) :
@@ -145,14 +148,17 @@ def load_data(fname,
145148

146149
def load_energy(fname, begin = 0, step = 1) :
147150
data = np.loadtxt(fname)
151+
steps = []
152+
for ii in data[begin::step,0]:
153+
steps.append('%d'%ii)
148154
with open(fname) as fp:
149155
line = fp.readline()
150156
if line :
151157
nw = len(line.split())
152158
else :
153159
return None
154160
data = np.reshape(data, [-1, nw])
155-
return energy_convert * data[begin::step,5]
161+
return energy_convert * data[begin::step,5], steps
156162

157163

158164
# def load_force(fname, natoms) :
@@ -176,35 +182,48 @@ def to_system_data(input_name, prefix, begin = 0, step = 1) :
176182
data['atom_types'], \
177183
cell \
178184
= load_param_file(input_name)
179-
data['coords'] \
185+
data['coords'], csteps\
180186
= load_data(prefix + '.pos',
181187
np.sum(data['atom_numbs']),
182188
begin = begin,
183189
step = step,
184190
convert = length_convert)
185191
data['orig'] = np.zeros(3)
186-
data['cells'] = np.tile(cell, (data['coords'].shape[0], 1, 1))
187-
return data
192+
try :
193+
data['cells'], tmp_steps \
194+
= load_data(prefix + '.cel',
195+
3,
196+
begin = begin,
197+
step = step,
198+
convert = length_convert)
199+
assert(csteps == tmp_steps), "the step key between files are not consistent"
200+
except FileNotFoundError :
201+
data['cells'] = np.tile(cell, (data['coords'].shape[0], 1, 1))
202+
return data, csteps
188203

189204

190205
def to_system_label(input_name, prefix, begin = 0, step = 1) :
191206
atom_names, atom_numbs, atom_types, cell = load_param_file(input_name)
192-
energy = load_energy(prefix + '.evp',
193-
begin = begin,
194-
step = step)
195-
force = load_data(prefix + '.for',
196-
np.sum(atom_numbs),
197-
begin = begin,
198-
step = step,
199-
convert = force_convert)
200-
return energy, force
207+
energy, esteps = load_energy(prefix + '.evp',
208+
begin = begin,
209+
step = step)
210+
force, fsteps = load_data(prefix + '.for',
211+
np.sum(atom_numbs),
212+
begin = begin,
213+
step = step,
214+
convert = force_convert)
215+
assert(esteps == fsteps), "the step key between files are not consistent "
216+
return energy, force, esteps
201217

202218

203219
if __name__ == '__main__':
204-
atom_names, atom_numbs, atom_types, cell = load_param_file('oh-md.in')
205-
coords = load_pos('oh-md.pos', np.sum(atom_numbs))
220+
prefix='nacl'
221+
atom_names, atom_numbs, atom_types, cell = load_param_file(prefix+'.in')
222+
coords = load_data(prefix+'.pos', np.sum(atom_numbs))
223+
cells = load_data(prefix+'.cel', 3)
206224
print(atom_names)
207225
print(atom_numbs)
208226
print(atom_types)
209-
print(cell)
227+
print(cells)
210228
print(coords.shape)
229+
print(cells.shape)

dpdata/system.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ def from_qe_cp_traj(self,
525525
prefix,
526526
begin = 0,
527527
step = 1) :
528-
self.data = dpdata.qe.traj.to_system_data(prefix + '.in', prefix, begin = begin, step = step)
528+
self.data, _ = dpdata.qe.traj.to_system_data(prefix + '.in', prefix, begin = begin, step = step)
529529
self.data['coords'] \
530530
= dpdata.md.pbc.apply_pbc(self.data['coords'],
531531
self.data['cells'],
@@ -991,13 +991,14 @@ def from_deepmd_raw(self, folder, type_map = None) :
991991

992992

993993
def from_qe_cp_traj(self, prefix, begin = 0, step = 1) :
994-
self.data = dpdata.qe.traj.to_system_data(prefix + '.in', prefix, begin = begin, step = step)
994+
self.data, cs = dpdata.qe.traj.to_system_data(prefix + '.in', prefix, begin = begin, step = step)
995995
self.data['coords'] \
996996
= dpdata.md.pbc.apply_pbc(self.data['coords'],
997997
self.data['cells'],
998998
)
999-
self.data['energies'], self.data['forces'] \
999+
self.data['energies'], self.data['forces'], es \
10001000
= dpdata.qe.traj.to_system_label(prefix + '.in', prefix, begin = begin, step = step)
1001+
assert(cs == es), "the step key between files are not consistent"
10011002
self.rot_lower_triangular()
10021003

10031004
def from_qe_pw_scf(self, file_name) :

tests/qe.traj/traj6.cel

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
195
2+
5.157620138324029213e+00 0 0
3+
8.882263018337732685e-02 5.782217839848955876e+00 0
4+
4.531494312205264219e-02 1.857154025688012577e-01 5.855553673164934025e+00
5+
200
6+
5.359985500701728967e+00 0 0
7+
3.585941820098031974e-01 5.317218997480877896e+00 0
8+
7.606780476053129902e-01 7.811107228901693622e-01 5.715864930517207121e+00
9+
201
10+
5.235484852416917079e+00 0 0
11+
5.612267823951659906e-01 5.640178212424978632e+00 0
12+
1.561235654197479228e-02 2.819721738692628765e-01 5.868536463888631260e+00
13+
202
14+
5.735200354152383717e+00 0 0
15+
8.818112752306928037e-02 5.003946763988647461e+00 0
16+
5.346029912365874992e-01 4.453576669882056693e-01 5.311832768820492490e+00
17+
203
18+
5.969007839117177916e+00 0 0
19+
7.974158979687617776e-02 5.086270090760550922e+00 0
20+
2.286579398249665163e-01 1.449088120223311904e-01 5.588188387987865546e+00
21+
204
22+
5.308510801020571712e+00 0 0
23+
3.076052782312116429e-01 5.279388982187173340e+00 0
24+
4.321921336152507731e-01 8.121110815096156399e-01 5.301664983741235737e+00

tests/qe.traj/traj6.evp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
195 9.433649E-03 1.290500E-05 0.000000E+00 1.057182E-02 -1100.03076389 -1100.03076389 -1100.03075434 -1100.03073209 1.300606E+04 -3.31610
22
200 9.675537E-03 7.090171E-05 0.000000E+00 1.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683
3-
200 9.675537E-03 7.090171E-05 0.000000E+00 2.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683
4-
200 9.675537E-03 7.090171E-05 0.000000E+00 3.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683
5-
200 9.675537E-03 7.090171E-05 0.000000E+00 4.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683
6-
200 9.675537E-03 7.090171E-05 0.000000E+00 5.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683
3+
201 9.675537E-03 7.090171E-05 0.000000E+00 2.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683
4+
202 9.675537E-03 7.090171E-05 0.000000E+00 3.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683
5+
203 9.675537E-03 7.090171E-05 0.000000E+00 4.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683
6+
204 9.675537E-03 7.090171E-05 0.000000E+00 5.257319E+00 -1100.03189493 -1100.03189493 -1100.03076015 -1100.03068120 1.300606E+04 -3.31683

tests/qe.traj/traj6.for

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
200 0.00967554
55
0.13452693616244E-01 -0.68546285592109E-02 -0.28341150176630E-02
66
0.23859341498989E-01 -0.15249791118496E-01 -0.77171937738584E-02
7-
200 0.00967554
7+
201 0.00967554
88
2.13452693616244E-01 -0.68546285592109E-02 -0.28341150176630E-02
99
0.23859341498989E-01 -0.15249791118496E-01 -0.77171937738584E-02
10-
200 0.00967554
10+
202 0.00967554
1111
3.13452693616244E-01 -0.68546285592109E-02 -0.28341150176630E-02
1212
0.23859341498989E-01 -0.15249791118496E-01 -0.77171937738584E-02
13-
200 0.00967554
13+
203 0.00967554
1414
4.13452693616244E-01 -0.68546285592109E-02 -0.28341150176630E-02
1515
0.23859341498989E-01 -0.15249791118496E-01 -0.77171937738584E-02
16-
200 0.00967554
16+
204 0.00967554
1717
5.13452693616244E-01 -0.68546285592109E-02 -0.28341150176630E-02
1818
0.23859341498989E-01 -0.15249791118496E-01 -0.77171937738584E-02

tests/qe.traj/traj6.pos

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
200 0.00967554
55
0.32121855340601E+02 0.17164728967776E+02 -0.36182628967521E+01
66
0.14321036136090E+01 0.54322965963498E+01 0.16038534464162E+02
7-
200 0.00967554
7+
201 0.00967554
88
2.32121855340601E+02 0.17164728967776E+02 -0.36182628967521E+01
99
0.14321036136090E+01 0.54322965963498E+01 0.16038534464162E+02
10-
200 0.00967554
10+
202 0.00967554
1111
3.32121855340601E+02 0.17164728967776E+02 -0.36182628967521E+01
1212
0.14321036136090E+01 0.54322965963498E+01 0.16038534464162E+02
13-
200 0.00967554
13+
203 0.00967554
1414
4.32121855340601E+02 0.17164728967776E+02 -0.36182628967521E+01
1515
0.14321036136090E+01 0.54322965963498E+01 0.16038534464162E+02
16-
200 0.00967554
16+
204 0.00967554
1717
5.32121855340601E+02 0.17164728967776E+02 -0.36182628967521E+01
1818
0.14321036136090E+01 0.54322965963498E+01 0.16038534464162E+02

tests/test_qe_cp_traj_skipload.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,21 @@ def setUp(self):
3838
self.f_places = 6
3939
self.v_places = 4
4040

41+
def test_cell(self):
42+
ref_cell = [5.359985500701728967e+00, 0, 0,
43+
3.585941820098031974e-01, 5.317218997480877896e+00, 0,
44+
7.606780476053129902e-01, 7.811107228901693622e-01, 5.715864930517207121e+00 ]
45+
ref_cell = 0.52917721067 * np.array(ref_cell).reshape(3,3)
46+
47+
for ii in range(3) :
48+
for jj in range(3) :
49+
self.assertEqual(self.system_1.data['cells'][0][ii][jj], ref_cell[ii][jj])
50+
51+
ref_cell = [5.308510801020571712e+00, 0, 0,
52+
3.076052782312116429e-01, 5.279388982187173340e+00, 0,
53+
4.321921336152507731e-01, 8.121110815096156399e-01, 5.301664983741235737e+00]
54+
ref_cell = 0.52917721067 * np.array(ref_cell).reshape(3,3)
55+
56+
for ii in range(3) :
57+
for jj in range(3) :
58+
self.assertEqual(self.system_1.data['cells'][-1][ii][jj], ref_cell[ii][jj])

0 commit comments

Comments
 (0)