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
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
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