コード例 #1
0
def removedAtoms(extra_atoms, crystal_atoms, identifiers, surface_unit_cell, periodicity):
    atoms = Atoms([], cell=extra_atoms.get_cell(), pbc=extra_atoms.get_pbc())

    for identifier in identifiers:
        number, cell = identifier

        if number >= 0:
            atom = extra_atoms.copy()[number]
            depth = 0
        elif number < 0:
            number = -(number + 1)
            depth, crystal_number = divmod(number, len(crystal_atoms))

            atom=crystal_atoms.copy()[crystal_number]
        else:
            raise Exception

        shift = -surface_unit_cell[2]*depth

        cell = (cell[0], cell[1], 0)
        shift += np.dot(cell, surface_unit_cell)

        atom.position += shift
        atoms += atom

    setCellAndPBC(atoms, periodicity)

    return atoms
コード例 #2
0
    def addedAtoms(self, coordinates='orth_defect'):
        extra_atoms = self.surface().extraAtoms('orth_surface')
        unit_cell = self.surface().unitCell('orth_surface')
        periodicity = self.periodicity()
        atoms = Atoms([], cell=extra_atoms.get_cell(), pbc=extra_atoms.get_pbc())
        atoms += self.__added_atoms.copy()
        setCellAndPBC(atoms, periodicity)
        atoms = self.change(atoms, to=coordinates, fro='orth_surface')

        return atoms