Esempio n. 1
0
 def expand(self,n1,n2,n3):
     #...expand unit vectors
     self.a1= self.a1*n1
     self.a2= self.a2*n2
     self.a3= self.a3*n3
     n123= n1*n2*n3
     nsid= 0
     for ai in self.atoms:
         nsid= max(nsid,ai.sid)
     natm_per_spcs= np.zeros((nsid,),dtype=int)
     for ai in self.atoms:
         sid= ai.sid -1
         natm_per_spcs[sid] += 1
     natm0= self.num_atoms()
     atoms0= copy.copy(self.atoms)
     self.atoms= []
     aid= 0
     for ai0 in atoms0:
         ai0.pos[0] /= n1
         ai0.pos[1] /= n2
         ai0.pos[2] /= n3
         for i1 in range(n1):
             for i2 in range(n2):
                 for i3 in range(n3):
                     aid += 1
                     ai= Atom()
                     ai.sid= ai0.sid
                     x= ai0.pos[0]+1.0/n1*i1
                     y= ai0.pos[1]+1.0/n2*i2
                     z= ai0.pos[2]+1.0/n3*i3
                     ai.set_pos(x,y,z)
                     ai.set_auxd(ai0.auxd)
                     ai.set_id(aid)
                     self.atoms.append(ai)
Esempio n. 2
0
 def read_pmd(self,fname='pmd0000'):
     f=open(fname,'r')
     # 1st: lattice constant
     self.alc= float(f.readline().split()[0])
     # 2nd-4th: cell 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()])
     # 5th-7th: velocity of cell vectors
     tmp= f.readline().split()
     tmp= f.readline().split()
     tmp= f.readline().split()
     # 8st: num of atoms
     buff= f.readline().split()
     natm= int(buff[0])
     nauxd= 9
     # 9th-: atom positions
     self.atoms= []
     for i in range(natm):
         data= [float(x) for x in f.readline().split()]
         ai= Atom()
         ai.decode_tag(data[0])
         ai.set_pos(data[1],data[2],data[3])
         ai.set_auxd(data[4:4+nauxd])
         self.atoms.append(ai)
     f.close()
Esempio n. 3
0
 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()