def crystal2angstroem(self): for atom in self.at(): coo=[float(0.0),float(0.0),float(0.0)] # calculate coordinates for dim in range(len(atom.coord())): coo=calc.vecadd(coo,calc.scal_vecmult( atom.coord()[dim],self.vec()[dim]) ) # set relative and real coordinates atom.coord_crystal=atom.coord() atom.set_pos(coo)
def wrap_atom(self, coord_alat, atom, nwrap): # calculate shift to box shift = [0.0, 0.0, 0.0] outofbox = True while outofbox == True: for i in range(ndim): if coord_alat[i] > 1.0: for idim in range(ndim): shift[idim] -= self.vec()[i][idim] coord_alat[i] -= 1 elif coord_alat[i] < 0.0: for idim in range(ndim): shift[idim] += self.vec()[i][idim] coord_alat[i] += 1 outofbox = False for i in range(ndim): if coord_alat[i] > 1.0 or coord_alat[i] < 0.0: outofbox = True # reset coordinates if shift != [0.0, 0.0, 0.0]: nwrap += 1 atom.set_pos(calc.vecadd(atom.coord(), shift)) return nwrap