Example #1
0
    def process_item(self, item):
        """
        Process the tasks and materials into a magnetism collection

        Args:
            item dict: a dict of material_id, structure, and tasks

        Returns:
            dict: a magnetism dictionary
        """

        struct = Structure.from_dict(item["structure"])
        total_magnetization = item["magnetism"].get(
            "total_magnetization", 0)  # not necessarily == sum(magmoms)
        msa = CollinearMagneticStructureAnalyzer(struct)

        sign = np.sign(total_magnetization)
        total_magnetization = abs(total_magnetization)
        magmoms = list(sign * np.array(msa.magmoms))

        magnetism = {
            self.magnetism.key: item[self.materials.key],
            "magnetism": {
                'ordering':
                msa.ordering.value,
                'is_magnetic':
                msa.is_magnetic,
                'exchange_symmetry':
                msa.get_exchange_group_info()[1],
                'num_magnetic_sites':
                msa.number_of_magnetic_sites,
                'num_unique_magnetic_sites':
                msa.number_of_unique_magnetic_sites(),
                'types_of_magnetic_species':
                [str(t) for t in msa.types_of_magnetic_specie],
                'magmoms':
                magmoms,
                'total_magnetization_normalized_vol':
                total_magnetization / struct.volume,
                'total_magnetization_normalized_formula_units':
                total_magnetization /
                (struct.composition.get_reduced_composition_and_factor()[1])
            },
            "pymatgen_version": pymatgen_version
        }
        return magnetism
Example #2
0
    def calc(self, item):
        """
        Process the tasks and materials into a magnetism collection

        Args:
            item dict: a dict of material_id, structure, and tasks

        Returns:
            dict: a magnetism dictionary
        """

        struct = Structure.from_dict(get(item, "output.structure"))
        struct_has_magmoms = 'magmom' in struct.site_properties
        total_magnetization = abs(
            get(item, "calcs_reversed.0.output.outcar.total_magnetization", 0))
        msa = CollinearMagneticStructureAnalyzer(struct)
        magmoms = msa.magmoms

        magnetism = {
            "magnetism": {
                'ordering':
                msa.ordering.value if struct_has_magmoms else "Unknown",
                'is_magnetic':
                msa.is_magnetic,
                'exchange_symmetry':
                msa.get_exchange_group_info()[1],
                'num_magnetic_sites':
                msa.number_of_magnetic_sites,
                'num_unique_magnetic_sites':
                msa.number_of_unique_magnetic_sites(),
                'types_of_magnetic_species':
                [str(t) for t in msa.types_of_magnetic_specie],
                'magmoms':
                magmoms,
                'total_magnetization':
                total_magnetization,
                'total_magnetization_normalized_vol':
                total_magnetization / struct.volume,
                'total_magnetization_normalized_formula_units':
                total_magnetization /
                (struct.composition.get_reduced_composition_and_factor()[1])
            },
            "pymatgen_version": pymatgen_version
        }
        return magnetism
Example #3
0
    def test_magnetic_properties(self):
        msa = CollinearMagneticStructureAnalyzer(self.GdB4)
        self.assertFalse(msa.is_collinear)

        msa = CollinearMagneticStructureAnalyzer(self.Fe)
        self.assertFalse(msa.is_magnetic)

        self.Fe.add_site_property("magmom", [5])

        msa = CollinearMagneticStructureAnalyzer(self.Fe)
        self.assertTrue(msa.is_magnetic)
        self.assertTrue(msa.is_collinear)
        self.assertEqual(msa.ordering, Ordering.FM)

        msa = CollinearMagneticStructureAnalyzer(
            self.NiO,
            make_primitive=False,
            overwrite_magmom_mode="replace_all_if_undefined",
        )
        self.assertEqual(msa.number_of_magnetic_sites, 4)
        self.assertEqual(msa.number_of_unique_magnetic_sites(), 1)
        self.assertEqual(msa.types_of_magnetic_species, (Element.Ni, ))
        self.assertEqual(msa.get_exchange_group_info(), ("Fm-3m", 225))