A series of Python3 script to lower the barrier of computing and simulating molecular and material systems.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.4 KiB

2 years ago
def gen2poscar(input):
fname = input.split(".")
type = ""
Natom = 0
elem_type = []
coord = []
index = []
cell = []
N_elem = []
with open(input, 'r') as f:
header = next(f).split()
Natom += int(header[0])
type += header[1]
header2 = next(f).split()
for i in header2:
elem_type.append(i)
for i in range(Natom):
arr = next(f).split()
coord.append(arr[2:])
index.append(arr[1])
next(f)
for line in f:
arr = line.split()
cell.append(arr[0:])
for i in set(index):
Nele = index.count(i)
N_elem.append(Nele)
sym = []
for k in range(len(N_elem)):
for j in elem_type:
for i in range(int(N_elem[k])):
sym.append(j)
with open('{}.vasp'.format(fname[0]),'w') as f:
print("CMMDE poscar file",file=f)
print("1.0",file=f)
if cell[0] !=0:
for i in cell:
print("{} {} {}".format(i[0],i[1],i[2]),file=f)
for i in elem_type:
print("{}".format(i),end=" ", file=f)
print("",file=f)
for i in N_elem:
print("{}".format(i),end=" ", file=f)
print("",file=f)
print("Cart",file=f)
for coord, sym in zip(coord,sym):
print("{:16.12f} {:16.12f} {:16.12f} {} ".format(float(coord[0]),float(coord[1]),float(coord[2]),sym),file=f)