Ejemplo n.º 1
0
def test_local_extrema_append_sites_to_supercell_info2(local_extrema,
                                                       simple_cubic):
    sites = {
        "H1":
        Site(element="H",
             wyckoff_letter="a",
             site_symmetry="mmm",
             equivalent_atoms=[0, 1, 2, 3, 4, 5, 6, 7])
    }
    actual_cubic = Structure.from_dict(simple_cubic.as_dict())
    supercell_info = SupercellInfo(actual_cubic * [2, 2, 2], "Pm-3m",
                                   [[2, 0, 0], [0, 2, 0], [0, 0, 2]], sites,
                                   [])

    actual_2 = local_extrema.append_sites_to_supercell_info(supercell_info,
                                                            indices=[2])

    interstitials = [
        Interstitial(frac_coords=[0.05, 0.0, 0.0],
                     site_symmetry="4mm",
                     info="test #2")
    ]
    expected_2 = SupercellInfo(actual_cubic * [2, 2, 2], "Pm-3m",
                               [[2, 0, 0], [0, 2, 0], [0, 0, 2]], sites,
                               interstitials)
    assert actual_2 == expected_2
Ejemplo n.º 2
0
def cubic_supercell_info(cubic_supercell):
    sites = {"H1": Site(element="H", wyckoff_letter="a", site_symmetry="m-3m",
                        equivalent_atoms=list(range(32))),
             "He1": Site(element="He", wyckoff_letter="b", site_symmetry="m-3m",
                         equivalent_atoms=list(range(32, 64)))}
    interstitial = Interstitial([0.25]*3, site_symmetry="yy")
    return SupercellInfo(cubic_supercell,
                         "Fm-3m",
                         [[2, 0, 0], [0, 2, 0], [0, 0, 2]],
                         sites,
                         interstitials=[interstitial])
Ejemplo n.º 3
0
    def _generate_supercell_info(self):
        symmetrizer = StructureSymmetrizer(self.supercell.structure)
        if symmetrizer.sg_number != self.sg:
            raise SupercellError

        self.supercell_info = SupercellInfo(
            self.supercell.structure,
            self.sg_symbol,
            self.transformation_matrix,
            symmetrizer.sites,
            unitcell_structure=self.primitive_structure)
Ejemplo n.º 4
0
def supercell_info(ortho_conventional):
    sites = {
        "H1":
        Site(element="H",
             wyckoff_letter="a",
             site_symmetry="mmm",
             equivalent_atoms=[0, 1, 2, 3]),
        "He1":
        Site(element="He",
             wyckoff_letter="b",
             site_symmetry="mmm",
             equivalent_atoms=[4, 5, 6, 7])
    }
    interstitial = Interstitial(frac_coords=[0.25] * 3,
                                site_symmetry="yy",
                                info="test")
    return SupercellInfo(ortho_conventional, "Fmmm",
                         [[1, 0, 0], [0, 1, 0], [0, 0, 1]], sites,
                         [interstitial])
Ejemplo n.º 5
0
    def _generate_supercell_info(self):
        multiplicity = int(round(det(self.transformation_matrix)))

        sites = {}
        for site_name, site in self.symmetrizer.sites.items():
            atoms = []
            for i in site.equivalent_atoms:
                atoms.extend(
                    list(range(i * multiplicity, (i + 1) * multiplicity)))
            sites[site_name] = Site(element=site.element,
                                    wyckoff_letter=site.wyckoff_letter,
                                    site_symmetry=site.site_symmetry,
                                    equivalent_atoms=atoms)

        self.supercell_info = \
            SupercellInfo(structure=self.supercell.structure,
                          space_group=self.sg_symbol,
                          transformation_matrix=self.transformation_matrix,
                          sites=sites,
                          unitcell_structure=self.primitive_structure)
Ejemplo n.º 6
0
def cubic_supercell_info_wo_int(cubic_supercell):
    sites = {
        "H1":
        Site(element="H",
             wyckoff_letter="a",
             site_symmetry="m-3m",
             equivalent_atoms=[0, 1, 2, 3]),
        "He1":
        Site(element="He",
             wyckoff_letter="b",
             site_symmetry="m-3m",
             equivalent_atoms=[4, 5, 6, 7])
    }
    unitcell = Structure(Lattice.rhombohedral(7.071068, 60),
                         species=["H", "He"],
                         coords=[[0.0] * 3, [0.5] * 3])
    return SupercellInfo(cubic_supercell,
                         "Fm-3m", [[-2, 2, 2], [2, -2, 2], [2, 2, -2]],
                         sites,
                         unitcell_structure=unitcell)
Ejemplo n.º 7
0
def supercell_info(mocker, ortho_conventional):
    mock = mocker.patch("pydefect.util.structure_tools.defaults")
    mock.same_distance_criterion = defaults.same_distance_criterion
    mock.cutoff_distance_factor = 1.7
    sites = {
        "H1":
        Site(element="H",
             wyckoff_letter="a",
             site_symmetry="mmm",
             equivalent_atoms=[0, 1, 2, 3]),
        "He1":
        Site(element="He",
             wyckoff_letter="b",
             site_symmetry="mmm",
             equivalent_atoms=[4, 5, 6, 7])
    }
    interstitial = Interstitial([0.25] * 3,
                                wyckoff_letter="x",
                                site_symmetry="yy")
    return SupercellInfo(ortho_conventional, "Fmmm",
                         [[1, 0, 0], [0, 1, 0], [0, 0, 1]], sites,
                         [interstitial])
Ejemplo n.º 8
0
def cubic_supercell_info_wo_int(mocker, cubic_supercell):
    mock = mocker.patch("pydefect.util.structure_tools.defaults")
    mock.same_distance_criterion = defaults.same_distance_criterion
    mock.cutoff_distance_factor = 1.7
    sites = {
        "H1":
        Site(element="H",
             wyckoff_letter="a",
             site_symmetry="m-3m",
             equivalent_atoms=[0, 1, 2, 3]),
        "He1":
        Site(element="He",
             wyckoff_letter="b",
             site_symmetry="m-3m",
             equivalent_atoms=[4, 5, 6, 7])
    }
    unitcell = Structure(Lattice.rhombohedral(7.071068, 60),
                         species=["H", "He"],
                         coords=[[0.0] * 3, [0.5] * 3])
    return SupercellInfo(cubic_supercell,
                         "Fm-3m", [[-2, 2, 2], [2, -2, 2], [2, 2, -2]],
                         sites,
                         unitcell_structure=unitcell)
Ejemplo n.º 9
0
def test_supercell_info_from_dict(supercell_info):
    d = supercell_info.as_dict()
    d["transform_matrix"] = d.pop("transformation_matrix")
    expected = SupercellInfo.from_dict(d)
    assert expected == supercell_info