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
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])
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)
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])
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)
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)
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])
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)
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