本文整理汇总了Python中fidimag.micro.Sim类的典型用法代码示例。如果您正苦于以下问题:Python Sim类的具体用法?Python Sim怎么用?Python Sim使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Sim类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_sim_init_m
def test_sim_init_m():
mesh = CuboidMesh(nx=3, ny=4, nz=5)
sim = Sim(mesh)
sim.set_m((0, 1, 0))
sim.spin.shape = (-1, 3)
spin_y = sim.spin[:, 1]
assert(spin_y.any() == 1)
示例2: setup_simulation
def setup_simulation(mesh, m0, simulation_name, integrator="sundials", use_jac=False):
sim = Sim(mesh, name=simulation_name, integrator=integrator, use_jac)
sim.set_m(m0)
sim.Ms = Ms
sim.alpha = alpha
sim.gamma = gamma
sim.add(UniformExchange(A))
sim.add(Demag())
return sim
示例3: compute_field
def compute_field():
mesh = CuboidMesh(nx=1, ny=1, nz=1, dx=2.0, dy=2.0, dz=2.0, unit_length=1e-9, periodicity=(True, True, False))
sim = Sim(mesh, name='relax')
sim.driver.set_tols(rtol=1e-10, atol=1e-14)
sim.driver.alpha = 0.5
sim.driver.gamma = 2.211e5
sim.Ms = 8.6e5
sim.do_precession = False
sim.set_m((0,0,1))
# sim.set_m(np.load('m0.npy'))
A = 1.3e-11
exch = UniformExchange(A=A)
sim.add(exch)
demag = Demag(pbc_2d=True)
sim.add(demag)
field=demag.compute_field()
print(field)
np.save('m0.npy', sim.spin)
示例4: test_sim_init_m_fun
def test_sim_init_m_fun():
mesh = CuboidMesh(nx=3, ny=4, nz=5)
sim = Sim(mesh)
sim.set_m(init_m, normalise=False)
print sim.spin.reshape(-1, 3).shape
print sim.mesh.index(1, 2, 3)
assert(sim.spin_at(1, 2, 3)[0] == 1)
assert(sim.spin_at(1, 2, 3)[1] == 2)
assert(sim.spin_at(1, 2, 3)[2] == 3)
示例5: setup_domain_wall_cobalt
def setup_domain_wall_cobalt(node_count=NODE_COUNT, A=A_Co, Ms=Ms_Co, K1=K1_Co, length=LENGTH, do_precession=True, unit_length=UNIT_LENGTH):
a = length / node_count # cell size
mesh = CuboidMesh(dx=a, dy=a, dz=a, nx=node_count, ny=1, nz=1, unit_length=unit_length)
sim = Sim(mesh, "dw_cobalt")
sim.Ms = Ms
sim.set_m(lambda r: initial_m(r, length))
sim.do_precession = do_precession
sim.add(UniformExchange(A))
sim.add(UniaxialAnisotropy(K1, (0, 0, 1)))
sim.pins = lambda r: 1 if (r[0] < a or r[0] > LENGTH - a) else 0
return sim
示例6: test_init
def test_init():
"""
This tests (mx, my, mx) for the first 2 spins
"""
mesh = CuboidMesh(nx=100, ny=1, nz=1)
sim = Sim(mesh)
sim.set_m(init_m)
expected = np.array([0, 0, 1,
0, np.sin(0.1), np.cos(0.1)])
assert max(abs(sim.spin[:6] - expected)) < 1e-15
示例7: run
def run(integrator, jacobian):
name = "sim_" + integrator
if integrator == "sundials":
name += "_J1" if jacobian else "_J0"
sim = Sim(mesh, name, integrator, use_jac=jacobian)
sim.Ms = 0.86e6
sim.driver.alpha = 0.5
sim.set_m((1, 0, 1))
sim.add(UniformExchange(A=13e-12))
sim.add(Demag())
ts = np.linspace(0, 3e-10, 61)
for t in ts:
sim.run_until(t)
示例8: test_zeeman
def test_zeeman():
mesh = CuboidMesh(nx=5, ny=2, nz=1)
sim = Sim(mesh)
sim.set_m((1, 0, 0))
zeeman = Zeeman(varying_field)
sim.add(zeeman)
field = zeeman.compute_field()
assert field[6] == 1.2 * (2 + 0.5)
assert field[7] == 2.3 * 0.5
示例9: elongated_part_sim
def elongated_part_sim():
sim = Sim(mesh)
sim.Ms = lambda r: cylinder(r, centre, 8)
sim.add(UniformExchange(A=A))
sim.add(UniaxialAnisotropy(Kx, axis=(0, 1, 0))) # Anisotropy along y
sim.add(Demag())
return sim
示例10: test_sim_pin
def test_sim_pin():
mesh = CuboidMesh(nx=3, ny=2, nz=1)
sim = Sim(mesh)
sim.set_m((0, 0.8, 0.6))
sim.alpha = 0.1
sim.gamma = 1.0
sim.pins = pin_fun
anis = UniaxialAnisotropy(Ku=1, axis=[0, 0, 1], name='Dx')
sim.add(anis)
sim.run_until(1.0)
print sim.spin
assert sim.spin[0] == 0
assert sim.spin[2] != 0
示例11: relax_neb
def relax_neb(k, maxst, simname, init_im, interp, save_every=10000):
"""
Execute a simulation with the NEB function of the FIDIMAG code, for an
elongated particle (long cylinder)
The simulations are made for a specific spring constant 'k' (a float),
number of images 'init_im', interpolations between images 'interp'
(an array) and a maximum of 'maxst' steps.
'simname' is the name of the simulation, to distinguish the
output files.
--> vtks and npys are saved in files starting with the 'simname' string
"""
# Prepare simulation
# We define the cylinder with the Magnetisation function
sim = Sim(mesh)
sim.Ms = two_part
#sim.add(UniformExchange(A=A))
# Uniaxial anisotropy along x-axis
sim.add(UniaxialAnisotropy(Kx, axis=(1, 0, 0)))
# Define many initial states close to one extreme. We want to check
# if the images in the last step, are placed mostly in equally positions
init_images = init_im
# Number of images between each state specified before (here we need only
# two, one for the states between the initial and intermediate state
# and another one for the images between the intermediate and final
# states). Thus, the number of interpolations must always be
# equal to 'the number of initial states specified', minus one.
interpolations = interp
neb = NEB_Sundials(sim,
init_images,
interpolations=interpolations,
spring=k,
name=simname)
neb.relax(max_steps=maxst,
save_vtk_steps=save_every,
save_npy_steps=save_every,
stopping_dmdt=1e-2)
示例12: test_with_oommf_spatial_Ms
def test_with_oommf_spatial_Ms(A=1e-11):
def spatial_Ms(pos):
x, y = pos[0], pos[1]
if x ** 2 + y ** 2 < 5 ** 2:
return 2e4
else:
return 0
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'] ')
init_Ms = """
if { ($x * $x + $y * $y) < 5e-9 * 5e-9 } {
return 2e4
} else {
return 0
}
"""
mesh = CuboidMesh(nx=12, ny=10, nz=2, dx=0.5, unit_length=1e-9)
sim = Sim(mesh)
sim.Ms = spatial_Ms
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)
exch = UniformExchange(A=A)
sim.add(exch)
demag = Demag()
sim.add(demag)
field = exch.compute_field()
field_oommf = compute_exch_field(
mesh, init_m0=init_m0, A=A, spatial_Ms=init_Ms)
mx0, mx1, mx2 = compare_fields(field_oommf, field)
assert max([mx0, mx1, mx2]) < 1e-12
field = demag.compute_field()
field_oommf = compute_demag_field(
mesh, spatial_Ms=init_Ms, init_m0=init_m0)
mx0, mx1, mx2 = compare_fields(field_oommf, field)
assert max([mx0, mx1, mx2]) < 1e-11
示例13: test_sim_single_spin
def test_sim_single_spin(do_plot=False):
mesh = CuboidMesh(nx=80, ny=3, nz=3)
sim = Sim(mesh, name='spin', integrator='sundials_openmp')
alpha = 0.1
gamma = 2.21e5
sim.alpha = alpha
sim.driver.gamma = gamma
sim.mu_s = 1.0
sim.set_m((1, 0, 0))
H0 = 1e5
sim.add(Zeeman((0, 0, H0)))
ts = np.linspace(0, 1e-9, 101)
mx = []
my = []
mz = []
real_ts = []
for t in ts:
sim.driver.run_until(t)
real_ts.append(sim.driver.t)
print(sim.driver.t, abs(sim.spin_length()[0] - 1))
mx.append(sim.spin[0])
my.append(sim.spin[1])
mz.append(sim.spin[2])
mz = np.array(mz)
# print mz
a_mx, a_my, a_mz = single_spin(alpha, gamma, H0, ts)
print(sim.driver.stat())
if do_plot:
ts_ns = np.array(real_ts) * 1e9
plt.plot(ts_ns, mx, ".", label="mx", color='DarkGreen')
plt.plot(ts_ns, my, ".", label="my", color='darkslateblue')
plt.plot(ts_ns, mz, ".", label="mz", color='m')
plt.plot(ts_ns, a_mx, "--", label="analytical", color='b')
plt.plot(ts_ns, a_my, "--", color='b')
plt.plot(ts_ns, a_mz, "--", color='b')
plt.xlabel("time (ns)")
plt.ylabel("m")
plt.title("integrating a macrospin")
plt.legend()
plt.savefig("single_spin.pdf")
print(("Max Deviation = {0}".format(
np.max(np.abs(mz - a_mz)))))
assert np.max(np.abs(mz - a_mz)) < 5e-7
示例14: create_simulation
def create_simulation(mesh):
sim = Sim(mesh)
sim.Ms = 8.6e5
sim.set_m((1, 0, 0))
sim.add(UniformExchange(A=1.3e-11))
# sim.add(Demag())
#sim.add(UniaxialAnisotropy(Kx, (1, 0, 0), name='Kx'))
anis = UniaxialAnisotropy(1e5, axis=(1, 0, 0))
sim.add(anis)
return sim
示例15: test_exch_field_oommf
def test_exch_field_oommf(A=1e-11, Ms=2.6e5):
mesh = CuboidMesh(nx=10, ny=3, nz=2, dx=0.5, unit_length=1e-9)
sim = Sim(mesh)
sim.Ms = Ms
exch = UniformExchange(A=A)
sim.add(exch)
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 = exch.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]
"""
omf_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),
'omfs',
'test_exch_field_oommf.ohf'
)
ovf = OMF2(omf_file)
field_oommf = ovf.get_all_mags()
#field_oommf = compute_exch_field(mesh, Ms=Ms, init_m0=init_m0, A=A)
mx0, mx1, mx2 = compare_fields(field_oommf, field)
assert max([mx0, mx1, mx2]) < 1e-12