def makeSample(crystal, vectors): radius = numpy.max(vectorLength(vectors)) repeats = findNeededRepetitions(crystal.unitCell(), radius) atoms = crystal.toAseAtoms() atoms = atoms.repeat(repeats) atoms.set_cell(vectors) atoms = wrap(atoms) atoms = removeCopies(atoms) return atoms
def makePeriodicSample(crystal, radius=5): unit_cell=crystal.unitCell() l_b=len(unit_cell) atoms = crystal.toAseAtoms() repeats = findNeededRepetitions(unit_cell, numpy.array([radius]*3)) sample = atoms.repeat(repeats) vectors = makeQuiteOrthogonalVectors(unit_cell, repeats) sample.set_cell(vectors) sample = removeCopies(sample) sample = wrap(sample) return sample
def atoms(self, constrained=True, parameters=DEFAULT): parameters = self.defaultParameters(parameters) vectors = np.array(parameters['vectors']) lengths = vectorLength(vectors, 1) assert lengths.all() atoms = self.__atoms.copy() vectors = convertFromBasis(vectors, atoms.cell) repeats = findNeededRepetitions(atoms.cell, 1.5*lengths.max()) atoms = atoms.repeat(repeats) atoms.cell[atoms.pbc] = vectors atoms.wrap() atoms = removeCopies(atoms) atoms.setTag('Reference', picker=None) padding = np.logical_not(atoms.pbc) assert padding.sum() == 0 atoms = self.makeAtomsRelaxed(atoms, self.relaxation()) return atoms