/
investigate_ediff.py
62 lines (52 loc) · 1.98 KB
/
investigate_ediff.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# this script helps to investigate cases where .out and .ref calc converged, but significalntly differ in energy
# will plott the energy difference vs. opt cycle
import sys
import os
import matplotlib.pyplot as plt
# get data
def parse_file(filename):
cycles, energy = [], []
try:
with open(filename) as file:
lines = file.readlines()
for line in lines:
if 'Convergence criterion met' in line:
try:
cycles.append(float(line.split()[0]))
energy.append(float(line.split()[1]))
except ValueError:
print('Error while checking ' + filename + 'for Energy difference')
sys.exit(1)
except IOError:
print('Error: could not open ' + filename)
sys.exit(1)
return energy, cycles
def plot_scf_diff(name):
out_energies, out_cycles = [], []
ref_energies, ref_cycles = [], []
for root, subdirs, files in os.walk(os.getcwd()):
for file in files:
# read out files
if file == name + '.out':
if out_energies or out_cycles:
print('Error: multiple copies of ' + name + '.out')
out_energies, out_cycles = parse_file(root + '/' + name +'.out')
if file == name + '.ref':
if ref_energies or ref_cycles:
print('Error: multiple copies of ' + name + '.ref')
ref_energies, ref_cycles = parse_file(root + '/' + name +'.ref')
fig = plt.figure()
energy = plt.subplot()
energy.plot(out_energies, label='Q-Chem 5.4.2-dev', marker='x')
energy.plot(ref_energies, label='Q-Chem 5.4.1', marker='x')
plt.xlabel("Optimization cycle")
plt.ylabel("$E$ [Hartree]")
plt.legend()
fig.savefig(name + ".pdf")
plt.close(fig)
def main():
filename = sys.argv[1]
plot_scf_diff(filename)
return 0
if __name__ == '__main__':
sys.exit(main())