コード例 #1
0
 def __init__(self,
              mag_species_spin,
              order_parameter=0.5,
              energy_model=SymmetryModel(),
              **kwargs):
     self.mag_species_spin = mag_species_spin
     if order_parameter > 1 or order_parameter < 0:
         raise ValueError('Order Parameter must lie between 0 and 1')
     else:
         self.order_parameter = order_parameter
     self.energy_model = energy_model
     self.kwargs = kwargs
コード例 #2
0
    def __init__(self,
                 mag_species_spin,
                 order_parameter=0.5,
                 energy_model=SymmetryModel(),
                 **kwargs):
        """
        This transformation takes a structure and returns a list of collinear
        magnetic orderings. For disordered structures, make an ordered
        approximation first.

        :param mag_species_spin: A mapping of elements/species to their
        spin magnitudes, e.g. {"Fe3+": 5, "Mn3+": 4}
        :param order_parameter (float or list): if float, a specifies a
        global order parameter and can take values from 0.0 to 1.0
        (e.g. 0.5 for antiferromagnetic or 1.0 for ferromagnetic), if
        list has to be a list of
        :class: `pymatgen.transformations.advanced_transformations.MagOrderParameterConstraint`
        to specify more complicated orderings, see documentation for
        MagOrderParameterConstraint more details on usage
        :param energy_model: Energy model to rank the returned structures,
        see :mod: `pymatgen.analysis.energy_models` for more information (note
        that this is not necessarily a physical energy). By default, returned
        structures use SymmetryModel() which ranks structures from most
        symmetric to least.
        :param kwargs: Additional kwargs that are passed to
        :class:`EnumerateStructureTransformation` such as min_cell_size etc.
        """

        # checking for sensible order_parameter values
        if isinstance(order_parameter, float):
            # convert to constraint format
            order_parameter = [
                MagOrderParameterConstraint(order_parameter=order_parameter,
                                            species_constraints=list(
                                                mag_species_spin.keys()))
            ]
        elif isinstance(order_parameter, list):
            ops = [
                isinstance(item, MagOrderParameterConstraint)
                for item in order_parameter
            ]
            if not any(ops):
                raise ValueError("Order parameter not correctly defined.")
        else:
            raise ValueError("Order parameter not correctly defined.")

        self.mag_species_spin = mag_species_spin
        # store order parameter constraints as dicts to save implementing
        # to/from dict methods for MSONable compatibility
        self.order_parameter = [op.as_dict() for op in order_parameter]
        self.energy_model = energy_model
        self.enum_kwargs = kwargs
コード例 #3
0
 def test_to_from_dict(self):
     m = SymmetryModel(symprec=0.2)
     d = m.as_dict()
     o = SymmetryModel.from_dict(d)
     self.assertIsInstance(o, SymmetryModel)
     self.assertAlmostEqual(o.symprec, 0.2)
コード例 #4
0
 def test_get_energy(self):
     m = SymmetryModel()
     s2 = Structure.from_file(os.path.join(test_dir, "Li2O.cif"))
     self.assertAlmostEqual(m.get_energy(s2), -225)
コード例 #5
0
 def test_to_from_dict(self):
     m = SymmetryModel(symprec=0.2)
     d = m.as_dict()
     o = SymmetryModel.from_dict(d)
     self.assertIsInstance(o, SymmetryModel)
     self.assertAlmostEqual(o.symprec, 0.2)
コード例 #6
0
 def test_get_energy(self):
     m = SymmetryModel()
     s2 = Structure.from_file(os.path.join(PymatgenTest.TEST_FILES_DIR, "Li2O.cif"))
     self.assertAlmostEqual(m.get_energy(s2), -225)
コード例 #7
0
 def test_get_energy(self):
     m = SymmetryModel()
     s2 = read_structure(os.path.join(test_dir, "Li2O.cif"))
     self.assertEqual(m.get_energy(s2), -225)
コード例 #8
0
 def test_get_energy(self):
     m = SymmetryModel()
     s2 = Structure.from_file(os.path.join(test_dir, "Li2O.cif"))
     self.assertAlmostEqual(m.get_energy(s2), -225)
コード例 #9
0
 def test_get_energy(self):
     m = SymmetryModel()
     s2 = read_structure(os.path.join(test_dir, "Li2O.cif"))
     self.assertEqual(m.get_energy(s2), -225)