I'm trying to implement a uncompensated spins FM/AFM interface in a bilayers system that presents the phenomenon of exchange bias in Mumax, following the standard of the article "Modeling compensated antiferromagnetic interfaces with MuMax", however, I'm not succeeding. To implement uncompensated spins on the FM/AFM interface, do I have to define one or two AFM regions in Mumax? I tried to freeze the AFM layer with the "frozenspins" command but it did not work, can anyone help me with this problem?
See how I implemented the code based on this one from the article "Modeling compensated antiferromagnetic interfaces with MuMax", from a companion in the researchgate on this subject too, I posted some results there. Is the way I used the FM/AFm interaction correct?
Nx := 64; Ny := 64; Nz := 3;
Cx := 3.0e-9; Cy := 3.0e-9; Cz := 3.0e-9;
setgridsize(Nx, Ny, Nz)
setcellsize(Cx, Cy, Cz)
setgeom(universe())
setPBC(0,0,1) // as the FM is discretized in only 1 layer
DefRegion(0, Layer(0)) // AFM layer
DefRegion(1, Layer(1)) // FM layer
defregion(0, xrange(-inf, 0)) // left half
defregion(1, xrange(0, inf)) // right half
NoDemagSpins.setRegion(1, 1)
A_FM := 13e-12
Msat_FM:= 800e3
Aex.setRegion(1, A_FM)
Msat.setRegion(1, Msat_FM)
m.setRegion(1, uniform(0, 1, 0))
t_AFM := Cz
Msat_AFM := Msat_FM // to equally divide the energy density
K_AFM := 7.0e5
J_I := 0.7e-3
delta := 1.0e6
A_AFM := -(delta*t_AFM*Cz/2)
A_A := -A_AFM
NoDemagSpins.SetRegion(0, 1)
Aex.setRegion(0, A_A)
Msat.setRegion(0, Msat_AFM)
Ku1.setRegion(0, K_AFM)
anisU.setRegion(0,vector(0, 1, 0))
m.setRegion(0, vortex(-1, -1))
eb:= (2 * A_FM * A_AFM / (Msat_FM * Msat_AFM))/(A_FM/Msat_FM + A_AFM/Msat_AFM)
ext_ScaleExchange(0, 1, J_I*Cz/(eb*(Msat_AFM+Msat_AFM)))
Relax()
Bmax := 75.0
B_app := 75.0
fiH := 0.0 // field angle applied
TableAddVar(B_app, "B_app", "T")
TableAdd(m.Region(1)) // save average magnetization of FM layer
for i := Bmax; i >= -Bmax; i-- {
B_app = i * 1e-3
print(B_app*1000, "Oe")
B_ext.setregion(1, vector(B_app*cos((fiH+90)*pi/180), B_app*sin((fiH+90)*pi/180), 0))
tablesave()
Relax()
}
for i := -Bmax; i <= Bmax; i++ {
B_app = i * 1e-3
print(B_app*1000, "Oe")
B_ext.setregion(1, vector(B_app*cos((fiH+90)*pi/180), B_app*sin((fiH+90)*pi/180), 0))
tablesave()
Relax()
}