The propagation characteristics of spin waves

37 views
Skip to first unread message

JEWELL KAYCEE

unread,
Feb 8, 2026, 10:52:17 PM (3 days ago) Feb 8
to mumax2
Hi everyone,

I am a beginner just starting to learn mumax3. I would like to simulate the propagation characteristics of spin waves in a YIG thin film with dimensions of 20 µm× 2 µm × 10 nm, and analyze its dispersion relation.
I've attached two versions of my script. Could you tell me which one is more suitable for my simulation?  Thank you very much for your help, and I look forward to hearing from you soon!

Best regards!

Jewell Kaycee
YIG1.txt
YIG2.txt

Josh Lauzier

unread,
Feb 9, 2026, 6:20:26 AM (3 days ago) Feb 9
to mumax2
Hi,

The idea behind the second script YIG2 is more correct. When adding high-alpha bumpers, you want to have it gradually increasing, so it can absorb incoming spinwaves. If you have an abrupt change in alpha from low to high, you can end up with reflections from the boundary. However, note that in mumax, 0 is defined at the center of the simulation. So instead of  DefRegion(10+i, XRange((1848+i)*cx, (1849+i)*cx)) you probably want something more like: DefRegion(10+i, XRange((848+i)*cx, (849+i)*cx)). Your simulation box extends from -10e-6 to +10e-6, not 0 to 20e-6.

A few other small notes:

The scaling on your alpha is a bit extreme. It starts out reasonable at 0.005, but towards the end of the loop, it grows to as large as ~1e16 (=0.005*1.25^199). This is excessive. Gradually increasing up to say 0.5 or 1 should be sufficient. So something like: alpha0 = 0.5-(200-i)/400 .

Before you relax, it is a good idea to initialize your magnetization. Otherwise it will start from random. This will not effect the end result in your case, but it will take longer for no gain. Something like m= uniform(0.001,1,0) will do.

For setting the excitation, the vectormask method will work. A simpler way to accomplish this would be to simply define a region just like you did with alpha, and do something like:
defregion(1, xrange(-10e-6 ,-9e-6) )
B_ext.setregion(1, vector(0.001*sinc(2*pi*fc*(t-t_0))),0.05,0 )

Either way is equivalent, however. The vectormask method is more intended if you have spatial variation (and also a bit slower to initialize).

Cheers,
Josh L.

Антон Луценко

unread,
Feb 10, 2026, 3:36:47 AM (2 days ago) Feb 10
to mumax2
To add to this, the excitation and discretization frequencies are a bit off. The excitation frequency seems to be 20e9 (20 GHz) which is usually way too high, and the discretization frequency (inverse timestep) is 1/5e-9 = 0.2e9 = 0.2 GHz which is way too low. I would recommend adjusting them as such: 

fc := 5e9 
fd := 4 * fc
savestep := 1/fd

and use the timestep with autosave:

autosave(m, savestep)

also, setting MaxErr=1e-7 or even 1e-8 would help to avoid some numerical noise.

Hope that helps!

JEWELL KAYCEE

unread,
Feb 10, 2026, 4:24:42 AM (2 days ago) Feb 10
to mumax2
  Thank you for your insightful comments. They have provided great guidance for my work.

  Best regards!  
 Jewell Kaycee
Reply all
Reply to author
Forward
0 new messages