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 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{
minimize() // small changes best minimized by minimize()
tablesave()
//snapshot(m)
}
for B:=-Bmax; B<=Bmax; B+=Bstep{
minimize() // small changes best minimized by minimize()
tablesave()
//snapshot(m)
}
save(regions)
wall := since(start).Seconds()
print("Total run time: ", wall)