def relax_system(mesh, Dx=0.005, Dp=0.01): mat = UnitMaterial() sim = Sim(mesh, name='test_energy') sim.set_tols(rtol=1e-10, atol=1e-12) sim.alpha = mat.alpha sim.gamma = mat.gamma sim.pins = pin_fun exch = UniformExchange(mat.J) sim.add(exch) anis = Anisotropy(Dx, axis=[1, 0, 0], name='Dx') sim.add(anis) anis2 = Anisotropy([0, 0, -Dp], name='Dp') sim.add(anis2) sim.set_m((1, 1, 1)) T = 100 ts = np.linspace(0, T, 201) for t in ts: # sim.save_vtk() sim.run_until(t) # sim.save_vtk() np.save('m0.npy', sim.spin)
def test_skx_num(): mesh = CuboidMesh(nx=120, ny=120, nz=1, periodicity=(True, True, False)) sim = Sim(mesh, name='skx_num') sim.set_tols(rtol=1e-6, atol=1e-6) sim.alpha = 1.0 sim.gamma = 1.0 sim.mu_s = 1.0 sim.set_m(init_m) sim.do_procession = False J = 1.0 exch = UniformExchange(J) sim.add(exch) D = 0.09 dmi = DMI(D) sim.add(dmi) zeeman = Zeeman([0, 0, 5e-3]) sim.add(zeeman) sim.relax(dt=2.0, stopping_dmdt=1e-2, max_steps=1000, save_m_steps=None, save_vtk_steps=None) skn = sim.skyrmion_number() print 'skx_number', skn assert skn > -1 and skn < -0.99
def relax_system(mesh, Dx=0.005, Dp=0.01): mat = UnitMaterial() sim = Sim(mesh, name='test_energy') print('Created sim') sim.set_tols(rtol=1e-10, atol=1e-12) sim.alpha = mat.alpha sim.gamma = mat.gamma sim.pins = pin_fun exch = UniformExchange(mat.J) sim.add(exch) print('Added UniformExchange') anis = Anisotropy(Dx, axis=[1, 0, 0], name='Dx') sim.add(anis) print('Added Anisotropy') anis2 = Anisotropy([0, 0, -Dp], name='Dp') sim.add(anis2) print('Added Anisotropy 2') sim.set_m((1, 1, 1)) T = 100 ts = np.linspace(0, T, 201) for t in ts: # sim.save_vtk() sim.run_until(t) print('Running -', t) # sim.save_vtk() np.save('m0.npy', sim.spin)
def test_skx_num_atomistic(): """ Test the *finite spin chirality* or skyrmion number for a discrete spins simulation in a two dimensional lattice The expression is (PRL 108, 017601 (2012)) : Q = S_i \dot ( S_{i+1} X S_{j+1} ) + S_i \dot ( S_{i-1} X S_{j-1} ) which measures the chirality taking two triangles of spins per lattice site i: S_{i} , S_{i + x} , S_{i + y} and S_{i} , S_{i - x} , S_{i - y} The area of the two triangles cover a unit cell, thus the sum cover the whole area of the atomic lattice This test generate a skyrmion pointing down with unrealistic paremeters. """ mesh = CuboidMesh(nx=120, ny=120, nz=1, periodicity=(True, True, False)) sim = Sim(mesh, name='skx_num') sim.set_tols(rtol=1e-6, atol=1e-6) sim.alpha = 1.0 sim.gamma = 1.0 sim.mu_s = 1.0 sim.set_m(lambda pos: init_m(pos, 60, 60, 20)) sim.do_precession = False J = 1.0 exch = UniformExchange(J) sim.add(exch) D = 0.09 dmi = DMI(D) sim.add(dmi) zeeman = Zeeman([0, 0, 5e-3]) sim.add(zeeman) sim.relax(dt=2.0, stopping_dmdt=1e-2, max_steps=1000, save_m_steps=None, save_vtk_steps=None) skn = sim.skyrmion_number() print('skx_number', skn) assert skn > -1 and skn < -0.99
from fidimag.atomistic import Sim from fidimag.common.cuboid_mesh import CuboidMesh from fidimag.atomistic import UniformExchange, Zeeman import fidimag.common.constant as const mesh = CuboidMesh(nx=1, ny=1, dx=1, dy=1) sim = Sim(mesh, name='relax_sk') sim.gamma = const.gamma sim.set_m((1, 0, 0)) sim.add(Zeeman((0, 0, 25.))) sim.run_until(1e-11) sim.set_tols(rtol=1e-10, atol=1e-12) sim.run_until(2e-11)
tenergy.set_text('Energy: {:.6e} J'.format(sim.compute_energy())) # fig.show() fig.canvas.draw() sim.save_vtk() else: # print(np.min(sim.mesh.coordinates[:, 1]), np.max(sim.mesh.coordinates[:, 1])) if args.save_initial_vtk: sim.save_vtk() # Fidimag automatically saves the last state (?) sim.driver.do_precession = False if args.tols: sim.set_tols(rtol=args.tols[0], atol=args.tols[1]) if args.driver == 'llg': sim.driver.relax(dt=1e-13, stopping_dmdt=args.stopping_dmdt, max_steps=args.max_steps, save_m_steps=args.save_files, save_vtk_steps=args.save_files) # Set OpenMP for the integrator sim.driver.set_integrator('sundials_openmp', use_jac=False) elif args.driver == 'minimiser': sim.driver.minimise(max_steps=args.max_steps, stopping_dm=args.stopping_dmdt, save_data_steps=1000)
from fidimag.atomistic import Sim from fidimag.common.cuboid_mesh import CuboidMesh from fidimag.atomistic import UniformExchange, Zeeman from fidimag.atomistic import Constant # Import physical constants from fidimag const = Constant() mesh = CuboidMesh(nx=1, ny=1, dx=1, dy=1) sim = Sim(mesh, name='relax_sk') sim.gamma = const.gamma sim.set_m((1, 0, 0)) sim.add(Zeeman((0, 0, 25.))) sim.run_until(1e-11) sim.set_tols(rtol=1e-10, atol=1e-12) sim.run_until(2e-11)