SpinWaveToolkit.SingleLayer#

class SpinWaveToolkit.SingleLayer(Bext, material, d, kxi=array([1.00000000e-12, 1.25628141e+05, 2.51256281e+05, 3.76884422e+05, 5.02512563e+05, 6.28140704e+05, 7.53768844e+05, 8.79396985e+05, 1.00502513e+06, 1.13065327e+06, 1.25628141e+06, 1.38190955e+06, 1.50753769e+06, 1.63316583e+06, 1.75879397e+06, 1.88442211e+06, 2.01005025e+06, 2.13567839e+06, 2.26130653e+06, 2.38693467e+06, 2.51256281e+06, 2.63819095e+06, 2.76381910e+06, 2.88944724e+06, 3.01507538e+06, 3.14070352e+06, 3.26633166e+06, 3.39195980e+06, 3.51758794e+06, 3.64321608e+06, 3.76884422e+06, 3.89447236e+06, 4.02010050e+06, 4.14572864e+06, 4.27135678e+06, 4.39698492e+06, 4.52261307e+06, 4.64824121e+06, 4.77386935e+06, 4.89949749e+06, 5.02512563e+06, 5.15075377e+06, 5.27638191e+06, 5.40201005e+06, 5.52763819e+06, 5.65326633e+06, 5.77889447e+06, 5.90452261e+06, 6.03015075e+06, 6.15577889e+06, 6.28140704e+06, 6.40703518e+06, 6.53266332e+06, 6.65829146e+06, 6.78391960e+06, 6.90954774e+06, 7.03517588e+06, 7.16080402e+06, 7.28643216e+06, 7.41206030e+06, 7.53768844e+06, 7.66331658e+06, 7.78894472e+06, 7.91457286e+06, 8.04020101e+06, 8.16582915e+06, 8.29145729e+06, 8.41708543e+06, 8.54271357e+06, 8.66834171e+06, 8.79396985e+06, 8.91959799e+06, 9.04522613e+06, 9.17085427e+06, 9.29648241e+06, 9.42211055e+06, 9.54773869e+06, 9.67336683e+06, 9.79899497e+06, 9.92462312e+06, 1.00502513e+07, 1.01758794e+07, 1.03015075e+07, 1.04271357e+07, 1.05527638e+07, 1.06783920e+07, 1.08040201e+07, 1.09296482e+07, 1.10552764e+07, 1.11809045e+07, 1.13065327e+07, 1.14321608e+07, 1.15577889e+07, 1.16834171e+07, 1.18090452e+07, 1.19346734e+07, 1.20603015e+07, 1.21859296e+07, 1.23115578e+07, 1.24371859e+07, 1.25628141e+07, 1.26884422e+07, 1.28140704e+07, 1.29396985e+07, 1.30653266e+07, 1.31909548e+07, 1.33165829e+07, 1.34422111e+07, 1.35678392e+07, 1.36934673e+07, 1.38190955e+07, 1.39447236e+07, 1.40703518e+07, 1.41959799e+07, 1.43216080e+07, 1.44472362e+07, 1.45728643e+07, 1.46984925e+07, 1.48241206e+07, 1.49497487e+07, 1.50753769e+07, 1.52010050e+07, 1.53266332e+07, 1.54522613e+07, 1.55778894e+07, 1.57035176e+07, 1.58291457e+07, 1.59547739e+07, 1.60804020e+07, 1.62060302e+07, 1.63316583e+07, 1.64572864e+07, 1.65829146e+07, 1.67085427e+07, 1.68341709e+07, 1.69597990e+07, 1.70854271e+07, 1.72110553e+07, 1.73366834e+07, 1.74623116e+07, 1.75879397e+07, 1.77135678e+07, 1.78391960e+07, 1.79648241e+07, 1.80904523e+07, 1.82160804e+07, 1.83417085e+07, 1.84673367e+07, 1.85929648e+07, 1.87185930e+07, 1.88442211e+07, 1.89698492e+07, 1.90954774e+07, 1.92211055e+07, 1.93467337e+07, 1.94723618e+07, 1.95979899e+07, 1.97236181e+07, 1.98492462e+07, 1.99748744e+07, 2.01005025e+07, 2.02261307e+07, 2.03517588e+07, 2.04773869e+07, 2.06030151e+07, 2.07286432e+07, 2.08542714e+07, 2.09798995e+07, 2.11055276e+07, 2.12311558e+07, 2.13567839e+07, 2.14824121e+07, 2.16080402e+07, 2.17336683e+07, 2.18592965e+07, 2.19849246e+07, 2.21105528e+07, 2.22361809e+07, 2.23618090e+07, 2.24874372e+07, 2.26130653e+07, 2.27386935e+07, 2.28643216e+07, 2.29899497e+07, 2.31155779e+07, 2.32412060e+07, 2.33668342e+07, 2.34924623e+07, 2.36180905e+07, 2.37437186e+07, 2.38693467e+07, 2.39949749e+07, 2.41206030e+07, 2.42462312e+07, 2.43718593e+07, 2.44974874e+07, 2.46231156e+07, 2.47487437e+07, 2.48743719e+07, 2.50000000e+07]), theta=1.5707963267948966, phi=1.5707963267948966, weff=3e-06, boundary_cond=1, dp=0)#

