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:
- Bext
float (T ) 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 (m ) layer thickness (in z direction).
- kxi
floatorndarray, optional (rad/m) in-plane k-vector (wavenumber), usually a vector.
- theta
float, optional (rad) out of plane angle of static M. Measured from film normal, i.e. pi/2 is totally in-plane magnetization.
- phi
floatorndarray, optional (rad) in-plane angle of M from kxi, 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.- theta_H
floatorNone, optional (rad) polar angle of external field wrt. film normal. If None, field is taken as collinear with M. Default is None.
- phi_H
float, optional (rad) azimuthal angle of external field wrt. kxi. If None, field is taken as collinear with M. Default is None.
- Nd(3,3)
arrayorNone, 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)
arrayorNone, optional () anisotropy tensor in lab frame. If None,
np.zeros((3, 3))is used. Default is None.
- Bext
- Attributes:
- [same as Parameters (except `material`), plus these]
MsfloatSaturation magnetization (A/m).
gammafloatGyromagnetic ratio (rad*Hz/T).
AexfloatExchange stiffness constant (J/m).
- alpha
float () Gilbert damping.
- mu0dH0
float (T ) inhomogeneous broadening.
- w0
float (rad*Hz) parameter in Kalinikos-Slavin equation. w0 = MU0*gamma*Hext
- wM
float (rad*Hz) parameter in Kalinikos-Slavin equation.
wM = MU0*gamma*Ms- A
float (m^2) parameter in Kalinikos-Slavin 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.
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).
- 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 (T ) 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).
- 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).