Magnetic skyrmion
In this example, we demostrate how to get a skyrmion using MicroMagnetic.jl. We use the parameters given in PRL 111 067203 (2013).
Used parameters in the simulation
Parameter | Value |
---|---|
Lattice constant | |
Spin length | |
Magnetic moment | |
Excahnge constant | |
DMI | |
External field |
We define a function to specify the problem.
julia
using MicroMagnetic
using CairoMakie
function m0_fun(i, j, k, dx, dy, dz)
r2 = (i - 25)^2 + (j - 25)^2
if r2 < 10^2
return (0.01, 0, -1)
end
return (0, 0, 1)
end
function relax_system()
mesh = CubicMesh(; nx=50, ny=50, nz=1, pbc="xy")
#We create a simulation with 'SD' driver
sim = Sim(mesh; driver="SD", name="skx")
set_mu_s(sim, mu_s_1) # set mu_s of the system
#Initialize the system using the `m0_fun` function
init_m0(sim, m0_fun)
J = 50 * k_B
add_exch(sim, J; name="exch")
add_dmi(sim, 0.5 * J; name="dmi")
Hz = 0.2 * J / mu_s_1
add_zeeman(sim, (0, 0, Hz)) # the unit of Hz is Tesla
#Relax the system
relax(sim; max_steps=2000, stopping_dmdt=0.01)
#Save the magnetization to vtk file
save_vtk(sim, "skx"; fields=["exch", "dmi"])
return sim
end
sim = relax_system();
MicroMagnetic.AtomisticSim{Float64}(6.923882920647e-310, CubicMesh(1.0e-9, 1.0e-9, 1.0e-9, 50, 50, 1, 2500, 6, 12, 8, 6, Int32[50 1 … 2498 2499; 2 3 … 2500 2451; … ; -1 -1 … -1 -1; -1 -1 … -1 -1], Matrix{Int32}(undef, 1, 0), Matrix{Int32}(undef, 1, 0), Matrix{Int32}(undef, 1, 0), true, true, false), MicroMagnetic.EnergyMinimization{Float64}([-0.010634416835891404, 0.010849120630666802, -2.3154274018751706e-6, -0.0064383531000517195, 0.011441014962519808, -5.645509111203e-7, 0.020847132814112525, -0.0030071248881004685, -6.491687224267513e-6, 0.03597962960418549 … -8.471818903772912e-7, 0.00020316548278389844, -0.019566740890704076, -4.046773042858694e-6, 0.00016084588104570556, -0.005920850657549845, -8.185947922012863e-7, 8.876395019810659e-6, 0.0, -1.0183314331064247e-11], [3.3485352301549518e-9, 7.2447157433049276e-9, 5.584024115981328e-9, 3.926424235572374e-8, 8.754902141628629e-9, 3.5570586426927815e-8, 3.3854986952877294e-8, 8.768287562589487e-10, 2.5104469924051986e-9, 3.238124106838153e-9 … 6.595514547772907e-9, 1.2841727709592457e-8, 1.0494508111373236e-8, 1.7053731927063084e-8, 3.717381934998418e-8, 2.219205584587952e-9, 1.217905872354017e-8, 5.275411036229194e-9, 1.4147176278195785e-12, 2.0978929976116408e-13], [1.549411415622246e-7, 1.1637244140609792e-6, 1.5114972957396265e-7, 4.191464132389452e-6, 1.5362457734655606e-6, 4.052970447152078e-6, 3.7170539020019213e-6, 3.238192069609659e-8, 6.846298057604203e-7, 3.7954775137679205e-7 … 8.491526477552885e-7, 1.2223019569369055e-6, 1.426436200284857e-6, 2.7128335916918253e-6, 3.5690521926734095e-6, -5.701971686082089e-8, 1.8723382765908438e-6, 2.0789266399812744e-7, -5.916431801314142e-9, 6.884943036863406e-11], [7.170935877624996e-6, 0.00020021906174608154, 4.504713131205774e-6, 0.0004530731243711296, 0.00028046279583495315, 0.0004754160694151398, 0.0004084943004492176, 4.528094978348162e-6, 0.00018993876362490494, 4.51772407222105e-5 … 0.00010935001504595708, 0.00011634135946029413, 0.00019389730218911507, 0.00043166062191968865, 0.00034270890751536716, 1.8852489448714528e-6, 0.00028789850365213294, 8.231802578745028e-6, 3.129340032407079e-5, 2.2595261376448383e-8], 0.0032498389418834303, 1.0, 1.0e-10, 39), MicroMagnetic.DataSaver("skx_sd.txt", true, 0.0, 39, Any[SaverItem("step", "<unitless>", MicroMagnetic.var"#125#127"()), SaverItem("E_total", "<J>", MicroMagnetic.var"#129#130"()), SaverItem(("m_x", "m_y", "m_z"), ("<unitless>", "<unitless>", "<unitless>"), MicroMagnetic.average_m), SaverItem("E_exch", "<J>", MicroMagnetic.var"#187#188"{Int64}(1)), SaverItem("E_dmi", "J", MicroMagnetic.var"#196#197"{Int64}(2)), SaverItem(("zeeman_Hx", "zeeman_Hy", "zeeman_Hz"), ("<A/m>", "<A/m>", "<A/m>"), MicroMagnetic.var"#51#53"{Int64}(3)), SaverItem("E_zeeman", "<J>", MicroMagnetic.var"#52#54"{Int64}(3))]), [-7.255399404196234e-5, 7.316849683082515e-5, 0.9999999946911444, 7.260742567965706e-5, 4.124773604651123e-5, 0.9999999965133931, 0.0002307189180576484, -7.983763664204612e-5, 0.9999999701973661, 0.0001948234013458542 … 0.9999999999707245, -1.570943365364913e-6, -0.00014323965668140376, 0.9999999897399664, 6.130678475433033e-7, -0.00011898361369803851, 0.999999992921262, 1.1183885165039437e-6, 0.0, 0.9999999999993746], [-0.00010711413610894927, 0.00010842639165221745, 0.9999999883851395, 5.1683815110073594e-5, 7.842919206083982e-5, 0.9999999955888226, 0.00029846874272345026, -8.961030840499084e-5, 0.9999999514432002, 0.00031175140489968423 … 0.9999999987643593, -9.106882702761608e-7, -0.00020682841354767258, 0.9999999786105888, 1.1357910555691842e-6, -0.00013822542475784542, 0.999999990446221, 1.147235370702865e-6, 0.0, 0.999999999999342], [-0.0060902391202936005, 0.00608042912651412, 156.13864441696356, 0.014507657773191825, 0.0008039991615204779, 156.1282705144254, 0.025751003684218295, -0.010983195654718664, 156.12400731830135, 0.012695055746022291 … 156.11531325026587, -0.00034535308532894536, -0.01272579786311246, 156.1320243489784, 1.6500528305994005e-5, -0.01566215322482594, 156.14351576157583, 0.00017025977588535471, 0.0, 156.14596226693192], [-1.5187301681212822e-21, -1.5186610532928518e-21, -1.5186404803691962e-21, -1.5187044067965874e-21, -1.518788346762152e-21, -1.5188101771768584e-21, -1.5187836694096885e-21, -1.5187698934163382e-21, -1.5187570535630104e-21, -1.5187135470765297e-21 … -1.5187460395216152e-21, -1.5188103292270835e-21, -1.5188977096732315e-21, -1.518912935907532e-21, -1.5187724926620686e-21, -1.5186004902401242e-21, -1.5185699735803291e-21, -1.5186681780389276e-21, -1.5187652263680365e-21, -1.5187976724693354e-21], [1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23 … 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23, 1.856952823077189e-23], Bool[0, 0, 0, 0, 0, 0, 0, 0, 0, 0 … 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 2500, "skx", "SD", Any[MicroMagnetic.HeisenbergExchange{Float64}([6.903252500000001e-22, 6.903252500000001e-22, 6.903252500000001e-22, 6.903252500000001e-22, 6.903252500000001e-22, 6.903252500000001e-22], Float64[], Float64[], Float64[], [-0.003271503650471993, 0.0031868803917567087, 148.7006536195868, 0.01180908338943802, -0.0010229568785185225, 148.70065174059192, 0.018609331677090647, -0.0091095825819945, 148.7006517903008, 0.007782223496113966 … 148.70065076791138, -0.0002924208669642626, -0.00724419098269972, 148.70065387595966, -3.426458785207301e-5, -0.010702629391864546, 148.7006536395796, 9.40374892239804e-5, 0.0, 148.70065335747685], [-1.380650489700753e-21, -1.3806504779710064e-21, -1.380650481147124e-21, -1.3806504640638153e-21, -1.3806504406747422e-21, -1.3806504584298883e-21, -1.380650470694243e-21, -1.3806504789745472e-21, -1.3806504860927611e-21, -1.380650486894593e-21 … -1.3806504928539722e-21, -1.3806504751961008e-21, -1.3806504432081806e-21, -1.3806504360635141e-21, -1.380650474761474e-21, -1.3806504749511328e-21, -1.3806504666862114e-21, -1.380650490515067e-21, -1.380650494897312e-21, -1.3806504902280589e-21], "exch"), MicroMagnetic.HeisenbergDMI{Float64}([-3.4516262500000005e-22 3.4516262500000005e-22 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … -3.4516262500000005e-22 3.4516262500000005e-22], [6.28773229077158e-8, -6.529529962197456e-8, 0.0015756085431145787, -3.006277473876975e-7, 4.552801081080808e-7, -0.005867052330126638, -6.778152156228122e-7, 5.013106991360672e-7, -0.008082775470233028, 4.014103999685297e-7 … -0.01567547651369288, 5.264026553447752e-9, 1.3103246214782262e-7, -0.005100943794611274, -2.888399096042858e-9, -1.9069758949200964e-7, 0.005350965040618581, 2.8823575219410145e-9, 0.0, 0.008845915775784969], [-1.4629153496626097e-26, 5.447419677622611e-26, 7.504666322575744e-26, 1.110306220815106e-26, -7.285695303565819e-26, -9.467685725351106e-26, -6.815841064403553e-26, -5.436934763070696e-26, -4.1520404041368064e-26, 1.9871388509563822e-27 … -3.050236346365833e-26, -9.480935602293216e-26, -1.8221864885231323e-25, -1.9745019027966584e-25, -5.697343457751591e-26, 1.150309327792895e-25, 1.4554310184056515e-25, 4.736105958722424e-26, -4.9682448050784886e-26, -8.213224136271328e-26], "dmi"), MicroMagnetic.Zeeman{Float64}((0, 0, 7.435032720497984), [0.0, 0.0, 7.435032720497984, 0.0, 0.0, 7.435032720497984, 0.0, 0.0, 7.435032720497984, 0.0 … 7.435032720497984, 0.0, 0.0, 7.435032720497984, 0.0, 0.0, 7.435032720497984, 0.0, 0.0, 7.435032720497984], [-1.3806504926703264e-22, -1.380650495186215e-22, -1.380650458852979e-22, -1.3806504579498022e-22, -1.3806504913437427e-22, -1.3806504188971661e-22, -1.3806504030480155e-22, -1.3806504509416034e-22, -1.3806504706620798e-22, -1.3806504732078776e-22 … -1.3806504430417945e-22, -1.3806504467495992e-22, -1.3806504781619856e-22, -1.3806504965373829e-22, -1.3806504446601695e-22, -1.3806504622177074e-22, -1.3806504999595812e-22, -1.38065048583448e-22, -1.3806504902267372e-22, -1.380650499999137e-22], "zeeman")], true)
After obtain the skyrmion, we use the following script to plot the skyrmion
julia
plot_m(sim)