Question on layer-specific Spin-Orbit Torque and AddEdensTerm implementation in MuMax3

28 views
Skip to first unread message

SANDHYA RAVICHANDRAN (RA2433002011028)

unread,
Jul 5, 2026, 10:25:45 AMJul 5
to mumax2

Dear MuMax3 Community,

I am simulating an antiferromagnetically coupled bilayer skyrmion system with two magnetic layers separated by a non-magnetic spacer. I vary the saturation magnetization (Ms) of both the top and bottom magnetic layers.

My current SOT implementation is:

Ms_top := 580e3

Ms_bottom := 510e3

aj_top := Const(J_SOT * (hbar / (2 * e)) * (alphaH / (d * Ms_top)))

aj_bottom := Const(J_SOT * (hbar / (2 * e)) * (alphaH / (d * Ms_bottom)))

bj_top := Mul(aj_top, Const(SOTxi))

bj_bottom := Mul(aj_bottom, Const(SOTxi))

DL_top := Mul(aj_top, Cross(m, p))

DL_bottom := Mul(aj_bottom, Cross(m, p))

dampinglike := Add(DL_top, DL_bottom)

FL_top := Mul(bj_top, p)

FL_bottom := Mul(bj_bottom, p)

fieldlike := Add(FL_top, FL_bottom)

AddFieldTerm(dampinglike)

AddFieldTerm(fieldlike)

AddEdensTerm(Mul(Const(-0.5), Dot(dampinglike, M_full)))

AddEdensTerm(Mul(Const(-0.5), Dot(fieldlike, M_full)))

I have two questions:

  1. Since m is the global magnetization field, does this implementation apply both torque contributions to all magnetic layers? If so, what is the recommended way to apply different damping-like and field-like SOT strengths only to the corresponding top and bottom magnetic layers?
  2. Is it physically correct to include the following energy density terms?

AddEdensTerm(Mul(Const(-0.5), Dot(dampinglike, M_full)))

AddEdensTerm(Mul(Const(-0.5), Dot(fieldlike, M_full)))

Or should SOT be implemented only using AddFieldTerm() without any corresponding AddEdensTerm()?

Thank you very much for your time and guidance.

Best regards,

Sandhya.

Josh Lauzier

unread,
Jul 5, 2026, 11:34:56 PMJul 5
to mumax2
Hi,

1) Yes, this will apply the torques to both layers. Currently you have 2 FL and 2 DL torques applied to both the upper and lower layer. If you only want one term to apply to the top, and one to the bottom, you should use the masked() command.  Masked takes a Quantity and a Shape, so you will need to create a Shape that matches your layers. So something like:

maskedFLtop:= masked( FL_top ,layer(0))
maskedFLbot := masked(FL_bottom,layer(1))

And similarly for the damping terms. You can get rid of the term you called "fieldlike " and "dampinglike" which is adding the two terms together, respectively.

2) Yes, those are correct. You can find examples of this in the mumax workshop here, in particular session4.

Cheers,
Josh L.
Reply all
Reply to author
Forward
0 new messages