SpinWaveToolkit.SingleLayerNumeric
#
- class SpinWaveToolkit.SingleLayerNumeric(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, KuOOP=0, N=3)#
Compute spin wave characteristic in dependance to k-vector (wavenumber) such as frequency, group velocity, lifetime and propagation length for desired number of modes.
The dispersion model uses the approach of Tacchi et al., see: https://doi.org/10.1103/PhysRevB.100.104406
Most parameters can be specified as vectors (1d numpy arrays) of the same shape. This functionality is not guaranteed.
- 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 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. ### The only working BCs are 1 right now, some functions
implement 2 and 4, but it is not complete!
- dp
float
,optional
pinning parameter for 4 BC, ranges from 0 to inf, 0 means totally unpinned.
- KuOOP
float
,optional
(J/m^3) OOP anisotropy strength used in the Tacchi model. ### Should this be calculated from the surface anisotropy
strength as KuOOP = 2*Ks/d + OOP_comp_of_bulk_anis?, where d is film thickness and Ks is the surface anisotropy strength (same as material.Ku)
- N
int
,optional
Number of modes to calculate, default is 3. This parameter defines the size of the system matrix and the number of modes to calculate. The size of the system matrix is 2*N x 2*N, so for N=3 it is 6x6. The modes are sorted from low to high frequencies.
- 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)
- wU
float
(rad*Hz) circular frequency of OOP anisotropy field, used in the Tacchi model.
Methods
Gives frequencies for defined k (Dispersion relation).
GetGroupVelocity
([n])Gives (tangential) group velocities for defined k.
GetLifetime
([n])Gives lifetimes for defined k.
GetDecLen
([n])Give decay lengths for defined k.
GetDensityOfStates
([n])Give density of states for given mode.
GetBlochFunction
([n, Nf])Give Bloch function for given mode.
Calculate exchange length in meters from the parameter A.
See also
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 = SingleLayerNumeric(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()[0][0]*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, 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:
- n{0, 1, 2, …, N-1},
optional
Quantization number. The -1 value is not supported here. Default is 0.
- Nf
int
,optional
Number of frequency levels for the Bloch function.
- n{0, 1, 2, …, N-1},
- Returns:
- GetDecLen(n=0)#
Give decay lengths for defined k. Decay length is computed as lambda = v_g*tau. Output is given in m.
Warning
Works only when
kxi.shape[0] >= 2
.- Parameters:
- n{-1, 0, 1, 2, …, N-1},
optional
Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.
- n{-1, 0, 1, 2, …, N-1},
- Returns:
- declen
ndarray
decay length.
- declen
- GetDensityOfStates(n=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.
Warning
Works only when
kxi.shape[0] >= 2
.- Parameters:
- n{-1, 0, 1, 2, …, N-1},
optional
Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.
- n{-1, 0, 1, 2, …, N-1},
- Returns:
- dos
ndarray
(s/m) value proportional to density of states.
- dos
- GetDispersion()#
Gives frequencies for defined k (Dispersion relation). Based on the model in: https://doi.org/10.1103/PhysRevB.100.104406
The model formulates a system matrix and then numerically solves its eigenvalues and eigenvectors. The eigenvalues represent the dispersion relation (as the matrix is 2*N x 2*N it has 2*N eigenvalues). The eigen values represent N lowest spin-wave modes (N with negative and positive frequency). The eigenvectors represent the amplitude of the individual spin-wave modes and can be used to calculate spin-wave profile (see example NumericCalculationofDispersionModeProfiles.py). # ### Update example when it’s ready
The returned modes are sorted from low to high frequencies, omitting the negative-frequency modes.
- GetExchangeLen()#
Calculate exchange length in meters from the parameter A.
- GetGroupVelocity(n=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:
- n{-1, 0, 1, 2, …, N-1},
optional
Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.
- n{-1, 0, 1, 2, …, N-1},
- Returns:
- vg
ndarray
(m/s) tangential group velocity.
- vg
- GetLifetime(n=0)#
Gives lifetimes for defined k. Lifetime is computed as tau = (alpha*w*dw/dw0)^-1. The output is in s.
- Parameters:
- n{-1, 0, 1, 2, …, N-1},
optional
Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.
- n{-1, 0, 1, 2, …, N-1},
- Returns:
- lifetime
ndarray
lifetime.
- lifetime
- GetPartiallyPinnedKappa(n)#
Gives kappa from the transverse equation (in rad/m).
- Parameters:
- n
int
Quantization number.
- n
- property Aex#
Exchange stiffness constant (J/m).
- property Bext#
external field value (T)
- property KuOOP#
OOP uniaxial anisotropy constant (J/m^3).
- property Ms#
saturation magnetization (A/m)
- property N#
number of modes to calculate.
- property gamma#
gyromagnetic ratio (rad*Hz/T)