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:
- Bext
float
external magnetic field.
- material
Material
Instance of Material describing the magnetic layer material. Its properties are saved as attributes, but this object is not.
- d
float
layer thickness (in z direction).
- kxi
float
orndarray
,optional
(rad/m) k-vector (wavenumber), usually a vector.
- theta
float
,optional
(rad) out of plane angle of static M, pi/2 is totally in-plane magnetization.
- phi
float
orndarray
,optional
(rad) in-plane angle of kxi from M, pi/2 is DE geometry.
- weff
float
,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.
- dp
float
,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.
- Bext
- Attributes:
- [same as Parameters (except `material`), plus these]
Ms
float
Saturation magnetization (A/m).
gamma
float
Gyromagnetic ratio (rad*Hz/T).
Aex
float
Exchange stiffness constant (J/m).
- alpha
float
() Gilbert damping.
- mu0dH0
float
inhomogeneous broadening.
- w0
float
(rad*Hz) parameter in Slavin-Kalinikos equation. w0 = MU0*gamma*Hext
- wM
float
(rad*Hz) parameter in Slavin-Kalinikos equation.
wM = MU0*gamma*Ms
- A
float
(m^2) parameter in Slavin-Kalinikos equation.
A = Aex*2/(Ms**2*MU0)
Methods
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.
Calculate exchange length in meters from the parameter A.
Calculate ellipticity of the precession ellipse for all kxi.
Calculate coupling parameter of the parallel pumped spin wave modes.
Calculate threshold field for parallel pumping.
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).
- GetCouplingParam()#
Calculate coupling parameter of the parallel pumped spin wave modes.
Vk = gamma * Bk / (2 * wk)
- Returns:
- Vk
float
(rad*Hz/T) coupling parameter for parallel pumping.
- Vk
- 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.
- 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.
- GetDispersion(n=0, nT=0)#
Gives frequencies for defined k (Dispersion relation). The returned values are in rad*Hz.
- GetEllipticity()#
Calculate ellipticity of the precession ellipse for all kxi. It is defined such that it falls within [0, 1].
- Returns:
- ellipticity
ndarray
() ellipticity for all kxi.
- ellipticity
- 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
.
- 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.
- GetPartiallyPinnedKappa(n)#
Gives kappa from the transverse equation (in rad/m).
- Parameters:
- n
int
Quantization number.
- n
- 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.
- GetThresholdField()#
Calculate threshold field for parallel pumping.
mu_0 * h_th = w_r / Vk (relaxation frequency / coupling parameter)
- Returns:
- mu_0 * h_th
float
threshold field for parallel pumping.
- mu_0 * h_th
- 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).
- 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).