Example #1
0
def findAtoms(extra_atoms, crystal_atoms, identifiers, surface_unit_cell):
    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, tuple(tuple()))

    return atoms
Example #2
0
    def findAtoms(self, identifiers, initialized=True):
        pure_atoms = self.extraAtoms()
        atoms = Atoms([], cell=pure_atoms.get_cell(), pbc=pure_atoms.get_pbc())
        unit_cell = pure_atoms.cell

        for identifier in identifiers:
            number, cell = identifier

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

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

            shift = -unit_cell[2]*depth

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

            atom.position += shift
            atoms += atom

        setCellAndPBC(atoms, periodicity=[])

        if initialized:
            atoms = self.initializedState(atoms)

        atoms = self.makeAtomsRelaxed(atoms, self.relaxation())

        return atoms
Example #3
0
    def addedAtoms(self, coordinates='orth_defect', relaxed=True):
        extra_atoms = self.surface().extraAtoms('orth_surface')
        unit_cell = self.surface().unitCell('orth_surface')
        atoms = Atoms([], cell=extra_atoms.get_cell(), pbc=extra_atoms.get_pbc())
        atoms += self.__added_atoms.copy()
        setCellAndPBC(atoms, tuple(tuple()))
        atoms = self.change(atoms, to=coordinates, fro='orth_surface')

        if relaxed:
            self.makeAtomsRelaxed(atoms, self.relaxation())

        return atoms