コード例 #1
0
    def test_1(self):
        mesh = RectangularMesh((10,10,10), (1e-9,1e-9,1e-9))

        M = VectorField(mesh); M.fill((-8e5,0,0))
        Ms = Field(mesh); Ms.fill(8e5)

        sam = magneto.scaled_abs_max(M, Ms)
        self.assertEqual(1.0, sam)
コード例 #2
0
    def test_1(self):
        mesh = RectangularMesh((10, 10, 10), (1e-9, 1e-9, 1e-9))

        M = VectorField(mesh); M.fill((-8e5, 0, 0))
        Ms = Field(mesh); Ms.fill(8e5)

        sam = magneto.scaled_abs_max(M, Ms)
        self.assertEqual(1.0, sam)
コード例 #3
0
    def test_nonuniform_user_fn_field(self):
        H_ext = VectorField(self.solver.world.mesh)
        H_ext.fill((1.0, 2.0, 3.0))  # this counts as non-uniform because H_ext is not a Python 3-vector.

        self.solver.state.H_ext_amp   = (0.0, 0.0, 0.0)
        self.solver.state.H_ext_phase = (0.0, 0.0, 0.0)
        self.solver.state.H_ext_freq  = (0.0, 0.0, 0.0)
        self.solver.state.H_ext_offs  = (0.0, 0.0, 0.0)
        self.solver.state.H_ext_fn    = lambda t: H_ext
        self.assertEqual((1.0, 2.0, 3.0), self.solver.state.H_ext.average())
コード例 #4
0
    def test_nonuniform_user_fn_field(self):
        H_ext = VectorField(self.solver.world.mesh)
        H_ext.fill(
            (1.0, 2.0, 3.0)
        )  # this counts as non-uniform because H_ext is not a Python 3-vector.

        self.solver.state.H_ext_amp = (0.0, 0.0, 0.0)
        self.solver.state.H_ext_phase = (0.0, 0.0, 0.0)
        self.solver.state.H_ext_freq = (0.0, 0.0, 0.0)
        self.solver.state.H_ext_offs = (0.0, 0.0, 0.0)
        self.solver.state.H_ext_fn = lambda t: H_ext
        self.assertEqual((1.0, 2.0, 3.0), self.solver.state.H_ext.average())
コード例 #5
0
    def test_2(self):
        mesh = RectangularMesh((10, 10, 10), (1e-9, 1e-9, 1e-9))

        M = VectorField(mesh)
        M.fill((-8e5, 0, 0))
        Ms = Field(mesh)
        Ms.fill(8e5)
        Ms.set(0, 0)
        Ms.set(0, 8e5)
        self.assertFalse(Ms.isUniform())

        sam = magneto.scaled_abs_max(M, Ms)
        self.assertEqual(1.0, sam)
コード例 #6
0
    def test_interpolate(self):
        mesh0 = RectangularMesh((100, 100, 1), (1e-9, 1e-9, 6e-9))
        mesh1 = RectangularMesh((50, 50, 1), (2e-9, 2e-9, 6e-9))

        M = VectorField(mesh0)
        M.fill((10, 20, 30))

        M2 = M.interpolate(mesh1)
        M2_avg = M2.average()

        self.assertEqual(10, M2_avg[0])
        self.assertEqual(20, M2_avg[1])
        self.assertEqual(30, M2_avg[2])
コード例 #7
0
    def test_interpolate(self):
        mesh0 = RectangularMesh((100, 100, 1), (1e-9, 1e-9, 6e-9))
        mesh1 = RectangularMesh((50, 50, 1), (2e-9, 2e-9, 6e-9))

        M = VectorField(mesh0)
        M.fill((10, 20, 30))

        M2 = M.interpolate(mesh1)
        M2_avg = M2.average()

        self.assertEqual(10, M2_avg[0])
        self.assertEqual(20, M2_avg[1])
        self.assertEqual(30, M2_avg[2])
コード例 #8
0
    def test_2(self):
        mesh = RectangularMesh((10, 10, 10), (1e-9, 1e-9, 1e-9))

        M = VectorField(mesh)
        M.fill((-8e5, 0, 0))
        Ms = Field(mesh)
        Ms.fill(8e5)
        Ms.set(0, 0)
        Ms.set(0, 8e5)
        self.assertFalse(Ms.isUniform())

        sam = magneto.scaled_abs_max(M, Ms)
        self.assertEqual(1.0, sam)
コード例 #9
0
    def test_llge(self):
        mesh = RectangularMesh((10, 10, 10), (1e-9, 1e-9, 1e-9))
        f1, f2 = Field(mesh), Field(mesh)
        M, H, dM = VectorField(mesh), VectorField(mesh), VectorField(mesh)

        # dM = f1*MxH + f2*Mx(MxH)
        f1.fill(10)
        f2.fill(20)
        M.fill((5, 10, 15))
        H.fill((20, 25, 30))
        magneto.llge(f1, f2, M, H, dM)

        for idx in range(dM.size()):
            self.assertEqual(dM.get(idx), (-60750.0, -13500.0, 29250.0))
コード例 #10
0
ファイル: llge_test.py プロジェクト: micromagnetics/magnum.fd
    def test_llge(self):
        mesh = RectangularMesh((10, 10, 10), (1e-9, 1e-9, 1e-9))
        f1, f2 = Field(mesh), Field(mesh)
        M, H, dM = VectorField(mesh), VectorField(mesh), VectorField(mesh)

        # dM = f1*MxH + f2*Mx(MxH)
        f1.fill(10)
        f2.fill(20)
        M.fill((5, 10, 15))
        H.fill((20, 25, 30))
        magneto.llge(f1, f2, M, H, dM)

        for idx in range(dM.size()):
            self.assertEqual(dM.get(idx), (-60750.0, -13500.0, 29250.0))
