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, theta_H=None, phi_H=None, Nd=None, Na=None)#

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

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

The laboratory coordinate frame of reference is z || to film normal and x || to in-plane wavevector.

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

(T ) external magnetic field.

materialMaterial

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

dfloat

(m ) layer thickness (in z direction).

kxifloat or ndarray, optional

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

thetafloat, optional

(rad) out of plane angle of static M. Measured from film normal, i.e. pi/2 is totally in-plane magnetization.

phifloat or ndarray, optional

(rad) in-plane angle of M from kxi, 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.

theta_Hfloat or None, optional

(rad) polar angle of external field wrt. film normal. If None, field is taken as collinear with M. Default is None.

phi_Hfloat, optional

(rad) azimuthal angle of external field wrt. kxi. If None, field is taken as collinear with M. Default is None.

Nd(3,3) array or None, optional

Shape demag tensor in lab frame. If None, taken as for an infinite thin film np.diag([0,0,1]). Default is None.

Na(3,3) array or None, optional

() anisotropy tensor in lab frame. If None, np.zeros((3, 3)) is used. Default is None.

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

(T ) inhomogeneous broadening.

w0float

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

wMfloat

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

Afloat

(m^2) parameter in Kalinikos-Slavin 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.

set_DE()

Changes angles theta and phi to match the Damon Eshbach geometry, i.e. M || y, Bext || y.

set_BV()

Changes angles theta and phi to match the backward volume geometry, i.e. M || x, Bext || x.

set_FV()

Changes angles theta and phi to match the forward volume geometry, i.e. M || z, Bext || z.

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

(m ) 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

(s ) 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

(T ) 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.

set_BV()#

Changes angles theta and phi to match the backward volume geometry, i.e. M || x, Bext || x.

set_DE()#

Changes angles theta and phi to match the Damon Eshbach geometry, i.e. M || y, Bext || y.

set_FV()#

Changes angles theta and phi to match the forward volume geometry, i.e. M || z, Bext || z.

property Aex#

Exchange stiffness constant (J/m).

property Bext#

External field value (T).

property Ms#

Saturation magnetization (A/m).

property Na#

Anisotropy tensor in lab frame.

property Nd#

Shape demag tensor in lab frame.

property gamma#

Gyromagnetic ratio (rad*Hz/T).

property phi_H#

Azimuthal angle of external field wrt. M (rad).

property theta#

Out-of-plane angle of static M (rad).

property theta_H#

Polar angle of external field wrt. film normal (rad).