Compute spin wave characteristic in dependance to k-vector (wavenumber) such as frequency, group velocity, lifetime and propagation length.

The model uses the famous Slavin-Kalinikos equation from https://doi.org/10.1088/0022-3719/19/35/014

Most parameters can be specified as vectors (1d numpy arrays) of the same shape. This functionality is not guaranteed.

Functions related to parametric pumping are based on: A.G. Gurevich and G.A. Melkov. Magnetization Oscillations and Waves. CRC Press, 1996.

Parameters:
Bextfloat
  1. external magnetic field.

materialMaterial

Instance of Material describing the magnetic layer material. Its properties are saved as attributes, but this object is not.

dfloat
  1. layer thickness (in z direction).

kxifloat or ndarray, optional

(rad/m) k-vector (wavenumber), usually a vector.

thetafloat, optional

(rad) out of plane angle of static M, pi/2 is totally in-plane magnetization.

phifloat or ndarray, optional

(rad) in-plane angle of kxi from M, pi/2 is DE geometry.

wefffloat, optional

(m) effective width of the waveguide (not used for zeroth order width modes).

boundary_cond{1, 2, 3, 4}, optional

boundary conditions (BCs), 1 is totally unpinned and 2 is totally pinned BC, 3 is a long wave limit, 4 is partially pinned BC. Default is 1.

dpfloat, optional

(rad/m) pinning parameter for 4 BC, ranges from 0 to inf, 0 means totally unpinned. Can be calculated as dp=Ks/Aex, see https://doi.org/10.1103/PhysRev.131.594.

Attributes:
[same as Parameters (except `material`), plus these]
Msfloat

Saturation magnetization (A/m).

gammafloat

Gyromagnetic ratio (rad*Hz/T).

Aexfloat

Exchange stiffness constant (J/m).

alphafloat

() Gilbert damping.

mu0dH0float
  1. inhomogeneous broadening.

w0float

(rad*Hz) parameter in Slavin-Kalinikos equation. w0 = MU0*gamma*Hext

wMfloat

(rad*Hz) parameter in Slavin-Kalinikos equation. wM = MU0*gamma*Ms

Afloat

(m^2) parameter in Slavin-Kalinikos equation. A = Aex*2/(Ms**2*MU0)

Methods

GetPartiallyPinnedKappa(n)

Gives kappa from the transverse equation (in rad/m).

GetDispersion([n, nT])

Gives frequencies for defined k (Dispersion relation).

GetGroupVelocity([n, nT])

Gives (tangential) group velocities for defined k.

GetLifetime([n, nT])

Gives lifetimes for defined k.

GetDecLen([n, nT])

Give decay lengths for defined k.

GetSecondPerturbation(n, nc)

Give degenerate dispersion relation based on the secular equation (54).

GetDensityOfStates([n, nT])

Give density of states for given mode.

GetBlochFunction([n, nT, Nf])

Give Bloch function for given mode.

GetExchangeLen()

Calculate exchange length in meters from the parameter A.

GetEllipticity()

Calculate ellipticity of the precession ellipse for all kxi.

GetCouplingParam()

Calculate coupling parameter of the parallel pumped spin wave modes.

GetThresholdField()

Calculate threshold field for parallel pumping.

GetThresholdFieldNonAdiabatic([L])

Threshold field for parallel pumping including radiative losses in the non-adiabatic case.

Examples

Example of calculation of the dispersion relation f(k_xi), and other important quantities, for the lowest-order mode in a 30 nm thick NiFe (Permalloy) layer.

kxi = np.linspace(1e-6, 150e6, 150)

