-
Notifications
You must be signed in to change notification settings - Fork 0
/
twister2lammps.py
86 lines (68 loc) · 1.94 KB
/
twister2lammps.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
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 17 15:45:22 2020
@author: Sheikh Ahnaf Alvi
"""
import numpy as np
import os
import sys
#load the twister file
cwd=os.getcwd()
print(cwd)
file=sys.argv[1]
out="lammps_"+file[:-4]+".txt"
print(os.path.join(cwd,file))
atom,x,y,z=np.genfromtxt(file,delimiter=' ',unpack=True)
# getting the z co-ordinates
zed=np.unique(z)
print(zed)
zed.sort()
print(zed)
layer_num=list(range(len(z)))
zlo=np.min(z)
zhi=np.max(z)
ylo=np.min(y)
yhi=np.max(y)
xlo=np.min(x)
xhi=np.max(x)
num_atom=len(z)
def layer(z,zed,file,out):
for x in range(len(z)):
if z[x]==zed[0]:
layer_num[x]=1
elif z[x]==zed[1]:
layer_num[x]=2
elif z[x]==zed[2]:
layer_num[x]=3
elif z[x]==zed[3]:
layer_num[x]=4
elif z[x]==zed[4]:
layer_num[x]=5
else :
layer_num[x]=6
with open(file,"r") as f:
lines=f.readlines()
count=0
for line in lines:
atom_id=count+1
print(line)
list_line=line.split(" ")
print(list_line)
list_line[0]=str(layer_num[count])
list_line.insert(0,str(atom_id))
lin= ' '.join(list_line)
print(lin)
with open(out,"a") as fo:
fo.writelines(lin)
count=count+1
with open(out,"w") as fo:
fo.writelines("\n")
fo.writelines("{} atoms\n".format(num_atom))
fo.writelines("{} atom types\n".format(len(zed)))
fo.writelines("{} {} xlo xhi\n".format(xlo,xhi))
fo.writelines("{} {} ylo yhi\n".format(ylo,yhi))
fo.writelines("{} {} zlo zhi\n".format(zlo,zhi))
fo.writelines("\n")
fo.writelines("Atoms\n")
fo.writelines("\n")
layer(z,zed,file,out)