Mumax3 Coercivity of permalloy strip vs. grain size

590 views
Skip to first unread message

gdd...@gmail.com

unread,
Dec 7, 2021, 7:44:50 AM12/7/21
to mumax2
Hello, everyone!

I have the next question.
We simulated in Mumax3 the hysteresis loop of the permalloy's strip under the applied magnetic field. For this purpose we used ext_makegrains () function based on Voronoi tesselation to define grain-size regions. Our task is to obtain the dependence of the permalloy's coercivity vs. grain size. The problem is that the width of the hysteresis loops are equal for different grain sizes. Also, hysteresis loop significantly differs from the experimental results for the same dimensions of the permalloy's strip (in the experiment the coercive field is about 5 Oe, but in the micromagnetic simulation it is several orders of magnitude greater).
We will be grateful for your help!

The results obtained are attached to this message.
The code of our simulation test is below:

Nx:= 200
Ny:= 20
Nz:= 1

Cx:= 5e-9
Cy:= 5e-9
Cz:= 30e-9

SetGridSize(Nx,Ny, Nz)
SetCellsize(Cx, Cy, Cz)
SetGeom(rect(Nx*Cx, Ny*Cy))
saveas(geom, "rect")

alpha = 0.01
K := 200
Aex   = 13e-12
Msat  = 700e3

// define grains with region number 0-255
grainSize := 30e-9
randomSeed := 1234
maxRegion := 255
ext_makegrains(grainSize, maxRegion, randomSeed)

// set random parameters per region
for i:=0; i<maxRegion; i++{
// random 5% anisotropy variation
Ku1.SetRegion(i, K + randNorm() * 0.05 * K)
anisU.setRegion(i, vector(1, 0, 0))
}

m = uniform(1, 0, 0)
//relax the magnetization in saturated state
B_ext=vector(0.1,0,0)
TableAdd(B_ext)
relax()

Bmin  := -0.1
Bmax  := 0.1
Bstep :=  0.002

for B:=Bmax; B>=-Bmax; B-=Bstep{
    B_ext = vector(B, 0, 0)
    minimize()   // small changes best minimized by minimize()
    tablesave()
}


for B:=-Bmax; B<=Bmax; B+=Bstep{
    B_ext = vector(B, 0, 0)
    minimize()   // small changes best minimized by minimize()
    tablesave()
}

save(regions)
save(m)
hyst_vs_grain.PNG

Felipe Garcia

unread,
Dec 7, 2021, 1:32:31 PM12/7/21
to mumax2
Hello,

This is normal. The demag is much stronger than magnetocrystalline in permalloy. One can compare K with the equivalent value of mu0Ms^2/2. I guess that If you put K=0, the loop will remain the same, so one can imagine the effect of a small change in the anisotropy. One has to change other parameters to start to see some effect, maybe Ms or so but I don't know how realistic it is. The difference with experiment may have different sources.

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/f1224ab3-c96f-4ff1-ba6d-107751eae56fn%40googlegroups.com.

gdd...@gmail.com

unread,
Aug 12, 2022, 9:51:24 AM8/12/22
to mumax2
Hello, Mumax community!

I have the similar question.

We simulated in Mumax3 the hysteresis loop of the permalloy's strip under the applied magnetic field. For this purpose we used ext_makegrains () function based on Voronoi tesselation to define grain-size regions. Our task is to obtain the dependence of the permalloy's coercivity vs. grain size.
The problem is that the hysteresis loop significantly differs from the experimental results for the same dimensions of the permalloy's strip (in the experiment the coercive field is about 5 Oe, but in the micromagnetic simulation it is several orders of magnitude greater).
Also, there is no clear dependence of the coercivity on the grain size.

We will be grateful for your help!
The results obtained are attached to this message.
The dependence of the anisotropy coefficient Kavg on the grain size was taken from the work: https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7903595 (formula 12).

The code of our simulation test is below:

start := now()

SetGridsize(384,192, 1)
SetCellsize(2000e-9/384,1000e-9/192, 30e-9)

Msat = 800e3
Aex = 13e-12
alpha = 0.02
Ku1=5e2

anisu=vector(1,0,0)
m=uniform(1,0,0)


// define grains with region number 0-255
grainSize := 14e-9
randomSeed := 1234567

maxRegion := 255
ext_makegrains(grainSize, maxRegion, randomSeed)

// set random anisotropy per region

for i:=0; i<maxRegion; i++{
// random uniaxial anisotropy direction on the unit sphere
//axis := vector(randNorm(), randNorm(), randNorm())
axis := vector(1, 0, 0)
// note: axes are normalized by mumax3
AnisU.SetRegion(i, axis)

// random 10% anisotropy variation
    Aex1 := 1.3e-11
    K1 := 100
    Ku := 500
    L0 := sqrt(Aex1/K1)
    a := (K1/2) * pow((grainSize/L0),2)
    b := sqrt(pow(((K1/2)*pow((grainSize/L0),2)),2) + pow(Ku,2))
    Kavg := a + b
    Ku1.SetRegion(i, Kavg)
}

// reduce exchange coupling between grains by 10%

for i:=0; i<maxRegion; i++{
for j:=i+1; j<maxRegion; j++{
ext_ScaleExchange(i, j, 0.9)

}
}

m = uniform(1, 0, 0)
//relax the magnetization in saturated state
B_ext=vector(0.1,0,0)
relax()

Bmax  := 40.0e-3
Bstep :=  0.1e-3
MinimizerStop = 1e-9
TableAdd(B_ext)


for B:=Bmax; B>=-Bmax; B-=Bstep{
    B_ext = vector(B, 0, 0)
    minimize() // small changes best minimized by minimize()
    tablesave()
   //snapshot(m)

}


for B:=-Bmax; B<=Bmax; B+=Bstep{
    B_ext = vector(B, 0, 0)
    minimize() // small changes best minimized by minimize()
    tablesave()
    //snapshot(m)
}
save(regions)

wall := since(start).Seconds()
print("Total run time: ", wall)

вторник, 7 декабря 2021 г. в 21:32:31 UTC+3, pkwgarcias:
image_2022-08-12_16-45-53.png
Reply all
Reply to author
Forward
0 new messages