Convert XDATCAR(VASP) trajectory to unwraped xyz file (**Python**) =========== Usage: ./a.out :: #lipai@mail.ustc.edu.cn #convert XDATCAR to unwraped xyz file import numpy as np from copy import deepcopy xdatcar = open('XDATCAR', 'r') xyz = open('XDATCAR.xyz', 'w') system = xdatcar.readline() scale = float(xdatcar.readline().rstrip('\n')) print(scale) #get lattice vectors a1 = np.array([ float(s)*scale for s in xdatcar.readline().rstrip('\n').split() ]) a2 = np.array([ float(s)*scale for s in xdatcar.readline().rstrip('\n').split() ]) a3 = np.array([ float(s)*scale for s in xdatcar.readline().rstrip('\n').split() ]) comment='Lattice=\"'+str(a1[0])+' '+str(a1[1])+' '+str(a1[2]) comment=comment+str(a2[0])+' '+str(a2[1])+' '+str(a2[2]) comment=comment+str(a3[0])+' '+str(a3[1])+' '+str(a3[2])+'\"' #Read xdatcar element_names = xdatcar.readline().rstrip('\n').split() element_dict = {} element_numbers = xdatcar.readline().rstrip('\n').split() Natom = 0 Ntype = len(element_names) Nname=[] for t in range(Ntype): Natom += int(element_numbers[t]) for i in range(int(element_numbers[t])): Nname.append(element_names[t]) print(Ntype,Natom) f_prev=np.zeros([Natom,3]) f_next=np.zeros([Natom,3]) while True: line = xdatcar.readline() if len(line) == 0: break xyz.write(str(Natom) + "\n"+comment+"\n") for atom in range(Natom): p = xdatcar.readline().rstrip('\n').split() f_next[atom,:] = np.array([ float(s) for s in p ]) for x in range(3): if(f_next[atom,x]-f_prev[atom,x]<-0.5): f_next[atom,x]+=1 elif(f_next[atom,x]-f_prev[atom,x]>0.5): f_next[atom,x]-=1 c_coords=f_next[atom,0]*a1+f_next[atom,1]*a2+f_next[atom,2]*a3 xyz.write(Nname[atom]+" "+str(c_coords[0])+" "+str(c_coords[1])+" "+str(c_coords[2])+"\n") f_prev=deepcopy(f_next) xdatcar.close() xyz.close()