Simulate multi-layer stack of a vortex MTJ

714 views
Skip to first unread message

Mong Con

unread,
Oct 2, 2023, 2:03:41 PM10/2/23
to mumax2
Dear all,

I am a graduate student who is very new to mumax3. Currently, I and trying to recreate the simulation for a multi-layer structure of a vortex MTJ following a paper that I attach below in this conversation.

So far, I have only been able to write the setup for the free layer (consisting of 3 layers of different materials) as follows:

setgridsize(256, 256, 1)
setcellsize(3e-9, 3e-9, 3e-9)

// Free layer's geometrical structure
diameter := 5e-6
CoFeB_bottom := ellipsoid(diameter, diameter, 0.4e-9) //dimensions in x,y,z direction
CoFe_middle := ellipsoid(diameter, diameter, 0.5e-9).transl(0, 0, 0.4e-9)
CoFeB_top := ellipsoid(diameter, diameter, 40e-9).transl(0, 0, 0.9e-9)

// CoFeB magnetic parameters for simulation
Msat = 1.25e6 //saturation magnetization [A/m]
Aex = 10e-12 //exchange stiffness [J/m]
alpha = 4e-3 //damping constant [unitless]
Ku1 = 866 //1st order uniaxial anisotropy [J/m^3]
anisU = vector(0, 1, 0) //anisotropy y-direction

If you have any suggestions on how I should proceed or which examples I should reference, please feel free to let me know.

Thank you so much for your time!

Sincerely,
Minh
Non-hysteretic MTJ sensors with high dynamic reserve.pdf

Mong Con

unread,
Oct 19, 2023, 2:56:55 PM10/19/23
to mumax2
Hi all,

After trying to learn the software for sometime, I have developed this code in order to recreate the results in the attached paper:

// Grid and cell setup
diameter := 5e-6 //diameter of 5 microns
Nx := 256
Ny := 256
Nz := 1
setgridsize(Nx, Ny, Nz)
setcellsize(diameter/Nx, diameter/Ny, 3e-9/Nz)


// Free layer's geometrical structure (cylinder)
//FL_CoFeB_bottom := cylinder(diameter, 0.4e-9) //dimensions in x,y,z direction
//FL_CoFe_middle := cylinder(diameter, 0.5e-9).transl(0, 0, 0.4e-9)
//FL_CoFeB_top := cylinder(diameter, 80e-9).transl(0, 0, 0.9e-9)
//setgeom(FL_CoFeB_top)

// Free layer's structure (circle)
FL_CoFeB_top_circle := circle(diameter) //circular geometry
setgeom(FL_CoFeB_top_circle)
defRegion(1, zrange(0, 80e-9)) //thickness of FL_CoFeB_top_circle
save(regions)



// CoFeB magnetic parameters for simulation
Msat.setRegion(1, 1.25e6) //saturation magnetization [A/m]
save(Msat)
Aex.setRegion(1, 10e-12) //exchange stiffness [J/m]
alpha.setRegion(1, 4e-3) //damping constant [unitless]
Ku1.setRegion(1, 866) //1st order uniaxial anisotropy [J/m^3]
save(Ku1)
anisU.setRegion(1, vector(0, 1, 0)) //anisotropy y-dir
save(anisU)

m.setRegion(1, randomMag()) //initial magnetization of random direction for the CoFeB layer
relax()
saveas(m, "m_intial")


// Setup external magnetic field B_ext
TableAdd(B_ext)
B_ext = vector(0, 300e-4, 0) //field of strength 300 Oe in y-direction
//relax()


// Apply external magnetic field to CoFeB layer
n_sweep_total := 5
n_sweep := 1
i_down := 1
i_up := 1

for j := 0; j < n_sweep_total; j += 1 {

for B := 300e-4; B >= -300e-4; B -= 0.0001 {
B_ext = vector(0, B, 0)
minimize()
run(20e-9)
file_name_down := sprintf("%03d_D_%04d,SweepDown,B=%.4fT.ovf", n_sweep, i_down, B)
Saveas(m, file_name_down)
tablesave()
i_down += 1
}
i_down = 1
n_sweep += 1

for B := -300e-4; B <= 300e-4; B += 0.0001 {
B_ext = vector(0, B, 0)
minimize()
run(20e-9)
file_name_up := sprintf("%03d_U_%04d,SweepUp,B=%.4fT.ovf", n_sweep, i_up, B)
Saveas(m, file_name_up)
tablesave()
i_up += 1
}
i_up = 1
n_sweep += 1
}

Although not explicitly stated, it looks like the cylindrical (Single Vortex or SV) state achieves a vortex configuration after only 1 cycle (with 1 cycle = 2 sweeps) of sweeping the magnetic field from 300 Oe to -300 Oe and back. Nevertheless, with my current code, I am unable to get any vortex state near zero field at all. In attempting to tackle this, I have tried:
  1. Increasing the number of cycles (n_sweep_total) from 5 to 50. From investigating the magnetisation maps of all 50 cycles, I can conclude that there are no vortices. Furthermore, it looks like the stability of the states fluctuates sinusoidally: once it reaches its most stable state with 2 vortices, the configuration destablises into a multi-domain state with many vortex points, and eventually will loop back to being stable again with only 2 vortices present.
  2. Decreasing the first order uniaxial anisotropy (Ku1) from 866 J/m^3 to 50 J/m^3 for a test run of 5 cycles. Interestingly, a desired Single Vortex state is achieved after sweep number 4 (out of 10 sweeps). However, it seems that this configuration is still not stable since at sweep number 6, the Single Vortex state disappears, and I got a Double-Vortex state instead. According to what I have seen before, I can safety assume that the stability of this system also fluctuates sinusoidally and a Single Vortex state will be reached again had I swept the field a couple more times.
I would really appreciate it if there is anyone who can help me with this stability problem, because physically speaking, after a stable Single Vortex configuration has been achieved, one would assume the system would want to remain in that state instead of fluctuating around it. Additionally, can anybody confirm that we can reach a Single Vortex state at Ku = 866 as in the paper? I still cannot figure out a proper way to do this.

Looking forward to a response from you all! Any help is much appreciated!

Thanks and have a good day!

Best,
Minh
Reply all
Reply to author
Forward
0 new messages