Exemplo n.º 1
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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]
        ]
Exemplo n.º 6
0
    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
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
 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]]
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
 def test_script(self):
     for D in self.valid_args:
         dmi = mm.DMI(D)
         with pytest.raises(NotImplementedError):
             script = dmi._script
Exemplo n.º 16
0
 def test_name(self):
     for D in self.valid_args:
         dmi = mm.DMI(D)
         assert dmi.name == 'dmi'
Exemplo n.º 17
0
 def test_init_invalid_args(self):
     for D in self.invalid_args:
         with pytest.raises(Exception):
             dmi = mm.DMI(D)
Exemplo n.º 18
0
 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)