Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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