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:
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 static M, pi/2 is totally in-plane magnetization.

phifloat or ndarray, optional

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

wefffloat, 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!

dpfloat, optional

pinning parameter for 4 BC, ranges from 0 to inf, 0 means totally unpinned.

KuOOPfloat, 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)

Nint, 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.

Attributes:
[same as Parameters (except `material`), plus these]
Msfloat

saturation magnetization (A/m)

gammafloat

gyromagnetic ratio (rad*Hz/T)

Aexfloat

Exchange stiffness constant (J/m).

alphafloat

() Gilbert damping.

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

Afloat

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

wUfloat

(rad*Hz) circular frequency of OOP anisotropy field, used in the Tacchi model.

Methods

GetDispersion()

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.

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

Nfint, optional

Number of frequency levels for the Bloch function.

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, 2, …, N-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, 2, …, N-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). 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.

Returns:
wVndarray

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

vVndarray

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

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:
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, 2, …, N-1}, optional

Quantization number. If -1, data for all (positive) calculated modes are returned. Default is 0.

Returns:
lifetimendarray
  1. lifetime.

GetPartiallyPinnedKappa(n)#

Gives kappa from the transverse equation (in rad/m).

Parameters:
nint

Quantization number.

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)