コード例 #11
0
 def calc(axis1_vec, axis2_vec, M_vec):
     axis1 = VectorField(mesh); axis1.fill(axis1_vec)
     axis2 = VectorField(mesh); axis2.fill(axis2_vec)
     M = VectorField(mesh); M.fill(M_vec)
     H = VectorField(mesh); H.fill((0,0,0))
     E = magneto.cubic_anisotropy(axis1, axis2, k, Ms, M, H) * mesh.cell_volume
     return H.average(), E
コード例 #12
0
    def doTest(self, M_file, H_file, epsilon):
        # load ref
        M     = readOMF(M_file)
        H_ref = readOMF(H_file)
        H     = VectorField(M.mesh)

        axis = VectorField(M.mesh); axis.fill((1.0/math.sqrt(3.0), 1.0/math.sqrt(3.0), 1.0/math.sqrt(3.0)))
        k = Field(M.mesh); k.fill(520e3)
        Ms = Field(M.mesh); Ms.fill(8e5)

        # calculate
        magneto.uniaxial_anisotropy(axis, k, Ms, M, H)

        # compare
        self.assertVectorFieldEqual(H_ref, H, epsilon)
コード例 #13
0
    def doTest(self, M_file, H_file, epsilon):
        # load ref
        M = readOMF(M_file)
        H_ref = readOMF(H_file)
        H = VectorField(H_ref.mesh)

        # setup
        stray = StrayFieldCalculator(M.mesh)
        H.fill((1.0, 2.0, 3.0))

        # calculate
        for t in range(1):
            stray.calculate(M, H)

        # compare
        self.assertVectorFieldEqual(H_ref, H, epsilon)
コード例 #14
0
    def pbc_exchange(self, nx, ny, nz):
        dx, dy, dz = 1e-9, 1e-9, 1e-9

        mesh = RectangularMesh((nx, ny, nz), (dx, dy, dz))
        A  = Field(mesh); A.fill(Material.Py().A)
        Ms = Field(mesh); Ms.fill(Material.Py().Ms)
        M  = VectorField(mesh)
        H  = VectorField(mesh)

        for bcx, bcy, bcz in itertools.product([False, True], [False, True], [False, True]):
            M.fill(tuple((random.random()-0.5) * 2e5 for i in range(3)))
            #M.fill((8e5, 8e5, -8e5))
            magneto.exchange(nx, ny, nz, dx, dy, dz, bcx, bcy, bcz, Ms, A, M, H)
            for i in range(nx*ny*nz):
                #self.assertEqual(H.get(i), (0.0, 0.0, 0.0))
                self.assertAlmostEqual(H.get(i)[0], 0.0)
                self.assertAlmostEqual(H.get(i)[1], 0.0)
                self.assertAlmostEqual(H.get(i)[2], 0.0)
コード例 #15
0
ファイル: anisotropy_test.py プロジェクト: cmuhai/MicroMagnum
    def doTest(self, M_file, H_file, epsilon):
        # load ref
        M = readOMF(M_file)
        H_ref = readOMF(H_file)
        H = VectorField(M.mesh)

        axis = VectorField(M.mesh)
        axis.fill(
            (1.0 / math.sqrt(3.0), 1.0 / math.sqrt(3.0), 1.0 / math.sqrt(3.0)))
        k = Field(M.mesh)
        k.fill(520e3)
        Ms = Field(M.mesh)
        Ms.fill(8e5)

        # calculate
        magneto.uniaxial_anisotropy(axis, k, Ms, M, H)

        # compare
        self.assertVectorFieldEqual(H_ref, H, epsilon)
コード例 #16
0
ファイル: anisotropy_test.py プロジェクト: cmuhai/MicroMagnum
 def calc(axis1_vec, axis2_vec, M_vec):
     axis1 = VectorField(mesh)
     axis1.fill(axis1_vec)
     axis2 = VectorField(mesh)
     axis2.fill(axis2_vec)
     M = VectorField(mesh)
     M.fill(M_vec)
     H = VectorField(mesh)
     H.fill((0, 0, 0))
     E = magneto.cubic_anisotropy(axis1, axis2, k, Ms, M,
                                  H) * mesh.cell_volume
     return H.average(), E
コード例 #17
0
ファイル: anisotropy_test.py プロジェクト: cmuhai/MicroMagnum
 def calc(axis_vec, M_vec):
     axis = VectorField(mesh)
     axis.fill(axis_vec)
     M = VectorField(mesh)
     M.fill(M_vec)
     H = VectorField(mesh)
     H.fill((0, 0, 0))
     E = magneto.uniaxial_anisotropy(axis, k, Ms, M,
                                     H) * mesh.cell_volume
     return H.average(), E
コード例 #18
0
 def calc(axis_vec, M_vec):
     axis = VectorField(mesh); axis.fill(axis_vec)
     M = VectorField(mesh); M.fill(M_vec)
     H = VectorField(mesh); H.fill((0, 0, 0))
     E = magneto.uniaxial_anisotropy(axis, k, Ms, M, H) * mesh.cell_volume
     return H.average(), E
コード例 #19
0
    def test_findExtremum(self):
        mesh = RectangularMesh((100, 100, 1), (1e-9, 1e-9, 6e-9))

        M = VectorField(mesh)
        M.fill((100, 100, 100))
        M.findExtremum(z_slice=0, component=0)
コード例 #20
0
    def test_findExtremum(self):
        mesh = RectangularMesh((100, 100, 1), (1e-9, 1e-9, 6e-9))

        M = VectorField(mesh)
        M.fill((100, 100, 100))
        M.findExtremum(z_slice=0, component=0)