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
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
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)
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)
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)
def test_get_energy(self): m = SymmetryModel() s2 = read_structure(os.path.join(test_dir, "Li2O.cif")) self.assertEqual(m.get_energy(s2), -225)