Introduction
In certain systems that exhibit stiffness or known stable states we can omit computing the equilibrium and compute the oscillation modes directly thanks to the linearisation procedure.
Short derivation
Here we assume a 2-layer FM system that is stable along \(z\) axis with \(m_z = \pm 1\).
We start out with the effective field:
where \(t\) is the thickness, \(\mathrm{M}_\mathrm{s}\) is the magnetisation saturation and \(\mathcal{F}\) is the energy expression. For details on how to construct \(F\) you can check out Smit-Beljers model description. Index \(j\) denotes the layer.
The stable oscillation LLG form is given by:
In the linearisation procedure for stable \(z\) axis we need to assume that \(m_x << 1\) and \(m_y << 1\), meaning that non \(z\) components experience small variation. In effect, this is a picture of a tiny conical oscillation about the \(z\)-axis. This small precession assumption allows us to drop second order approximations later from expanding \(\mathbf{m}_j\).
Therefore, we linearise both \(\mathbf{m}_j\) and \(\mathbf{H}_j\) as follows:
and
and we have
with \(s = \pm 1\).
To expand the \(\mathrm{d}_t \mathbf{m}_j\) we can compute the Jacobian matrix. So, for a single layer, again, we have, using a differential of a cross product rule at equilibrium:
We can define the corresponding Jacobian operator with the help of 3x3 \(\mathcal{E}(x)\) matrix which means "cross with x" and later substitutions which cause the higher olders to be neglected.
so when we do
it gives us the expression \((3)\) in matrix form. In practice, we compute, per each layer, the RHS of the above LLG equation (\((2)\)), and create a Jacobian matrix from that RHS side, component-wise:
which in fact is a 6x6 matrix because \(f_1\) and \(f_2\) are expanded per each of 3 cross product components. To make that matrix follow the linearisation approximations we the following subsitutions: \(m_{x, i} = 0, m_{y, i}= 0\). This causes the entries of \(\mathcal{J}\) non-dependent solely on \(m_z\) vanish (the entries, not the corresponding rows and columns). Crucially, field terms in \(\mathbf{H}_1\) depend on both \(\mathbf{m}_1\) and \(\mathbf{m}_2\) due to presence of coupling terms.
The substitution allows us to drop the rank of the matrix \(\mathcal{J}\) from 6 to 4, because 3rd and 6th row and column will disappear since the \(z\) component of \(m \times H\) cross product does not contain dependency on \(m_z\) (due to the nature of said cross product), hence they surely vanish. This new matrix we call \(\mathcal{J}_0\).
Up to the first order, we make the following substiution: \(\mathrm{d}_t \mathbf{m} = i \omega \mathbf{m}\), hence after collecting terms with:
where \(\mathbf{m}\) contains the leftover \(x, y\) components of \(m\). Finally, we substute \(m_z \pm 1\) depending on the state in \(J_0\), leading to fully determined matrix. In \((7)\) we applied the operator \((6)\) to \(\mathbf{m}\). The only thing left is to compute the eigenvalues of the characteristic matrix \(\mathcal{C}\) which would be the frequencies of the system.
TL;DR
Steps we do in code:
- Magnetisation vector of all layers is defined as \(\mathbf{M} = (m_{x,1}, m_{y,1}, m_{z,1}, m_{x,2}, m_{y,2}, m_{z,2})^T\)
- We compute the effective field per layer as: $$ \mathbf{H}i = -\nabla{\mathbf{m}_i} \mathcal{F}_i $$
- LLG given by (note how the fields will depend on entire \(\mathbf{M}\), not just its layers \(m_i\)): $$ \frac{d\mathbf{m}}{dt} = -\mu_0 \gamma \begin{pmatrix} \mathbf{m}_1 \times \mathbf{H}_1(\mathbf{M}) \ \mathbf{m}_2 \times \mathbf{H}_2(\mathbf{M}) \end{pmatrix} = \mathbf{T}(\mathbf{M}) $$
- We take Jacobian \(\mathcal{J} = \partial \mathbf{T}/\partial \mathbf{M}\)
- We substitute \(m_{i, x} = m_{i, y} = 0\) and \(m_{i, z} = \pm 1\) in \(\mathcal{J}\) to make \(\mathcal{J}_0\)
- We drop columns and rows corresponding to \(m_z\) component (it's not moving and it's zero). This is due first order approximation \(\delta m_{z,i} = 0\)
- Characteristic equation: \(\mathcal{C} = i\omega I - \mathcal{J}_0\)
- Compute the determinant