def test_repr_latex_(self): for D in self.valid_args: dmi = mm.DMI(D, crystalclass='T') latex = dmi._repr_latex_() # Assert some characteristics of LaTeX string. assert isinstance(latex, str) assert latex[0] == '$' assert latex[-1] == '$' assert 'D' in latex assert latex.count(r'\mathbf{m}') == 2 dmi = mm.DMI(D, crystalclass='cnv') latex = dmi._repr_latex_() # Assert some characteristics of LaTeX string. assert isinstance(latex, str) assert latex[0] == latex[-1] == '$' assert r'\nabla' in latex assert 'D' in latex assert latex.count(r'\frac') == 0 dmi = mm.DMI(D, crystalclass='d2d') latex = dmi._repr_latex_() # Assert some characteristics of LaTeX string. assert isinstance(latex, str) assert latex[0] == latex[-1] == '$' assert r'\partial' in latex assert r'\hat' in latex assert 'D' in latex assert latex.count(r'\frac') == 2
def test_init_invalid_args(self): for crystalclass in self.crystalclasses: for D in self.invalid_args: with pytest.raises((TypeError, ValueError)): term = mm.DMI(D=D, crystalclass=crystalclass) with pytest.raises(AttributeError): term = mm.DMI(wrong=1)
def test_repr(self): for D in self.valid_args: dmi = mm.DMI(D, crystalclass='t') assert repr(dmi) == ('DMI(D={}, crystalclass=\'t\', ' 'name=\'{}\')').format(D, 'dmi') dmi = mm.DMI(D, crystalclass='d2d', name='test_name') assert repr(dmi) == ('DMI(D={}, crystalclass=\'d2d\', ' 'name=\'test_name\')').format(D)
def test_repr(self): for D in self.valid_args: dmi = mm.DMI(D, kind="bulk") assert repr(dmi) == ('DMI(D={}, kind=\"bulk\", ' 'name=\"{}\")').format(D, "dmi") dmi = mm.DMI(D, kind="interfacial", name="test_name") assert repr(dmi) == ("DMI(D={}, kind=\"interfacial\", " "name=\"test_name\")").format(D)
def setup(self): A = 1e-12 self.exchange = mm.Exchange(A=A) H = (0, 0, 1.2e6) self.zeeman = mm.Zeeman(H=H) K1 = 1e4 K2 = 3e2 u = (0, 1, 0) self.uniaxialanisotropy = mm.UniaxialAnisotropy(K1=K1, K2=K2, u=u) self.demag = mm.Demag() D = 1e-3 crystalclass = 't' self.dmi = mm.DMI(D=D, crystalclass=crystalclass) K1 = 5e6 u1 = (0, 0, 1) u2 = (0, 1, 0) self.cubicanisotropy = mm.CubicAnisotropy(K1=K1, u1=u1, u2=u2) self.terms = [ self.exchange, self.zeeman, self.uniaxialanisotropy, self.demag, self.dmi, self.cubicanisotropy ] self.invalid_terms = [ 1, 2.5, 0, 'abc', [3, 7e-12], [self.exchange, self.zeeman] ]
def test_exchange_dmi_zeeman(self): name = 'exchange_dmi_zeeman' mesh = df.Mesh(region=self.region, cell=self.cell, subregions=self.subregions) # Very weak DMI and strong Zeeman to make the final # magnetisation uniform. A = {'r1': 1e-12, 'r2': 3e-12, 'r1:r2': 2e-12} D = {'r1': 1e-9, 'r2': 0, 'r1:r2': 5e-9} H = df.Field(mesh, dim=3, value=(1e10, 0, 0)) Ms = 1e6 system = mm.System(name=name) system.energy = mm.Exchange(A=A) + \ mm.DMI(D=D, crystalclass='Cnv') + \ mm.Zeeman(H=H) system.m = df.Field(mesh, dim=3, value=(1, 0.3, 0), norm=Ms) md = self.calculator.MinDriver() md.drive(system) value = system.m(mesh.region.random_point()) assert np.linalg.norm(np.subtract(value, (Ms, 0, 0))) < 1 self.calculator.delete(system)
def test_init_valid_args(self): for crystalclass in self.crystalclasses: for D in self.valid_args: term = mm.DMI(D=D, crystalclass=crystalclass) check_term(term) assert hasattr(term, 'D') assert hasattr(term, 'crystalclass') assert term.name == 'dmi' assert re.search(r'^DMI\(D=.+, crystalclass=\'\w+\'\)$', repr(term))
def test_freestyle(self): container = self.dmi + self.zeeman # single term is not allowed check_container(container) assert 'D' in container._repr_latex_() assert len(container) == 2 assert mm.Zeeman(H=(0, 0, 1e6)) in container # same type term present? assert 'dmi' in dir(container) assert len(list(container)) == 2 container -= mm.DMI(D=1e-3, crystalclass='T') check_container(container) assert len(container) == 1 assert mm.DMI(D=1e-2, crystalclass='Cnv') not in container assert self.exchange not in container assert self.zeeman in container assert container.zeeman == self.zeeman container = self.demag + container check_container(container) assert len(container) == 2
def test_repr_latex_(self): for D in self.valid_args: dmi = mm.DMI(D, kind="bulk") latex = dmi._repr_latex_() # Assert some characteristics of LaTeX string. assert isinstance(latex, str) assert latex[0] == latex[-1] == '$' assert '\\nabla' in latex assert 'D' in latex assert latex.count('\mathbf{m}') == 2 dmi = mm.DMI(D, kind="interfacial") latex = dmi._repr_latex_() # Assert some characteristics of LaTeX string. assert isinstance(latex, str) assert latex[0] == latex[-1] == '$' assert '\\partial' in latex assert 'D' in latex assert latex.count('\\frac') == 4
def test_skyrmion(calculator): name = 'skyrmion' Ms = 1.1e6 A = 1.6e-11 D = 4e-3 K = 0.51e6 u = (0, 0, 1) H = (0, 0, 2e5) p1 = (-50e-9, -50e-9, 0) p2 = (50e-9, 50e-9, 10e-9) cell = (5e-9, 5e-9, 5e-9) region = df.Region(p1=p1, p2=p2) mesh = df.Mesh(p1=p1, p2=p2, cell=cell) system = mm.System(name=name) system.energy = (mm.Exchange(A=A) + mm.DMI(D=D, crystalclass='Cnv') + mm.UniaxialAnisotropy(K=K, u=u) + mm.Demag() + mm.Zeeman(H=H)) def Ms_fun(pos): x, y, z = pos if (x**2 + y**2)**0.5 < 50e-9: return Ms else: return 0 def m_init(pos): x, y, z = pos if (x**2 + y**2)**0.5 < 10e-9: return (0, 0.1, -1) else: return (0, 0.1, 1) system.m = df.Field(mesh, dim=3, value=m_init, norm=Ms_fun) md = calculator.MinDriver() md.drive(system) # Check the magnetisation at the sample centre. value = system.m((0, 0, 0)) assert value[2] / Ms < -0.97 # Check the magnetisation at the sample edge. value = system.m((50e-9, 0, 0)) assert value[2] / Ms > 0.5 self.calculator.delete(system)
def test_dmi(self): if sys.platform != 'win32': self.system.energy += mm.DMI(D=5e-3, crystalclass='T') term = self.system.energy.dmi for crystalclass in ['T', 'Cnv', 'D2d']: term.crystalclass = crystalclass assert isinstance( self.calculator.compute(term.energy, self.system), float) assert isinstance( self.calculator.compute(term.density, self.system), df.Field) assert isinstance( self.calculator.compute(term.effective_field, self.system), df.Field) self.calculator.delete(self.system)
def setup(self): self.exchange = mm.Exchange(A=1e-12) self.zeeman = mm.Zeeman(H=(0, 0, 1.2e6)) self.uniaxialanisotropy = mm.UniaxialAnisotropy(K=1e4, u=(0, 1, 0)) self.demag = mm.Demag() self.dmi = mm.DMI(D=1e-3, crystalclass='T') self.cubicanisotropy = mm.CubicAnisotropy(K={ 'r1': 1e6, 'r2': 5e6 }, u1=(0, 0, 1), u2=(0, 1, 0)) self.terms = [ self.exchange, self.zeeman, self.uniaxialanisotropy, self.demag, self.dmi, self.cubicanisotropy ] self.invalid_terms = [1, 2.5, 0, 'abc', [3, 7e-12], [self.exchange, 2]]
def test_scalar(self): name = 'dmi_scalar' D = 1e-3 Ms = 1e6 system = mm.System(name=name) system.energy = mm.DMI(D=D, crystalclass='Cnv') mesh = df.Mesh(region=self.region, cell=self.cell) system.m = df.Field(mesh, dim=3, value=self.random_m, norm=Ms) md = self.calculator.MinDriver() md.drive(system) # There are 4N cells in the mesh. Because of that the average should be # 0. assert np.linalg.norm(system.m.average) < 1 self.calculator.delete(system)
def test_dict(self): name = 'dmi_dict' D = {'r1': 0, 'r2': 1e-3, 'default': 2e-3} Ms = 1e6 system = mm.System(name=name) system.energy = mm.DMI(D=D, crystalclass='Cnv') mesh = df.Mesh(region=self.region, cell=self.cell, subregions=self.subregions) system.m = df.Field(mesh, dim=3, value=self.random_m, norm=Ms) md = self.calculator.MinDriver() md.drive(system) assert np.linalg.norm(system.m['r1'].average) > 1 # There are 4N cells in the region with D!=0. Because of that # the average should be 0. assert np.linalg.norm(system.m['r2'].average) < 1 self.calculator.delete(system)
def test_script(self): for D in self.valid_args: dmi = mm.DMI(D) with pytest.raises(NotImplementedError): script = dmi._script
def test_name(self): for D in self.valid_args: dmi = mm.DMI(D) assert dmi.name == 'dmi'
def test_init_invalid_args(self): for D in self.invalid_args: with pytest.raises(Exception): dmi = mm.DMI(D)
def test_init_valid_args(self): for D in self.valid_args: dmi = mm.DMI(D) assert dmi.D == D assert isinstance(dmi.D, numbers.Real)