PyChar = SingleLayer(Bext=20e-3, kxi=kxi, theta=np.pi/2,
                     phi=np.pi/2, d=30e-9, weff=2e-6,
                     boundary_cond=2, material=SWT.NiFe)
DispPy = PyChar.GetDispersion()*1e-9/(2*np.pi)  # GHz
vgPy = PyChar.GetGroupVelocity()*1e-3  # km/s
lifetimePy = PyChar.GetLifetime()*1e9  # ns
decLen = PyChar.GetDecLen()*1e6  # um
GetBlochFunction(n=0, nT=0, Nf=200)#

Give Bloch function for given mode. Bloch function is calculated with margin of 10% of the lowest and the highest frequency (including Gilbert broadening).

Parameters:
nint

Quantization number.

nTint, optional

Waveguide (transversal) quantization number.

Nfint, optional

Number of frequency levels for the Bloch function.

Returns:
wndarray

(rad*Hz) frequency axis for the 2D Bloch function.

blochFuncndarray

() 2D Bloch function for given kxi and w.

GetCouplingParam()#

Calculate coupling parameter of the parallel pumped spin wave modes.

Vk = gamma * Bk / (2 * wk)

Returns:
Vkfloat

(rad*Hz/T) coupling parameter for parallel pumping.

GetDecLen(n=0, nT=0)#

Give decay lengths for defined k. Decay length is computed as lambda = v_g*tau. The result is given in m.

Parameters:
nint

Quantization number.

nTint, optional

Waveguide (transversal) quantization number.

Returns:
declenndarray
  1. decay length.

GetDensityOfStates(n=0, nT=0)#

Give density of states for given mode. Density of states is computed as DoS = 1/v_g. Output is density of states in 1D for given dispersion characteristics.

Parameters:
nint

Quantization number.

nTint, optional

Waveguide (transversal) quantization number.

Returns:
dosndarray

(s/m) value proportional to density of states.

GetDispersion(n=0, nT=0)#

Gives frequencies for defined k (Dispersion relation). The returned values are in rad*Hz.

Parameters:
nint

Quantization number.

nTint, optional

Waveguide (transversal) quantization number.

GetEllipticity()#

Calculate ellipticity of the precession ellipse for all kxi. It is defined such that it falls within [0, 1].

Returns:
ellipticityndarray

() ellipticity for all kxi.

GetExchangeLen()#

Calculate exchange length in meters from the parameter A.

GetGroupVelocity(n=0, nT=0)#

Gives (tangential) group velocities for defined k. The group velocity is computed as vg = dw/dk. The result is given in m/s.

Warning

Works only when kxi.shape[0] >= 2.

Parameters:
nint

Quantization number.

nTint, optional

Waveguide (transversal) quantization number.

Returns:
vgndarray

(m/s) tangential group velocity.

GetLifetime(n=0, nT=0)#

Gives lifetimes for defined k. Lifetime is computed as tau = (alpha*w*dw/dw0)^-1. The result is given in s.

Parameters:
nint

Quantization number.

nTint, optional

Waveguide (transversal) quantization number.

Returns:
lifetimendarray
  1. lifetime.

GetPartiallyPinnedKappa(n)#

Gives kappa from the transverse equation (in rad/m).

Parameters:
nint

Quantization number.

GetSecondPerturbation(n, nc)#

Give degenerate dispersion relation based on the secular equation (54). Output is dispersion relation in the vicinity of the crossing of the two different modes.

Parameters:
nint

Quantization number.

ncint

Quantization number of the crossing mode.

Returns:
wdn, wdnctuple[ndarray]

(rad*Hz) frequencies of corresponding kxi for the two crossing modes.

GetThresholdField()#

Calculate threshold field for parallel pumping.

mu_0 * h_th = w_r / Vk (relaxation frequency / coupling parameter)

Returns:
mu_0 * h_thfloat
  1. threshold field for parallel pumping.

GetThresholdFieldNonAdiabatic(L=1e-06)#

Threshold field for parallel pumping including radiative losses in the non-adiabatic case.

This is an approximation which only works when radiative losses are greater than intrinsic, i.e. when: v_g / L >> w_r (relaxation frequency).

Parameters:
Lfloat

(m) pumping field localization length. (i.e. width of the excitation antenna)

Returns:
mu_0 * h_thfloat

(T) threshold field for parallel pumping including radiative losses.

property Aex#

Exchange stiffness constant (J/m).

property Bext#

External field value (T).

property Ms#

Saturation magnetization (A/m).

property gamma#

Gyromagnetic ratio (rad*Hz/T).