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
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.
- 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
floator 1Darray, 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. Other values than pi/2 multiples might give wrong results, as the model currently does not describe these situations.
- 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.
### 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]
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)- 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.
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.
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.
- 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.
- Returns:
- declen
ndarray (m ) 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.
- 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.
- 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.
- Returns:
- lifetime
ndarray (s ) lifetime.
- lifetime
- GetPartiallyPinnedKappa(n)#
Gives kappa from the transverse equation (in rad/m).
- Parameters:
- n
int Quantization number.
- n
- 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.
- 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).