Linewidths of spin waves in magnetic film#

In this example, we show how to calculate the line widths of the Damon-Eshbach modes in a 50 nm thick permalloy film. Since the line widths are calculated from the mode profiles, first, we calculate the linear spectrum.

[1]:
import tetrax as tx
import numpy as np

Dispersion calculation#

For the numerical calculations with TetraX, we create a permalloy film with 50 nm thickness and a line trace mesh along the thickness with 1 nm resolution. Remember: the normal direction is the \(y\) direction, and the propagation direction is the \(z\) direction. We also set permalloy material paremeters.

[2]:
T = 50
sample = tx.Sample(tx.geometries.layer.monolayer(thickness=T,cell_size=1))
sample.material = tx.materials.permalloy

The film is magnetized along the \(x\) direction, using an external magnetic field of 20 mT, thus the wave vector is perpendicular to the equilibrium magnetization.

[3]:
sample.mag = (1,0,0)


Bext = 20e-3
sample.external_field = (Bext,0,0)

The linewidths will be calculated from the mode profiles (more specifically, from the mode ellipticities) of a calculated eigenspectrum, see Ref. 2 or Ref. 3. By default, the mode profiles will always be saved. Nevertheless, if you set save_mode_profiles=False, line widths CANNOT can be calculated.

[4]:
spectrum_DE = tx.experiments.eigenmodes(sample, num_modes=3,num_cpus=-1, num_k=201, save_mode_profiles=True)
100%|█████████████████| 101/101 [00:02<00:00, 38.13it/s]

We can visualize the calculated dispersion easily using the built-in plot() methdod of the EigenResult.

[5]:
spectrum_DE.plot(n=[0,2], k=(0,40e6), fscale="G", kscale="u", renderer="notebook") # remove the renderer argument when running on your computer)

Linewidths#

Now, we can calculate the line widths. Calling plot_linewidths() method of the EigenResult spectrum_DE will automatically calculate them from the mode profiles. The avoided level crossing between the first and the second mode is also seen in the line widths.

[6]:
spectrum_DE.plot_linewidths(n=[0,2], k=(0,40e6), fscale="M", kscale="u",renderer="notebook") # remove the renderer argument when running on your computer)