-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy patheigenvalue_read.py
executable file
·107 lines (66 loc) · 2.65 KB
/
eigenvalue_read.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env python
import numpy
def read_eigenvalues(subtractFermi):
inputFile_EIGENVAL = open('EIGENVAL', 'r')
inputFile_IBZKPT = open('IBZKPT', 'r')
inputFile_DOSCAR = open('DOSCAR', 'r')
for i in range(5):
inputFile_EIGENVAL.readline()
inputFile_DOSCAR.readline()
for i in range(3):
inputFile_IBZKPT.readline()
efermi = float(inputFile_DOSCAR.readline().split()[3])
line = inputFile_EIGENVAL.readline()
nelectrons = int(line.split()[0])
nkpt = int(line.split()[1])
neigen_per_kpt = int(line.split()[2])
print nelectrons, ' electrons'
print nkpt, ' kpoints'
print neigen_per_kpt, ' eigenvalues per kpoint'
print 'Fermi level at: ', efermi
wkpt_array = numpy.zeros(nkpt, dtype=int)
eigenvalue_array = []
for i in range(nkpt):
eigenvalue_array.append([])
inputFile_EIGENVAL.readline() # skips line before data
inputFile_EIGENVAL.readline() # this has kpoint and float weight
wkpt = float(inputFile_IBZKPT.readline().split()[3])
wkpt_array[i] = wkpt
for j in range(neigen_per_kpt):
eigenvalue = float(inputFile_EIGENVAL.readline().split()[1])
eigenvalue_array[-1].append(eigenvalue)
eigenvalue_list = []
for i in range(nkpt):
for eigenvalue in eigenvalue_array[i]:
if (subtractFermi == True):
eigenvalue_list.append(eigenvalue - efermi)
else:
eigenvalue_list.append(eigenvalue)
return eigenvalue_list, wkpt_array, nkpt, neigen_per_kpt
def main():
subtractFermi = True
eigenvalue_list, wkpt_array, nkpt, neigen_per_kpt = read_eigenvalues(subtractFermi)
print 'wtk.dat file DOES work with dos_kpt.x read (6 columns per line)'
print len(eigenvalue_list), ' eigenvalues were read'
print 'Subtract Fermi = ', subtractFermi
# g = Gnuplot.Gnuplot()
# g('set data style linespoints')
# g.plot(sorted_array)
# raw_input('Please press return to continue...\n')
outputFile = open('eig.dat', 'w')
outputFile.write('# nkptgw: ' + str(nkpt) + ' neig: ' + str(neigen_per_kpt) + '\n')
outputFile.write('# E(DFT) E(GW)\n')
for element in eigenvalue_list:
outputFile.write(str(element) + ' ' + str(element) + ' \n')
outputFile.close()
sum_wtk = float(sum(wkpt_array))
outputFile = open('wtk.dat', 'w')
counter = 0
for element in wkpt_array:
outputFile.write(str(element/sum_wtk) + ' ')
counter += 1
if counter%6 == 0: outputFile.write('\n ')
outputFile.write('\n')
outputFile.close()
if __name__ == '__main__':
main()