Dispersion of a solid wire in axial magnetization state#

This notebook will calculate the spin-wave spectrum of a solid wire with 120 nm diameter, Ni (nickel) material parameters, taken from Ref. 1. The obtained dispersion(s) can be compared with those published in Ref. 1.

[1]:
import tetrax as tx

Here we create the sample with material parameters obtained from Ref. 1.

[2]:
wire = tx.Sample(
    tx.geometries.waveguide_axial.round_wire(60,2),
    name='solid_Ni_wire_axial'
)
[3]:
wire.material["Msat"] = 0.48e6 # A/m
wire.material["Aex"] = 7.46e-13 # J/m
wire.material["gamma"] = 193.6e9 # 1/Ts

Dispersion is computed for an external field of 100 mT applied along the long axis of the Ni wire.

[4]:
wire.mag = (0,0,1)
wire.Bext = (0,0,100e-3)

Now let us calculate the spin-wave spectra:

[5]:
mmin=0
mmax=10
num_modes=5
spectrum = tx.experiments.eigenmodes(wire,kmin=-100e6, kmax=100e6, num_k=400, num_modes=num_modes, mmin=mmin, mmax=mmax)
100%|██████████████| 4200/4200 [00:31<00:00, 134.66it/s]

We plot the dispersion for the first 5 modes and for all azimuthal indicies#

This time we do not use the standard plotting function of the TetraX package to show the dispersions, but still we use the plotply package. The plotting might look complicated, however is worth putting some efforts into it for future presentations [2].

[6]:
from plotly import graph_objects as go
import plotly.express as px

m_max_abs = 10
cmap = px.colors.sequential.Plasma

fig = go.Figure()

for m in range(-mmax,mmax+1):
    for n in range(6):
        linecolor = px.colors.sample_colorscale(cmap, abs(m) / m_max_abs * 0.9)[0]
        linestyle = {"color": linecolor}
        fig.add_trace(
                    go.Scatter(
                        x=spectrum.k*1e-6,
                        y=spectrum.frequencies(m=m,n=n)*1e-9,
                        mode="lines",
                        name=f"f{n}",
                        legendgroup=f"{m}",
                        legendgrouptitle_text=f"m={m}",
                        line = linestyle,
                    )
                )


fig.update_xaxes(title_text="k (rad/µm)", exponentformat="power")
fig.update_yaxes(title_text="f (GHz)", exponentformat="power")

fig.update_layout(
        template="simple_white",
        height=600,
        width=600,
        hoverlabel={"bordercolor": "rgba(255,255,255,1)"},
        xaxis_range=[0,100],
        yaxis_range=[4,15],
    )
fig.show(renderer="notebook") # remove the renderer argument when running on your computer