Пример #1
0
def test_mos2(i):
    size = 2
    atoms = mx2(formula='MoS2', size=(size, size, 1))
    permutation = np.roll(np.arange(3), i)
    atoms = permute_axes(atoms, permutation)
    result = find_inversion_symmetry(atoms)
    check_result(atoms, result)
Пример #2
0
def test_nanotube(i):
    size = 4
    atoms = nanotube(3, 3, length=size)
    permutation = np.roll(np.arange(3), i)
    atoms = permute_axes(atoms, permutation)

    result = find_inversion_symmetry(atoms)
    assert result.rmsd < TOL
    check_result(atoms, result)

    atoms.rattle()
    result = find_inversion_symmetry(atoms)
    check_result(atoms, result)
Пример #3
0
def test_nanotube(seed, i):
    size = 4
    atoms = nanotube(3, 3, length=size)
    permutation = np.roll(np.arange(3), i)
    atoms = permute_axes(atoms, permutation)

    rng = np.random.RandomState(seed=seed)
    atoms = randomize(rng, atoms)

    result = find_crystal_reductions(atoms)[:3]
    factors = [reduced.factor for reduced in result]
    assert tuple(factors) == (1, 2, 4)
    assert all([reduced.rmsd < TOL for reduced in result])
    check_components(atoms, result)
Пример #4
0
def test_permute_axes(seed):
    rng = np.random.RandomState(seed)
    n = 10
    atoms = Atoms(numbers=[1] * n,
                  scaled_positions=rng.uniform(0, 1, (n, 3)),
                  pbc=rng.randint(0, 2, 3),
                  cell=rng.uniform(-1, 1, (3, 3)))

    permutation = rng.permutation(3)
    permuted = permute_axes(atoms, permutation)
    invperm = np.argsort(permutation)
    original = permute_axes(permuted, invperm)

    assert (original.pbc == atoms.pbc).all()
    assert_allclose(original.cell, atoms.cell, atol=TOL)
    assert_allclose(original.get_positions(), atoms.get_positions(), atol=TOL)
    assert_allclose(atoms.get_positions()[:, permutation],
                    permuted.get_positions(),
                    atol=TOL)

    assert_allclose(atoms.cell.volume, permuted.cell.volume, atol=TOL)
    assert_allclose(atoms.cell.volume, original.cell.volume, atol=TOL)
    assert (permuted.pbc == atoms.pbc[permutation]).all()
Пример #5
0
def test_mos2(seed, i):
    size = 4
    atoms = mx2(formula='MoS2', size=(size, size, 1))
    permutation = np.roll(np.arange(3), i)
    atoms = permute_axes(atoms, permutation)

    rng = np.random.RandomState(seed=seed)
    atoms = randomize(rng, atoms)

    result = find_crystal_reductions(atoms)
    assert len(result) == size + 1
    assert all([reduced.rmsd < TOL for reduced in result])
    factors = [reduced.factor for reduced in result]
    assert tuple(factors) == (1, 2, 4, 8, 16)
    check_components(atoms, result)
Пример #6
0
def prepare(seed, i, translate, atoms):
    rng = np.random.RandomState(seed=seed)

    atoms = standardize(atoms).atoms
    permutation = np.roll(np.arange(3), i)
    atoms = permute_axes(atoms, permutation)
    if translate:
        atoms.positions += rng.uniform(-1, 1, atoms.positions.shape)
        atoms.wrap(eps=0)

    positions = atoms.get_positions(wrap=False)
    offset = rng.randint(-5, 6, positions.shape)
    for i in range(3):
        if not atoms.pbc[i]:
            offset[:, i] = 0
    scattered = positions.copy() + offset @ atoms.cell

    wrapped = wrap_positions(scattered, atoms.cell, atoms.pbc)
    check_result(atoms, positions, wrapped, translate)