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:
Bextfloat
  1. external magnetic field.

materialMaterial

Instance of Material describing the magnetic layer material. Its properties are saved as attributes, but this object is not.

dfloat
  1. layer thickness (in z direction).

kxifloat or ndarray, optional

(rad/m) k-vector (wavenumber), usually a vector.

thetafloat, optional

(rad) out of plane angle of Bext, pi/2 is totally in-plane magnetization.

phifloat or ndarray, optional

(rad) in-plane angle of kxi from Bext, pi/2 is DE geometry.

Kufloat, optional

(J/m^3) uniaxial anisotropy strength.

Ku2float, optional

(J/m^3) uniaxial anisotropy strength of the second layer.

Jblfloat, optional

(J/m^2) bilinear RKKY coupling parameter.

Jbqfloat, optional

(J/m^2) biquadratic RKKY coupling parameter.

sfloat, optional
  1. spacing layer thickness.

d2float or None

(m) thickness of the second magnetic layer, if None, same as d.

material2Material or None

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.

JblDynfloat or None

(J/m^2) dynamic bilinear RKKY coupling parameter, if None, same as Jbl.

JbqDynfloat or None

(J/m^2) dynamic biquadratic RKKY coupling parameter, if None, same as Jbq.

phiAnis1, phiAnis2float, optional

(rad) uniaxial anisotropy axis in-plane angle from kxi for both magnetic layers.

phiInit1, phiInit2float, optional

(rad) initial value of magnetization in-plane angle of the first and second layer, used for energy minimization.

Attributes:
[same as Parameters (except `material` and `material2`), plus these]
alphafloat

() Gilbert damping.

gammafloat

Gyromagnetic ratio (rad*Hz/T).

mu0dH0float
  1. inhomogeneous broadening.

w0float

(rad*Hz) parameter in Slavin-Kalinikos equation, w0 = MU0*gamma*Hext.

wMfloat

(rad*Hz) parameter in Slavin-Kalinikos equation, wM = MU0*gamma*Ms.

A, A2float

(m^2) parameter in Slavin-Kalinikos equation, A = Aex*2/(Ms**2*MU0).

Hani, Hani2float

(A/m) uniaxial anisotropy field of corresponding Ku, Hani = 2*Ku/material.Ms/MU0.

Ms, Ms2float

(A/m) saturation magnetization.

Methods

GetDispersion()

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.

GetExchangeLen()

Calculate exchange length in meters from the parameter A.

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:
n{0, 1}, optional

Quantization number. The -1 value is not supported here. Default is 0.

Nfint, optional

Number of frequency points for the Bloch function.

lifetimefloat, optional
  1. fixed lifetime to bypass its dispersion calculation.

Returns:
wndarray

(rad*Hz) frequency axis for the 2D Bloch function.

blochFuncndarray

() 2D Bloch function for given kxi and w.

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.

Returns:
declenndarray
  1. decay length.

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.

Returns:
dosndarray

(s/m) value proportional to density of states.

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.

Returns:
wVndarray

(rad*Hz) frequencies of the acoustic and optic spin-wave modes. Has a shape of (2, N), where N = kxi.shape[0].

vVndarray

Mode profiles of corresponding eigenfrequencies, given as Fourier coefficients for IP and OOP profiles. Has a shape of (4, 2, N), where N = kxi.shape[0].

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.

Parameters:
phis[float, float]

(rad) IP magnetization angles.

Returns:
Efloat
  1. energy density of the system.

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.

Parameters:
thetas[float, float]

(rad) OOP magnetization angles.

Returns:
Efloat
  1. energy density of the system.

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.

Returns:
vgndarray

(m/s) tangential group velocity.

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.

Returns:
lifetimendarray
  1. 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).

Returns:
phis[float, float]

(rad) equilibrium angles of magnetization.

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).