SpinWaveToolkit.DoubleLayerNumeric
#
- class SpinWaveToolkit.DoubleLayerNumeric(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, Ku=0, Ku2=0, Jbl=0, Jbq=0, s=0, d2=None, material2=None, JblDyn=None, JbqDyn=None, phiAnis1=1.5707963267948966, phiAnis2=1.5707963267948966, phiInit1=1.5707963267948966, phiInit2=-1.5707963267948966)#
Compute spin wave characteristic in dependance to k-vector (wavenumber) such as frequency, group velocity, lifetime and propagation length.
The dispersion model uses the approach of Gallardo et al., see: https://doi.org/10.1103/PhysRevApplied.12.034012
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 of Bext, pi/2 is totally in-plane magnetization.
- phi
float
orndarray
,optional
(rad) in-plane angle of kxi from Bext, pi/2 is DE geometry.
- Ku
float
,optional
(J/m^3) uniaxial anisotropy strength.
- Ku2
float
,optional
(J/m^3) uniaxial anisotropy strength of the second layer.
- Jbl
float
,optional
(J/m^2) bilinear RKKY coupling parameter.
- Jbq
float
,optional
(J/m^2) biquadratic RKKY coupling parameter.
- s
float
,optional
spacing layer thickness.
- d2
float
orNone
(m) thickness of the second magnetic layer, if None, same as d.
- material2
Material
orNone
instance of Material describing the second magnetic layer, if None, material parameter is used instead. Its properties are saved as attributes, but this object is not.
- JblDyn
float
orNone
(J/m^2) dynamic bilinear RKKY coupling parameter, if None, same as Jbl.
- JbqDyn
float
orNone
(J/m^2) dynamic biquadratic RKKY coupling parameter, if None, same as Jbq.
- phiAnis1, phiAnis2
float
,optional
(rad) uniaxial anisotropy axis in-plane angle from kxi for both magnetic layers.
- phiInit1, phiInit2
float
,optional
(rad) initial value of magnetization in-plane angle of the first and second layer, used for energy minimization.
- Bext
- Attributes:
- [same as Parameters (except `material` and `material2`), plus these]
- alpha
float
() Gilbert damping.
gamma
float
Gyromagnetic ratio (rad*Hz/T).
- 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, A2
float
(m^2) parameter in Slavin-Kalinikos equation,
A = Aex*2/(Ms**2*MU0)
.- Hani, Hani2
float
(A/m) uniaxial anisotropy field of corresponding Ku,
Hani = 2*Ku/material.Ms/MU0
.- Ms, Ms2
float
(A/m) saturation magnetization.
Methods
Gives frequencies for defined k (Dispersion relation).
GetPhis
()Gives angles of magnetization in both SAF layers.
GetFreeEnergyIP
(phis)Gives overall energy (density) of SAF system.
GetFreeEnergyOOP
(thetas)Gives overall energy (density) of the SAF system.
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, lifeTime])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 acoustic mode in a 30 nm thick NiFe (Permalloy) bilayer.
kxi = np.linspace(1e-6, 150e6, 150) PyChar = DoubleLayerNumeric(Bext=0, material=SWT.NiFe, d=30e-9, kxi=kxi, theta=np.pi/2, Ku= ) 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, lifeTime=None)#
Give Bloch function for given mode. Bloch function is calculated with margin of 10% of the lowest and the highest frequency (including Gilbert broadening). As there is problems with lifetime calculation for the double layers, you can set fixed one as input parameter.
- Parameters:
- 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},
optional
Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.
- n{-1, 0, 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},
optional
Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.
- n{-1, 0, 1},
- Returns:
- dos
ndarray
(s/m) value proportional to density of states.
- dos
- GetDispersion()#
Gives frequencies for defined k (Dispersion relation). The returned value is in the rad*Hz.
The model formulates a system matrix and then numerically solves its eigenvalues and eigenvectors. The eigenvalues represent the dispersion relation (as the matrix is 4x4 it has 4 eigenvalues). The eigen values represent the acoustic and optic spin-wave modes (each 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).
The returned modes are sorted from low (acoustic) to high (optic) frequencies, omitting the negative-frequency modes.
- GetExchangeLen()#
Calculate exchange length in meters from the parameter A.
- GetFreeEnergyIP(phis)#
Gives overall energy (density) of SAF system. The returned value is in joules.
This function is used during fidning of the angles of magnetization. Only works, when the out-of-plane tilt is not expected. Function does not minimize the OOP angles, just assumes completely in-plane magnetization.
- GetFreeEnergyOOP(thetas)#
Gives overall energy (density) of the SAF system. The returned value is in joules.
This function is used during fidning of the angles of magnetization. This function assumes fixed in-plane angle of the magnetization.
- 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},
optional
Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.
- n{-1, 0, 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},
optional
Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.
- n{-1, 0, 1},
- Returns:
- lifetime
ndarray
lifetime.
- lifetime
- GetPhis()#
Gives angles of magnetization in both SAF layers. The returned value is in rad.
Function finds the energy minimum, assuming completely in-plane magnetization. If there are problems with energy minimalization I recomend to try different methods (but Nelder-Mead seems to work in most scenarios).
- property Aex#
Exchange stiffness constant (J/m).
- property Aex2#
Exchange stiffness constant (J/m) of the second layer.
- property Bext#
External field value (T).
- property Ku#
Uniaxial anisotropy strength (J/m^3).
- property Ku2#
Uniaxial anisotropy strength (J/m^3).
- property Ms#
Saturation magnetization (A/m).
- property Ms2#
Saturation magnetization (A/m) of the second layer.
- property gamma#
Gyromagnetic ratio (rad*Hz/T).