def relax_system(mesh): sim = Sim(mesh, name='relax') sim.driver.set_tols(rtol=1e-10, atol=1e-10) sim.driver.alpha = 0.1 sim.driver.gamma = 2.211e5 sim.Ms = spatial_Ms print(sim.Ms) sim.set_m(init_m) A = 1.3e-11 exch = UniformExchange(A=A) sim.add(exch) demag = Demag() sim.add(demag) dmi = DMI(D=4e-3) sim.add(dmi) dmi2 = DMI(D=2e-3, dmi_type="interfacial") sim.add(dmi2) anis = UniaxialAnisotropy(-3e4, axis=(0, 0, 1)) sim.add(anis) sim.relax(dt=1e-13, stopping_dmdt=5e4, max_steps=5000, save_m_steps=100, save_vtk_steps=50) #np.save('m0.npy', sim.spin) fd = demag.compute_field(sim.spin) fe = exch.compute_field(sim.spin) fdmi = dmi.compute_field(sim.spin) fdmi2 = dmi2.compute_field(sim.spin) fanis = anis.compute_field(sim.spin) np.savetxt( "test_fields.txt", np.transpose([ np.concatenate((sim.Ms, sim.Ms, sim.Ms, [0.0])), np.concatenate((sim.spin, [100])), np.concatenate((fd, [demag.compute_energy()])), np.concatenate((fe, [exch.compute_energy()])), np.concatenate((fdmi, [dmi.compute_energy()])), np.concatenate((fdmi2, [dmi2.compute_energy()])), np.concatenate((fanis, [anis.compute_energy()])) ]), header= "Generated by Fidimag. Size=20x5x3, 2.5nm x 2.5nm x 3nm, Ms=8.0e5A/m, A=1.3e-11 J/m," + " D=4e-3 J/m^2, D_int=2e-3 J/m^2, Ku=-3e4 J/m^3 axis=(0,0,1).\n Ms " + "".ljust(20) + " m0 " + "".ljust(20) + "demag" + "".ljust(20) + "exch" + "".ljust(22) + "dmi" + "".ljust(22) + "dmi_interfacial" + "".ljust(22) + "anis")
def test_dmi_field_oommf(D=4.1e-3, Ms=2.6e5): mesh = CuboidMesh(nx=10, ny=3, nz=2, dx=0.5, unit_length=1e-9) sim = Sim(mesh) sim.Ms = Ms dmi = DMI(D=D, type='interfacial') sim.add(dmi) def init_m(pos): x, y, z = pos return (np.sin(x) + y + 2.3 * z, np.cos(x) + y + 1.3 * z, 0) sim.set_m(init_m) field = dmi.compute_field() init_m0 = (r'return [list [expr {sin($x * 1e9) + $y * 1e9 + $z * 2.3e9}] ' + r' [expr {cos($x * 1e9) + $y * 1e9 + $z * 1.3e9}] ' + r'0 ' + r'] ') # TODO: check the sign of DMI in OOMMF. field_oommf = compute_dmi_field(mesh, Ms=Ms, init_m0=init_m0, D=-D) mx0, mx1, mx2 = compare_fields(field_oommf, field) assert max([mx0, mx1, mx2]) < 1e-12
def test_dmi_field_oommf(D=4.1e-3, Ms=2.6e5): mesh = CuboidMesh(nx=10, ny=3, nz=2, dx=0.5, unit_length=1e-9) sim = Sim(mesh) sim.Ms = Ms dmi = DMI(D=D, type='interfacial') sim.add(dmi) def init_m(pos): x, y, z = pos return (np.sin(x) + y + 2.3 * z, np.cos(x) + y + 1.3 * z, 0) sim.set_m(init_m) field = dmi.compute_field() init_m0 = ( r'return [list [expr {sin($x * 1e9) + $y * 1e9 + $z * 2.3e9}] ' + r' [expr {cos($x * 1e9) + $y * 1e9 + $z * 1.3e9}] ' + r'0 ' + r'] ') # TODO: check the sign of DMI in OOMMF. field_oommf = compute_dmi_field(mesh, Ms=Ms, init_m0=init_m0, D=-D) mx0, mx1, mx2 = compare_fields(field_oommf, field) assert max([mx0, mx1, mx2]) < 1e-12
def test_dmi_field_oommf(D=4.1e-3, Ms=2.6e5): mesh = CuboidMesh(nx=10, ny=3, nz=2, dx=0.5, unit_length=1e-9) sim = Sim(mesh) sim.Ms = Ms dmi = DMI(D=D, dmi_type='interfacial') sim.add(dmi) def init_m(pos): x, y, z = pos return (np.sin(x) + y + 2.3 * z, np.cos(x) + y + 1.3 * z, 0) sim.set_m(init_m) field = dmi.compute_field() init_m0 = """ return [list [expr {sin($x*1e9)+$y*1e9+$z*2.3e9}] [expr {cos($x*1e9)+$y*1e9+$z*1.3e9}] 0] """ # TODO: check the sign of DMI in OOMMF. #field_oommf = compute_dmi_field(mesh, Ms=Ms, init_m0=init_m0, D=-D) omf_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),'omfs','test_dmi_field_oommf.ohf') ovf = OMF2(omf_file) field_oommf = ovf.get_all_mags() mx0, mx1, mx2 = compare_fields(field_oommf, field) assert max([mx0, mx1, mx2]) < 1e-12
def test_dmi_field_oommf(D=4.1e-3, Ms=2.6e5): mesh = CuboidMesh(nx=10, ny=3, nz=2, dx=0.5, unit_length=1e-9) sim = Sim(mesh) sim.Ms = Ms dmi = DMI(D=D, type='interfacial') sim.add(dmi) def init_m(pos): x, y, z = pos return (np.sin(x) + y + 2.3 * z, np.cos(x) + y + 1.3 * z, 0) sim.set_m(init_m) field = dmi.compute_field() init_m0 = """ return [list [expr {sin($x*1e9)+$y*1e9+$z*2.3e9}] [expr {cos($x*1e9)+$y*1e9+$z*1.3e9}] 0] """ # TODO: check the sign of DMI in OOMMF. #field_oommf = compute_dmi_field(mesh, Ms=Ms, init_m0=init_m0, D=-D) omf_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),'omfs','test_dmi_field_oommf.ohf') ovf = OMF2(omf_file) field_oommf = ovf.get_all_mags() mx0, mx1, mx2 = compare_fields(field_oommf, field) assert max([mx0, mx1, mx2]) < 1e-12