-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSupercell.py
More file actions
85 lines (76 loc) · 2.51 KB
/
Supercell.py
File metadata and controls
85 lines (76 loc) · 2.51 KB
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
conversion = {
'1.147' : 'Zn',
'-0.63': 'O',
'-1.30': 'O\_Zn',
'0.72' : 'C\_OO',
'-0.071' : 'C\_COO',
'-0.102' : 'C',
'0.118' : 'H'
}
def printcoords(atomlist, name='IRMOF1', number=424):
output='MOLECULE {0:s} {1:10d} {2:10d}\n'.format(name, number, number)
for i in atomlist:
output += '{0:10s}c\n{1:15.7f}{2:15.7f}{3:15.7f} 0\n'.format(i[0], i[1], i[2], i[3])
return output
def convertcoords(rawlist):
output = []
for i in rawlist:
output.append([conversion[i[5]], float(i[1]), float(i[2]), float(i[3])])
return output
def offset(list, x=False, y=False, z=False):
output = []
for i in list:
element = []
element.append(i[0])
element.append(i[1]+box[0] if x else i[1])
element.append(i[2]+box[1] if y else i[2])
element.append(i[3]+box[2] if z else i[3])
output.append(element)
return output
input = "IRMOF1step0.mol"
alldata = []
with open(input, 'r') as f:
for line in f:
alldata.append(line.split())
coords = []
for i in alldata[4:-8:]:
coords.append(i)
box = []
for i in alldata[-1]:
box.append(float(i))
print(box)
#print(coords[-1])
for i in coords:
if i[5] == '-1.30':
print(i)
basicunit = convertcoords(coords)
unit001 = offset(basicunit, False, False, True)
unit010 = offset(basicunit, False, True, False)
unit100 = offset(basicunit, True, False, False)
unit110 = offset(basicunit, True, True, False)
unit101 = offset(basicunit, True, False, True)
unit011 = offset(basicunit, False, True, True)
unit111 = offset(basicunit, True, True, True)
cell000 = printcoords(basicunit)
with open('testconfig.txt', 'w') as f:
f.write('Test Autogenerated supercell\n 0 1\n')
f.write('{0:15.7f}{1:15.7f}{2:15.7f}\n'.format(box[0]*2, 0., 0.))
f.write('{1:15.7f}{0:15.7f}{2:15.7f}\n'.format(box[1]*2, 0., 0.))
f.write('{2:15.7f}{1:15.7f}{0:15.7f}\n'.format(box[2]*2, 0., 0.))
f.write('NUMMOL 2 6000 8\n')
f.write('''MOLECULE Nitrogen 3 3
N c
9.9188610 9.4992033 9.2883771 0
M c
9.7441457 9.1889227 9.7075434 0
N c
10.5043414 8.8264009 10.4777255 0
''')
f.write(printcoords(basicunit) + '\n')
f.write(printcoords(unit001) + '\n')
f.write(printcoords(unit010) + '\n')
f.write(printcoords(unit100) + '\n')
f.write(printcoords(unit011) + '\n')
f.write(printcoords(unit101) + '\n')
f.write(printcoords(unit110) + '\n')
f.write(printcoords(unit111))