def test_rotated_magnetization_produces_same_rotated_exchange_field(self): def compute(M, Ms, A, rotations=1): for _ in range(rotations): M = right_rotate_vector_field(M) Ms = right_rotate_field(Ms); A = right_rotate_field(A) H = VectorField(M.mesh) nx, ny, nz = M.mesh.num_nodes dx, dy, dz = M.mesh.delta pbc, pbc_rep = M.mesh.periodic_bc bcx, bcy, bcz = "x" in pbc, "y" in pbc, "z" in pbc magneto.exchange(nx, ny, nz, dx, dy, dz, bcx, bcy, bcz, Ms, A, M, H) for _ in range(rotations): H = left_rotate_vector_field(H) return H #mesh = RectangularMesh((32,16,8), (1e-9,1e-9,1e-9), "z", 20) mesh = RectangularMesh((20, 20, 6), (5e-9, 5e-9, 5e-9), "xy", 20) M0 = VectorField(mesh); M0.randomize(); M0.scale(8e5) A = Field(mesh); A.fill(Material.Py().A) Ms = Field(mesh); Ms.fill(Material.Py().Ms) H0 = compute(M0, Ms, A, 0) H1 = compute(M0, Ms, A, 1) H2 = compute(M0, Ms, A, 2) self.assertVectorFieldEqual(H0, H1, 1e0) self.assertVectorFieldEqual(H0, H2, 1e0)
def test_rotated_magnetization_produces_same_rotated_strayfield(self): def compute(M, rotations=1): for _ in range(rotations): M = right_rotate_vector_field(M) H = VectorField(M.mesh) stray = StrayFieldCalculator(M.mesh) stray.calculate(M, H) for _ in range(rotations): H = left_rotate_vector_field(H) return H mesh = RectangularMesh((20, 20, 6), (5e-9, 5e-9, 5e-9), "xy", 20) M0 = VectorField(mesh) M0.randomize() M0.scale(8e5) H0 = compute(M0, 0) H1 = compute(M0, 1) H2 = compute(M0, 2) self.assertVectorFieldEqual(H0, H1, 1e0) self.assertVectorFieldEqual(H0, H2, 1e0)