Esempio n. 1
0
 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)
Esempio n. 2
0
    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