def test_apply_transformation(self): trans = MagOrderingTransformation({"Fe": 5}) p = Poscar.from_file(os.path.join(test_dir, 'POSCAR.LiFePO4'), check_for_POTCAR=False) s = p.structure alls = trans.apply_transformation(s, 10) self.assertEqual(len(alls), 3) f = SpacegroupAnalyzer(alls[0]["structure"], 0.1) self.assertEqual(f.get_spacegroup_number(), 31) model = IsingModel(5, 5) trans = MagOrderingTransformation({"Fe": 5}, energy_model=model) alls2 = trans.apply_transformation(s, 10) #Ising model with +J penalizes similar neighbor magmom. self.assertNotEqual(alls[0]["structure"], alls2[0]["structure"]) self.assertEqual(alls[0]["structure"], alls2[2]["structure"]) s = self.get_structure('Li2O') #Li2O doesn't have magnetism of course, but this is to test the # enumeration. trans = MagOrderingTransformation({"Li+": 1}, max_cell_size=3) alls = trans.apply_transformation(s, 100) self.assertEqual(len(alls), 10)
def test_to_from_dict(self): m = IsingModel(5, 4) d = m.as_dict() o = IsingModel.from_dict(d) self.assertIsInstance(o, IsingModel) self.assertAlmostEqual(o.j, 5)
idx = int(np.where(np.isclose(self.distances, dist))[0]) energy -= self.j[idx] * s1 * getattr(site.specie, "spin", 0) return energy #atoms = read_vasp('POSCAR2') #write_vasp('POSCAR', sort(atoms), vasp5=True, direct=True, label=atoms.get_chemical_formula()) if __name__ == '__main__': """ J = [0.00240319, 0.00224361, 0.00146472, 0.00125072, 0.00122649] model_uuu = MultiIsingModel(J, 5.0, Structure.from_file('2FEPOSCAR'), [3, 3]) model_uuu.recommended_j() model_uud = MultiIsingModel(J, 5.0, Structure.from_file('2FEPOSCAR'), [3, -3]) uuu = model_uuu.get_energy() uud = model_uud.get_energy() print(uuu - uud) """ J = -0.03489 uu = Structure.from_file('2FEPOSCAR') ud = uu.copy() uu.add_spin_by_site([3.291, 3.291]) ud.add_spin_by_site([3.285, -3.285]) model = IsingModel(J, 5.0) print(model.get_energy(uu) - model.get_energy(ud)) uuu = Structure.from_file('POSCAR3') uud = uu.copy() uuu.add_spin_by_site([3, 3, 3]) uud.add_spin_by_site([3, 3, -3]) model = IsingModel(J, 5.0) print(model.get_energy(uuu) - model.get_energy(uud))