Beispiel #1
0
def test_equality_of_sqs_objects():
    """SQS structures with different underlying crystal structures are equivalent iff sublattice models are equivalent."""
    config = [['A', 'B'], ['A']]
    occupancy = [[0.5, 0.5], [1]]
    site_ratios = [3, 1]
    # Use same sublattice for different underlying structures. Should be equal
    s1 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'],
                      [[0, 0, 0], [0.3333, 0.66666, 0.5]],
                      sublattice_configuration=config,
                      sublattice_occupancies=occupancy,
                      sublattice_site_ratios=site_ratios)
    s2 = PRLStructure(Lattice.cubic(1), ['Fe'], [[0, 0, 0]],
                      sublattice_configuration=config,
                      sublattice_occupancies=occupancy,
                      sublattice_site_ratios=site_ratios)
    assert s1 == s2

    # Use same underlying crystal structures, but different sublattice configurations. Should be not equal
    s1.sublattice_site_ratios = [2, 1]
    assert s1 != s2
    s1.sublattice_site_ratios = site_ratios

    s1.sublattice_occupancies = [[0.25, 0.5], [1]]
    assert s1 != s2
    s1.sublattice_occupancies = occupancy

    s1.sublattice_configuration = [['A', 'A'], ['A']]
    assert s1 != s2
    s1.sublattice_configuration = config

    assert s1 == s2
Beispiel #2
0
def test_equality_of_sqs_objects_with_different_indexing():
    """SQS structures that are the same, but indexed differently should be equal."""
    # TODO: implement this behavior in SQS.__eq__
    config_1 = [['A', 'B'], ['A']]
    occupancy_1 = [[0.25, 0.75], [1]]
    site_ratios_1 = [3, 1]

    config_2 = [['A'], ['A', 'B']]
    occupancy_2 = [[1], [0.25, 0.75]]
    site_ratios_2 = [1, 3]

    s1 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'],
                      [[0, 0, 0], [0.3333, 0.66666, 0.5]],
                      sublattice_configuration=config_1,
                      sublattice_occupancies=occupancy_1,
                      sublattice_site_ratios=site_ratios_1)
    s2 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'],
                      [[0, 0, 0], [0.3333, 0.66666, 0.5]],
                      sublattice_configuration=config_2,
                      sublattice_occupancies=occupancy_2,
                      sublattice_site_ratios=site_ratios_2)

    assert s1 == s2
Beispiel #3
0
def get_lattice(kind):
    if kind == "hcp":
        latt = Lattice(
            np.array([[1, 0, 0], [0.5, np.sqrt(3) / 2, 0],
                      [0, 0, 2 * np.sqrt(6) / 3]]))
        coords = [[0, 0, 0], [1 / 3, 1 / 3, 0.5]]
    else:
        coords = [[0, 0, 0]]

    if kind == "sc":
        latt = Lattice(np.eye(3))
    elif kind == "fcc":
        latt = Lattice(np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]]))
    elif kind == "bcc":
        latt = Lattice(np.array([[-1, 1, 1], [1, -1, 1], [1, 1, -1]]))
    elif kind == "hex":
        latt = Lattice.hexagonal(1, 2 * np.sqrt(6) / 3)
    elif kind == "tet":
        latt = Lattice(np.diag([1, 1, 1.2]))

    struct = Structure(latt, [DummySpecie("X")] * len(coords), coords)
    return struct