SKYRMION SIMULATION

1,861 views
Skip to first unread message

Ziki Zhou

unread,
Aug 25, 2020, 4:03:53 PM8/25/20
to mumax2
Hi all,

 I am trying to reproduce the structure based on Skyrmion Logic System for Large-Scale Reversible Computation(https://arxiv.org/abs/1806.10337).

Could someone tell me how to design a curb-like structure in mumax3?

By the way,  could anyone also tell me how to generate multiple skyrmions in a track? I use m = NeelSkyrmion(1,-1).scale(3,3,1)  to generate  the skyrmion.

Thanks!

Ziki

Felipe Garcia

unread,
Aug 26, 2020, 5:33:41 AM8/26/20
to mumax2
Dear Ziki,

To obtain such geometries one can use the object oriented operations like .add() .transl(), .rotz() ...
One can define the different shapes and combine then
There is an example of that in http://mumax.github.io/examples.html the section Geometry. Specially when the shapes a and b are defined. The operations can be repeated and multiple shapes can be defined like a and b until one achieves the desired geometry. For more complex geometries, it is better to generate a png and load it with imageShape.

To achieve more than one skyrmion one can use regions and define a skyrmion as the initial configuration of each region or one can use the
setInShape operation.
m = uniform(0, 0, 1)
m.setInShape(circle(200e-9).transl(100e-9,150e-9,0), NeelSkyrmion(1,-1).scale(2,2,1).transl(100e-9,150e-9,0))
m.setInShape(circle(200e-9).transl(-100e-9,-150e-9,0), NeelSkyrmion(1,-1).scale(2,2,1).transl(-100e-9,-150e-9,0))

In both cases, one has to translate the skyrmion to the position of the region or shape because by default is centered.

Best regards,
Felipe



--
You received this message because you are subscribed to the Google Groups "mumax2" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mumax2+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/mumax2/e6c87508-6f35-4f6a-b698-81803a369fccn%40googlegroups.com.

Ziki Zhou

unread,
Aug 26, 2020, 12:21:31 PM8/26/20
to mumax2
Dear Felipe,

Thank you for your answer. I am able to define the  geometries that I want on the plane (2D) by using imageShape. However, I am not able to figure out how to define geometries as a 3D structure with imageShape. Just like the gray part in the figure, I want to define a ferromagnet with a curb.



Capture.PNG


Regards,
Ziki

Felipe Garcia

unread,
Aug 26, 2020, 1:29:21 PM8/26/20
to mumax2
Dear Ziki,

The shapes are variable with operations, objects, then one can operate with them.

If one takes a rectangle with a hole in the form of a square (square.png) and the same with a circle (circle.png) one can load them and use the operation zrange.

a:=imageshape("circle.png").intersect(zrange(-inf,0))

b:=imageshape("square.png").intersect(zrange(0,inf))

setgeom(a.add(b))

The resulting geometry can be seen in view.png. Doing that, maybe it is tedious but one can achieve the desired result. The only care is zrange to give the desired thickness of all the sections because the effect of the ranges (-inf,0) and (0,inf) can be tricky and be different. One can use the shape layers() to select a defined range of cells which is more accurate.

Best regards,
Felipe

circle.png
square.png
view.png

Ziki Zhou

unread,
Sep 8, 2020, 12:05:32 PM9/8/20
to mumax2
Dear Felipe,

Thanks you for your amazing answer. Could explain
more about the parameter in zrange? According to your example the range of two parts are same (0 to inf) and you mentioned that one can shape layers() to select a defined range of cells? Could you give me example ?  
For example, the ratio of the thickness of the square layer to the thickness of the circle layer is 3:1,

In addition, why is the structure generated by saveas(geom, "imageShape") and saveas(m, "NeelSkyrmion") different in mumax-view?

saveas(geom, "imageShape") :
imageShape.png




saveas(m, "NeelSkyrmion"):NeelSkyrmion.png


Best regards,
Ziki

Felipe Garcia

unread,
Sep 8, 2020, 12:55:53 PM9/8/20
to mumax2
Dear Ziki,

zrange uses continuous values for the positions but the positions of the cell are discretized so in some situations it will select different layers according to the values given to zrange, although one may think that it will behave differently.
If you go to the mumax API http://mumax.github.io/api.html, and you type layers in the search form, you will find layers. This allows you to select a range of layers.
For example layers(0,5) will select layers 0,1,2,3 and 4. This is easier than doing the same with zrange.

Regarding the second question, the first one saves the geometry "geom" and the other saves the magnetization "m". In the geometry there are no magnetic structures, only the points of the geometry, so the skyrmion does not appear.

--
You received this message because you are subscribed to the Google Groups "mumax2" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mumax2+un...@googlegroups.com.

Felipe Garcia

unread,
Sep 9, 2020, 4:38:15 AM9/9/20
to mumax2
Dear Ziki,

Sorry, I did not complete the answer. I realize you are asking for the different representation of geometry. Maybe muview does not work for geom files because they have only 1 component, while the m files have 3 corresponding to the magnetization vector.

Best regards,
Felipe

Ziki Zhou

unread,
Sep 23, 2020, 6:54:02 AM9/23/20
to mumax2
Dear Felipe,

Thank you for your help. I constructed the geometry which I need. But I also found a new problem: the same geometry I constructed by using imageshape and the basic shape (such as rect, circle, circle, etc.), will produce different simulation results.

E.g
Imageshape:
setgridsize(256,72,2)
Setcellsize(1e-9,1e-9,4e-10)
a:=imageshape("layer1.png").intersect(zrange(-4e-10,0))
b:=imageshape("layer2.png").intersect(zrange(0,4e-10))
setgeom(a.add(b))

Msat  = 580e3
Aex   = 15e-12
alpha = 0.1
Dind =3e-3
anisu  = vector(0, 0, 1)
Ku1=6e5
Ku2=1.5e5
Temp = 0

m = Uniform(0,0,1)
m.setInShape(circle(20e-9).transl(-80e-9,-20e-9,0), NeelSkyrmion(1,-1).scale(1,1,1).transl(-80e-9,-20e-9,0))
m.setInShape(circle(20e-9).transl(-80e-9,20e-9,0), NeelSkyrmion(1,-1).scale(1,1,1).transl(-80e-9,20e-9,0))

relax()
saveas(m, "NeelSkyrmion")

B_ext = vector(0, 0, 0)

lambda       = 1
Pol          = 1
epsilonprime = 0
xi = 0.35

angle := 0
px := cos(angle * pi/180)
py := sin(angle * pi/180)
fixedlayer = vector(px, py, 0)

jc   := 0.5e11       // current density in A/m2
J = vector(-jc, 0, 0)

// Output
autosave(m, 100e-12)
//AutoSnapshot(m,100e-12)
tableautosave(100e-12)
run(6e-9)





Basic shape:

setgridsize(256,72,2)
Setcellsize(1e-9,1e-9,4e-10)
//define geometry
a := rect(108e-9, 10e-9).intersect(zrange(-inf,0)).transl(-74e-9, 0, 0)
b := rect(108e-9, 10e-9).intersect(zrange(-inf,0)).transl(74e-9, 0, 0)
c := ( layers(0, 1) )
d := rect(108e-9, 20e-9).intersect(zrange(0,inf)).transl(-74e-9, 0, 0)
e := rect(108e-9, 20e-9).intersect(zrange(0,inf)).transl(74e-9, 0, 0)
g := rect(256e-9, 6e-9).intersect(zrange(0,inf)).transl(0, 33e-9, 0)
h := rect(256e-9, 6e-9).intersect(zrange(0,inf)).transl(0, -33e-9, 0)

geo := c.sub(a)
geo = geo.sub(b)
geo = geo.add(d)
geo = geo.add(e)
geo = geo.add(g)
geo = geo.add(h)

setgeom( geo )
saveas(geom, "Shape")

Msat  = 580e3
Aex   = 15e-12
alpha = 0.1
Dind =3e-3
anisu  = vector(0, 0, 1)
Ku1=6e5
Ku2=1.5e5
Temp = 0

m = Uniform(0,0,1)
m.setInShape(circle(20e-9).transl(-80e-9,-20e-9,0), NeelSkyrmion(1,-1).scale(1,1,1).transl(-80e-9,-20e-9,0))
m.setInShape(circle(20e-9).transl(-80e-9,20e-9,0), NeelSkyrmion(1,-1).scale(1,1,1).transl(-80e-9,20e-9,0))

relax()
saveas(m, "NeelSkyrmion")

B_ext = vector(0, 0, 0)

lambda       = 1
Pol          = 1
epsilonprime = 0
xi = 0.35

DisableZhangLiTorque=False
DisableSlonczewskiTorque=False

angle := 0
px := cos(angle * pi/180)
py := sin(angle * pi/180)
fixedlayer = vector(px, py, 0)

jc   := 0.5e11       // current density in A/m2
J = vector(-jc, 0, 0)

// Output
autosave(m, 100e-12)
//AutoSnapshot(m,100e-12)
tableautosave(100e-12)
run(6e-9)
layer2.png
layer1.png

Felipe Garcia

unread,
Sep 25, 2020, 11:54:37 AM9/25/20
to mumax2
Dear Ziki,

The problem is that there is a small mismatch in the size of the central region between both methods. 200 points are different. That may be the reason for the difference because moreover the difference happens in that region. Moreover, you are using basically the Zhang Li torque. If you want to include the Slonczewski torque, one has to include also a vertical current (0,0,Jz) and if the electrical current flows in the x direction then fixedlayer should be (0,1,0)

Best regards,
Felipe

Ziki Zhou

unread,
Oct 6, 2020, 11:38:38 AM10/6/20
to mumax2
Dear Felipe, 

Thanks for your help, it works now. 

Ziki

Payal Bhattacharjee

unread,
Feb 11, 2021, 4:23:50 AM2/11/21
to mumax2

Hi everyone,

I am currently doing one problem on Neel Skrymion, can anyone please tell me how to insert a Neel skyrmion in a L-shaped nanostrip? I have used the command as below. But there is no skyrmion in the nanostrip! Please help me where I am going wrong.

a:=imageShape("L-shaped nanotrack_skyrmion_x1200_y1200.png")
setgeom(a) 
m = Uniform(0,0,-1)
m.setInShape(circle(100e-9).transl(-300e-9,500e-9,0),NeelSkyrmion(-1,1).transl(-300e-9,500e-9,0))
relax()
saveas(m,"NeelSkyrmion")



With sincere regards,
Payal Bhattacharjee

Apu Kumar Jana

unread,
Feb 11, 2021, 5:03:54 AM2/11/21
to mum...@googlegroups.com
Dear Payal,
you are translating the skermion too far w.r.t your image dimension and that's why it is not visible. If you use
"m.setInShape(circle(100e-9),NeelSkyrmion(-1,1))" 
the skermion will be visible.

Thank you.



Disclaimer:- This footer text is to convey that this email is sent by one of the users of IITH. So, do not mark it as SPAM.

Felipe Garcia

unread,
Feb 11, 2021, 5:52:29 AM2/11/21
to mumax2
Hi Payal,

One can have the mentioned problem. That the skyrmion is out of your track. By default, the skyrmion will be centered in the middle of the grid, which is considered the position 0,0. If you don't assign magnetization values for the geometry outside of the circle then one will have random magnetization. So before the relax(), do you observe a skyrmion? Do you observe the random magnetization? If you don't observe there the skyrmion is a problem of the position it was mentioned in the previous email. If you are not interested in more structures in the track then one can directly do "m.setInShape(a,NeelSkyrmion(-1,1).transl(-300e-9,500e-9,0))"
If you have a skyrmion before relax() but not after, it is because your magnetic parameters are not compatible with a skyrmion or the topological charge of the Neel skyrmion has the opposite sign in that system. Please try when the problem appears and let us know.

Best regards,
Felipe

Payal Bhattacharjee

unread,
Feb 11, 2021, 6:03:37 AM2/11/21
to mum...@googlegroups.com
Thank you all for the suggestion, as I am completely a new user of mumax and I am unable to see the skyrmion in the track,  I am attaching the png image of the nanotrack and the code I have written herewith for your reference. The dimensions of L are as follows: Width = 400 nm , Length = 1200 nm.

L_shape_test.mx3
L-shaped nanotrack_skyrmion_x1200_y1200.png

Felipe Garcia

unread,
Feb 11, 2021, 6:42:50 AM2/11/21
to mumax2
Hi Payal,

The problem of your code is that the real dimensions are 128x128 nm2 and you want to position it out of the system. One can try for example
m.setInShape(a, NeelSkyrmion(-1, 1).transl(-40e-9, -40e-9, 0))
The maximum displacement is 64 nm, which corresponds to half of the skyrmion out. Regarding that your DMI 4e-3 maybe yields large size skyrmions, I think smaller between 2 and 3 should give more usual sizes.

Best regards,
Felipe

Payal Bhattacharjee

unread,
Feb 11, 2021, 7:13:17 AM2/11/21
to mum...@googlegroups.com
Thank you so much. I will check it out and let you know if I have any questions. 

Payal Bhattacharjee

unread,
Feb 11, 2021, 10:44:36 AM2/11/21
to mum...@googlegroups.com
Still the problem persists! I am not able to view the skyrmion but on the other hand the position of the skyrmion are being recorded in tabular form! 

Kacho Imtiyaz Ali Khan

unread,
Feb 11, 2021, 11:31:45 AM2/11/21
to mum...@googlegroups.com
Hi Payal, 
your mumax code is almost correct, all you need to add "m.setInShape(a,NeelSkyrmion(-1,1).transl(-40e-9, -40e-9, 0))" instead of "m.setInShape(a,NeelSkyrmion(-1,1).transl(-300e-9,500e-9,0))", which is already suggested by Felipe. And for the realization of finte size of skyrmion i changed the DMI value from 4e3 to 3e3. I attacted modified the code is working fine and translate the skyrmion for jc:= 3e12. I also add "OutputFormat = OVF1_TEXT", which convert your ovf format to text.
 
Regards,
Kacho Imtiyaz Ali Khan
(Research scholar)
Department of Physics, IIT Delhi 110016.


L_shape_test.mx3
m000000.ovf
m000001.ovf
m000002.ovf

Payal Bhattacharjee

unread,
Feb 11, 2021, 12:21:54 PM2/11/21
to mum...@googlegroups.com
Thank you so much. It's working now. 


Regards, 
Payal

Reply all
Reply to author
Forward
0 new messages