def read_POSCAR(self,fname='POSCAR'): f=open(fname,'r') # 1st: comment self.c1= f.readline() # 2nd: multiplying factor self.alc= float(f.readline().split()[0]) # 3-5: lattice vectors self.a1= np.array([float(x) for x in f.readline().split()]) self.a2= np.array([float(x) for x in f.readline().split()]) self.a3= np.array([float(x) for x in f.readline().split()]) # 6th: num of atoms par species data= f.readline().split() if( data[0].isdigit() ): natm_per_spcs= np.array([int(d) for d in data]) else: # skip one line and read next line data= f.readline().split() natm_per_spcs= np.array([int(d) for d in data]) # 7th: comment (in some cases, 8th line too) self.c7= f.readline() if self.c7[0] in ('s','S'): self.c8= f.readline() # hereafter: atom positions sid= 0 self.atoms=[] for ni in natm_per_spcs: sid += 1 for j in range(ni): line= f.readline().split() data= [ float(line[i]) for i in range(3)] ai= Atom() ai.set_sid(sid) ai.set_pos(data[0],data[1],data[2]) ai.set_auxd(line[3:]) ai.pbc() self.atoms.append(ai) f.close()