[ Previous ] [ Home ] [ Next ]

Numerical Analysis and Innovative Simulation
Techniques for Designing Advanced MRAM

\(\newcommand{\footnotename}{footnote}\) \(\def \LWRfootnote {1}\) \(\newcommand {\footnote }[2][\LWRfootnote ]{{}^{\mathrm {#1}}}\) \(\newcommand {\footnotemark }[1][\LWRfootnote ]{{}^{\mathrm {#1}}}\) \(\let \LWRorighspace \hspace \) \(\renewcommand {\hspace }{\ifstar \LWRorighspace \LWRorighspace }\) \(\newcommand {\TextOrMath }[2]{#2}\) \(\newcommand {\mathnormal }[1]{{#1}}\) \(\newcommand \ensuremath [1]{#1}\) \(\newcommand {\LWRframebox }[2][]{\fbox {#2}} \newcommand {\framebox }[1][]{\LWRframebox } \) \(\newcommand {\setlength }[2]{}\) \(\newcommand {\addtolength }[2]{}\) \(\newcommand {\setcounter }[2]{}\) \(\newcommand {\addtocounter }[2]{}\) \(\newcommand {\arabic }[1]{}\) \(\newcommand {\number }[1]{}\) \(\newcommand {\noalign }[1]{\text {#1}\notag \\}\) \(\newcommand {\cline }[1]{}\) \(\newcommand {\directlua }[1]{\text {(directlua)}}\) \(\newcommand {\luatexdirectlua }[1]{\text {(directlua)}}\) \(\newcommand {\protect }{}\) \(\def \LWRabsorbnumber #1 {}\) \(\def \LWRabsorbquotenumber "#1 {}\) \(\newcommand {\LWRabsorboption }[1][]{}\) \(\newcommand {\LWRabsorbtwooptions }[1][]{\LWRabsorboption }\) \(\def \mathchar {\ifnextchar "\LWRabsorbquotenumber \LWRabsorbnumber }\) \(\def \mathcode #1={\mathchar }\) \(\let \delcode \mathcode \) \(\let \delimiter \mathchar \) \(\def \oe {\unicode {x0153}}\) \(\def \OE {\unicode {x0152}}\) \(\def \ae {\unicode {x00E6}}\) \(\def \AE {\unicode {x00C6}}\) \(\def \aa {\unicode {x00E5}}\) \(\def \AA {\unicode {x00C5}}\) \(\def \o {\unicode {x00F8}}\) \(\def \O {\unicode {x00D8}}\) \(\def \l {\unicode {x0142}}\) \(\def \L {\unicode {x0141}}\) \(\def \ss {\unicode {x00DF}}\) \(\def \SS {\unicode {x1E9E}}\) \(\def \dag {\unicode {x2020}}\) \(\def \ddag {\unicode {x2021}}\) \(\def \P {\unicode {x00B6}}\) \(\def \copyright {\unicode {x00A9}}\) \(\def \pounds {\unicode {x00A3}}\) \(\let \LWRref \ref \) \(\renewcommand {\ref }{\ifstar \LWRref \LWRref }\) \( \newcommand {\multicolumn }[3]{#3}\) \(\require {textcomp}\) \(\newcommand {\mathlarger }[1]{#1}\) \(\newcommand {\mathsmaller }[1]{#1}\) \(\newcommand {\intertext }[1]{\text {#1}\notag \\}\) \(\let \Hat \hat \) \(\let \Check \check \) \(\let \Tilde \tilde \) \(\let \Acute \acute \) \(\let \Grave \grave \) \(\let \Dot \dot \) \(\let \Ddot \ddot \) \(\let \Breve \breve \) \(\let \Bar \bar \) \(\let \Vec \vec \) \(\newcommand {\toprule }[1][]{\hline }\) \(\let \midrule \toprule \) \(\let \bottomrule \toprule \) \(\def \LWRbooktabscmidruleparen (#1)#2{}\) \(\newcommand {\LWRbooktabscmidrulenoparen }[1]{}\) \(\newcommand {\cmidrule }[1][]{\ifnextchar (\LWRbooktabscmidruleparen \LWRbooktabscmidrulenoparen }\) \(\newcommand {\morecmidrules }{}\) \(\newcommand {\specialrule }[3]{\hline }\) \(\newcommand {\addlinespace }[1][]{}\) \(\newcommand {\bm }[1]{\boldsymbol {#1}}\) \(\newcommand {\LWRsubmultirow }[2][]{#2}\) \(\newcommand {\LWRmultirow }[2][]{\LWRsubmultirow }\) \(\newcommand {\multirow }[2][]{\LWRmultirow }\) \(\newcommand {\mrowcell }{}\) \(\newcommand {\mcolrowcell }{}\) \(\newcommand {\STneed }[1]{}\) \(\newcommand {\tothe }[1]{^{#1}}\) \(\newcommand {\raiseto }[2]{{#2}^{#1}}\) \(\newcommand {\LWRsiunitxEND }{}\) \(\def \LWRsiunitxang #1;#2;#3;#4\LWRsiunitxEND {\ifblank {#1}{}{\num {#1}\degree }\ifblank {#2}{}{\num {#2}^{\unicode {x2032}}}\ifblank {#3}{}{\num {#3}^{\unicode {x2033}}}}\) \(\newcommand {\ang }[2][]{\LWRsiunitxang #2;;;\LWRsiunitxEND }\) \(\def \LWRsiunitxdistribunit {}\) \(\newcommand {\LWRsiunitxENDTWO }{}\) \(\def \LWRsiunitxprintdecimalsubtwo #1,#2,#3\LWRsiunitxENDTWO {\ifblank {#1}{0}{\mathrm {#1}}\ifblank {#2}{}{{\LWRsiunitxdecimal }\mathrm {#2}}}\) \(\def \LWRsiunitxprintdecimalsub #1.#2.#3\LWRsiunitxEND {\LWRsiunitxprintdecimalsubtwo #1,,\LWRsiunitxENDTWO \ifblank {#2}{}{{\LWRsiunitxdecimal }\LWRsiunitxprintdecimalsubtwo #2,,\LWRsiunitxENDTWO }}\) \(\newcommand {\LWRsiunitxprintdecimal }[1]{\LWRsiunitxprintdecimalsub #1...\LWRsiunitxEND }\) \(\def \LWRsiunitxnumplus #1+#2+#3\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxprintdecimal {#1}}{\ifblank {#1}{\LWRsiunitxprintdecimal {#2}}{\LWRsiunitxprintdecimal {#1}\unicode {x02B}\LWRsiunitxprintdecimal {#2}}}\LWRsiunitxdistribunit }\) \(\def \LWRsiunitxnumminus #1-#2-#3\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxnumplus #1+++\LWRsiunitxEND }{\ifblank {#1}{}{\LWRsiunitxprintdecimal {#1}}\unicode {x02212}\LWRsiunitxprintdecimal {#2}\LWRsiunitxdistribunit }}\) \(\def \LWRsiunitxnumpmmacro #1\pm #2\pm #3\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxnumminus #1---\LWRsiunitxEND }{\LWRsiunitxprintdecimal {#1}\unicode {x0B1}\LWRsiunitxprintdecimal {#2}\LWRsiunitxdistribunit }}\) \(\def \LWRsiunitxnumpm #1+-#2+-#3\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxnumpmmacro #1\pm \pm \pm \LWRsiunitxEND }{\LWRsiunitxprintdecimal {#1}\unicode {x0B1}\LWRsiunitxprintdecimal {#2}\LWRsiunitxdistribunit }}\) \(\newcommand {\LWRsiunitxnumscientific }[2]{\ifblank {#1}{}{\ifstrequal {#1}{-}{-}{\LWRsiunitxprintdecimal {#1}\times }}10^{\LWRsiunitxprintdecimal {#2}}\LWRsiunitxdistribunit }\) \(\def \LWRsiunitxnumD #1D#2D#3\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxnumpm #1+-+-\LWRsiunitxEND }{\mathrm {\LWRsiunitxnumscientific {#1}{#2}}}}\) \(\def \LWRsiunitxnumd #1d#2d#3\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxnumD #1DDD\LWRsiunitxEND }{\mathrm {\LWRsiunitxnumscientific {#1}{#2}}}}\) \(\def \LWRsiunitxnumE #1E#2E#3\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxnumd #1ddd\LWRsiunitxEND }{\mathrm {\LWRsiunitxnumscientific {#1}{#2}}}}\) \(\def \LWRsiunitxnume #1e#2e#3\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxnumE #1EEE\LWRsiunitxEND }{\mathrm {\LWRsiunitxnumscientific {#1}{#2}}}}\) \(\def \LWRsiunitxnumx #1x#2x#3x#4\LWRsiunitxEND {\ifblank {#2}{\LWRsiunitxnume #1eee\LWRsiunitxEND }{\ifblank {#3}{\LWRsiunitxnume #1eee\LWRsiunitxEND \times \LWRsiunitxnume #2eee\LWRsiunitxEND }{\LWRsiunitxnume #1eee\LWRsiunitxEND \times \LWRsiunitxnume #2eee\LWRsiunitxEND \times \LWRsiunitxnume #3eee\LWRsiunitxEND }}}\) \(\newcommand {\num }[2][]{\LWRsiunitxnumx #2xxxxx\LWRsiunitxEND }\) \(\newcommand {\si }[2][]{\mathrm {\gsubstitute {#2}{~}{\,}}}\) \(\def \LWRsiunitxSIopt #1[#2]#3{\def \LWRsiunitxdistribunit {\,\si {#3}}{#2}\num {#1}\def \LWRsiunitxdistribunit {}}\) \(\newcommand {\LWRsiunitxSI }[2]{\def \LWRsiunitxdistribunit {\,\si {#2}}\num {#1}\def \LWRsiunitxdistribunit {}}\) \(\newcommand {\SI }[2][]{\ifnextchar [{\LWRsiunitxSIopt {#2}}{\LWRsiunitxSI {#2}}}\) \(\newcommand {\numlist }[2][]{\text {#2}}\) \(\newcommand {\numrange }[3][]{\num {#2}\ \LWRsiunitxrangephrase \ \num {#3}}\) \(\newcommand {\SIlist }[3][]{\text {#2}\,\si {#3}}\) \(\newcommand {\SIrange }[4][]{\num {#2}\,#4\ \LWRsiunitxrangephrase \ \num {#3}\,#4}\) \(\newcommand {\tablenum }[2][]{\mathrm {#2}}\) \(\newcommand {\ampere }{\mathrm {A}}\) \(\newcommand {\candela }{\mathrm {cd}}\) \(\newcommand {\kelvin }{\mathrm {K}}\) \(\newcommand {\kilogram }{\mathrm {kg}}\) \(\newcommand {\metre }{\mathrm {m}}\) \(\newcommand {\mole }{\mathrm {mol}}\) \(\newcommand {\second }{\mathrm {s}}\) \(\newcommand {\becquerel }{\mathrm {Bq}}\) \(\newcommand {\degreeCelsius }{\unicode {x2103}}\) \(\newcommand {\coulomb }{\mathrm {C}}\) \(\newcommand {\farad }{\mathrm {F}}\) \(\newcommand {\gray }{\mathrm {Gy}}\) \(\newcommand {\hertz }{\mathrm {Hz}}\) \(\newcommand {\henry }{\mathrm {H}}\) \(\newcommand {\joule }{\mathrm {J}}\) \(\newcommand {\katal }{\mathrm {kat}}\) \(\newcommand {\lumen }{\mathrm {lm}}\) \(\newcommand {\lux }{\mathrm {lx}}\) \(\newcommand {\newton }{\mathrm {N}}\) \(\newcommand {\ohm }{\mathrm {\Omega }}\) \(\newcommand {\pascal }{\mathrm {Pa}}\) \(\newcommand {\radian }{\mathrm {rad}}\) \(\newcommand {\siemens }{\mathrm {S}}\) \(\newcommand {\sievert }{\mathrm {Sv}}\) \(\newcommand {\steradian }{\mathrm {sr}}\) \(\newcommand {\tesla }{\mathrm {T}}\) \(\newcommand {\volt }{\mathrm {V}}\) \(\newcommand {\watt }{\mathrm {W}}\) \(\newcommand {\weber }{\mathrm {Wb}}\) \(\newcommand {\day }{\mathrm {d}}\) \(\newcommand {\degree }{\mathrm {^\circ }}\) \(\newcommand {\hectare }{\mathrm {ha}}\) \(\newcommand {\hour }{\mathrm {h}}\) \(\newcommand {\litre }{\mathrm {l}}\) \(\newcommand {\liter }{\mathrm {L}}\) \(\newcommand {\arcminute }{^\prime }\) \(\newcommand {\minute }{\mathrm {min}}\) \(\newcommand {\arcsecond }{^{\prime \prime }}\) \(\newcommand {\tonne }{\mathrm {t}}\) \(\newcommand {\astronomicalunit }{au}\) \(\newcommand {\atomicmassunit }{u}\) \(\newcommand {\bohr }{\mathit {a}_0}\) \(\newcommand {\clight }{\mathit {c}_0}\) \(\newcommand {\dalton }{\mathrm {D}_\mathrm {a}}\) \(\newcommand {\electronmass }{\mathit {m}_{\mathrm {e}}}\) \(\newcommand {\electronvolt }{\mathrm {eV}}\) \(\newcommand {\elementarycharge }{\mathit {e}}\) \(\newcommand {\hartree }{\mathit {E}_{\mathrm {h}}}\) \(\newcommand {\planckbar }{\mathit {\unicode {x210F}}}\) \(\newcommand {\angstrom }{\mathrm {\unicode {x212B}}}\) \(\let \LWRorigbar \bar \) \(\newcommand {\bar }{\mathrm {bar}}\) \(\newcommand {\barn }{\mathrm {b}}\) \(\newcommand {\bel }{\mathrm {B}}\) \(\newcommand {\decibel }{\mathrm {dB}}\) \(\newcommand {\knot }{\mathrm {kn}}\) \(\newcommand {\mmHg }{\mathrm {mmHg}}\) \(\newcommand {\nauticalmile }{\mathrm {M}}\) \(\newcommand {\neper }{\mathrm {Np}}\) \(\newcommand {\yocto }{\mathrm {y}}\) \(\newcommand {\zepto }{\mathrm {z}}\) \(\newcommand {\atto }{\mathrm {a}}\) \(\newcommand {\femto }{\mathrm {f}}\) \(\newcommand {\pico }{\mathrm {p}}\) \(\newcommand {\nano }{\mathrm {n}}\) \(\newcommand {\micro }{\mathrm {\unicode {x00B5}}}\) \(\newcommand {\milli }{\mathrm {m}}\) \(\newcommand {\centi }{\mathrm {c}}\) \(\newcommand {\deci }{\mathrm {d}}\) \(\newcommand {\deca }{\mathrm {da}}\) \(\newcommand {\hecto }{\mathrm {h}}\) \(\newcommand {\kilo }{\mathrm {k}}\) \(\newcommand {\mega }{\mathrm {M}}\) \(\newcommand {\giga }{\mathrm {G}}\) \(\newcommand {\tera }{\mathrm {T}}\) \(\newcommand {\peta }{\mathrm {P}}\) \(\newcommand {\exa }{\mathrm {E}}\) \(\newcommand {\zetta }{\mathrm {Z}}\) \(\newcommand {\yotta }{\mathrm {Y}}\) \(\newcommand {\percent }{\mathrm {\%}}\) \(\newcommand {\meter }{\mathrm {m}}\) \(\newcommand {\metre }{\mathrm {m}}\) \(\newcommand {\gram }{\mathrm {g}}\) \(\newcommand {\kg }{\kilo \gram }\) \(\newcommand {\of }[1]{_{\mathrm {#1}}}\) \(\newcommand {\squared }{^2}\) \(\newcommand {\square }[1]{\mathrm {#1}^2}\) \(\newcommand {\cubed }{^3}\) \(\newcommand {\cubic }[1]{\mathrm {#1}^3}\) \(\newcommand {\per }{\,\mathrm {/}}\) \(\newcommand {\celsius }{\unicode {x2103}}\) \(\newcommand {\fg }{\femto \gram }\) \(\newcommand {\pg }{\pico \gram }\) \(\newcommand {\ng }{\nano \gram }\) \(\newcommand {\ug }{\micro \gram }\) \(\newcommand {\mg }{\milli \gram }\) \(\newcommand {\g }{\gram }\) \(\newcommand {\kg }{\kilo \gram }\) \(\newcommand {\amu }{\mathrm {u}}\) \(\newcommand {\pm }{\pico \metre }\) \(\newcommand {\nm }{\nano \metre }\) \(\newcommand {\um }{\micro \metre }\) \(\newcommand {\mm }{\milli \metre }\) \(\newcommand {\cm }{\centi \metre }\) \(\newcommand {\dm }{\deci \metre }\) \(\newcommand {\m }{\metre }\) \(\newcommand {\km }{\kilo \metre }\) \(\newcommand {\as }{\atto \second }\) \(\newcommand {\fs }{\femto \second }\) \(\newcommand {\ps }{\pico \second }\) \(\newcommand {\ns }{\nano \second }\) \(\newcommand {\us }{\micro \second }\) \(\newcommand {\ms }{\milli \second }\) \(\newcommand {\s }{\second }\) \(\newcommand {\fmol }{\femto \mol }\) \(\newcommand {\pmol }{\pico \mol }\) \(\newcommand {\nmol }{\nano \mol }\) \(\newcommand {\umol }{\micro \mol }\) \(\newcommand {\mmol }{\milli \mol }\) \(\newcommand {\mol }{\mol }\) \(\newcommand {\kmol }{\kilo \mol }\) \(\newcommand {\pA }{\pico \ampere }\) \(\newcommand {\nA }{\nano \ampere }\) \(\newcommand {\uA }{\micro \ampere }\) \(\newcommand {\mA }{\milli \ampere }\) \(\newcommand {\A }{\ampere }\) \(\newcommand {\kA }{\kilo \ampere }\) \(\newcommand {\ul }{\micro \litre }\) \(\newcommand {\ml }{\milli \litre }\) \(\newcommand {\l }{\litre }\) \(\newcommand {\hl }{\hecto \litre }\) \(\newcommand {\uL }{\micro \liter }\) \(\newcommand {\mL }{\milli \liter }\) \(\newcommand {\L }{\liter }\) \(\newcommand {\hL }{\hecto \liter }\) \(\newcommand {\mHz }{\milli \hertz }\) \(\newcommand {\Hz }{\hertz }\) \(\newcommand {\kHz }{\kilo \hertz }\) \(\newcommand {\MHz }{\mega \hertz }\) \(\newcommand {\GHz }{\giga \hertz }\) \(\newcommand {\THz }{\tera \hertz }\) \(\newcommand {\mN }{\milli \newton }\) \(\newcommand {\N }{\newton }\) \(\newcommand {\kN }{\kilo \newton }\) \(\newcommand {\MN }{\mega \newton }\) \(\newcommand {\Pa }{\pascal }\) \(\newcommand {\kPa }{\kilo \pascal }\) \(\newcommand {\MPa }{\mega \pascal }\) \(\newcommand {\GPa }{\giga \pascal }\) \(\newcommand {\mohm }{\milli \ohm }\) \(\newcommand {\kohm }{\kilo \ohm }\) \(\newcommand {\Mohm }{\mega \ohm }\) \(\newcommand {\pV }{\pico \volt }\) \(\newcommand {\nV }{\nano \volt }\) \(\newcommand {\uV }{\micro \volt }\) \(\newcommand {\mV }{\milli \volt }\) \(\newcommand {\V }{\volt }\) \(\newcommand {\kV }{\kilo \volt }\) \(\newcommand {\W }{\watt }\) \(\newcommand {\uW }{\micro \watt }\) \(\newcommand {\mW }{\milli \watt }\) \(\newcommand {\kW }{\kilo \watt }\) \(\newcommand {\MW }{\mega \watt }\) \(\newcommand {\GW }{\giga \watt }\) \(\newcommand {\J }{\joule }\) \(\newcommand {\uJ }{\micro \joule }\) \(\newcommand {\mJ }{\milli \joule }\) \(\newcommand {\kJ }{\kilo \joule }\) \(\newcommand {\eV }{\electronvolt }\) \(\newcommand {\meV }{\milli \electronvolt }\) \(\newcommand {\keV }{\kilo \electronvolt }\) \(\newcommand {\MeV }{\mega \electronvolt }\) \(\newcommand {\GeV }{\giga \electronvolt }\) \(\newcommand {\TeV }{\tera \electronvolt }\) \(\newcommand {\kWh }{\kilo \watt \hour }\) \(\newcommand {\F }{\farad }\) \(\newcommand {\fF }{\femto \farad }\) \(\newcommand {\pF }{\pico \farad }\) \(\newcommand {\K }{\mathrm {K}}\) \(\newcommand {\dB }{\mathrm {dB}}\) \(\newcommand {\kibi }{\mathrm {Ki}}\) \(\newcommand {\mebi }{\mathrm {Mi}}\) \(\newcommand {\gibi }{\mathrm {Gi}}\) \(\newcommand {\tebi }{\mathrm {Ti}}\) \(\newcommand {\pebi }{\mathrm {Pi}}\) \(\newcommand {\exbi }{\mathrm {Ei}}\) \(\newcommand {\zebi }{\mathrm {Zi}}\) \(\newcommand {\yobi }{\mathrm {Yi}}\) \(\let \unit \si \) \(\let \qty \SI \) \(\let \qtylist \SIlist \) \(\let \qtyrange \SIrange \) \(\let \numproduct \num \) \(\let \qtyproduct \SI \) \(\let \complexnum \num \) \(\newcommand {\complexqty }[3][]{(\complexnum {#2})\si {#3}}\) \(\require {mathtools}\) \(\newcommand {\vcentcolon }{\mathrel {\unicode {x2236}}}\) \(\newcommand {\approxcolon }{\approx \vcentcolon }\) \(\newcommand {\Approxcolon }{\approx \dblcolon }\) \(\newcommand {\simcolon }{\sim \vcentcolon }\) \(\newcommand {\Simcolon }{\sim \dblcolon }\) \(\newcommand {\dashcolon }{\mathrel {-}\vcentcolon }\) \(\newcommand {\Dashcolon }{\mathrel {-}\dblcolon }\) \(\newcommand {\colondash }{\vcentcolon \mathrel {-}}\) \(\newcommand {\Colondash }{\dblcolon \mathrel {-}}\) \(\newenvironment {crampedsubarray}[1]{}{}\) \(\newcommand {\smashoperator }[2][]{#2\limits }\) \(\newcommand {\SwapAboveDisplaySkip }{}\) \(\newcommand {\LaTeXunderbrace }[1]{\underbrace {#1}}\) \(\newcommand {\LaTeXoverbrace }[1]{\overbrace {#1}}\) \(\Newextarrow \xLongleftarrow {10,10}{0x21D0}\) \(\Newextarrow \xLongrightarrow {10,10}{0x21D2}\) \(\let \xlongleftarrow \xleftarrow \) \(\let \xlongrightarrow \xrightarrow \) \(\newcommand {\LWRmultlined }[1][]{\begin {multline*}}\) \(\newenvironment {multlined}[1][]{\LWRmultlined }{\end {multline*}}\) \(\let \LWRorigshoveleft \shoveleft \) \(\renewcommand {\shoveleft }[1][]{\LWRorigshoveleft }\) \(\let \LWRorigshoveright \shoveright \) \(\renewcommand {\shoveright }[1][]{\LWRorigshoveright }\) \(\newcommand {\shortintertext }[1]{\text {#1}\notag \\}\) \(\def \LWRsiunitxrangephrase {\TextOrMath { }{\ }\protect \mbox {to}\TextOrMath { }{\ }}\) \(\def \LWRsiunitxdecimal {.}\)

5.3 The Tangent-Plane Scheme

The tangent-plane scheme (TPS), introduced by Alouges  [135] and further developed by Abert et al.  [90] and Praetorius et al.  [160], reformulates the LLG equation to exploit its geometric structure. Rather than solving directly for \(\mathbf {m}_{n+1}\), the scheme solves for the velocity \(\mathbf {v} = \partial _t \mathbf {m}\) constrained to lie in the tangent plane at the current magnetization. This reformulation offers two key advantages: it transforms the nonlinear problem into a linear one and enforces the unit-sphere constraint to \(\mathcal {O}(\Delta t^2)\) via the tangent-plane projection, with exact restoration achieved through post-step renormalization.

5.3.1 Reformulation of the LLG Equation

The Gilbert form of the LLG Equation (3.10) is:

\begin{equation} \frac {\partial \mathbf {m}}{\partial t} = -\gamma _0 \mathbf {m} \times \mathbf {H}_\text {eff} + \alpha \mathbf {m} \times \frac {\partial \mathbf {m}}{\partial t}, \label {eq::TI_TPS_Gilbert} \end{equation}

where \(\mathbf {H}_\text {eff}\) is the effective field defined in Equation (3.19), can be rewritten by taking the cross product with \(\mathbf {m}\) and using the vector triple product identity. With \(\mathbf {v} = \partial _t \mathbf {m}\), one obtains:

\begin{equation} \alpha \mathbf {v} + \mathbf {m} \times \mathbf {v} = \gamma _0 \left ( \mathbf {H}_\text {eff} - (\mathbf {m} \cdot \mathbf {H}_\text {eff}) \mathbf {m} \right ). \label {eq::TI_TPS_velocity_form} \end{equation}

The RHS is the projection of \(\mathbf {H}_\text {eff}\) onto the tangent plane at \(\mathbf {m}\). Crucially, if \(\mathbf {v}\) satisfies the constraint \(\mathbf {v} \cdot \mathbf {m} = 0\), then the RHS automatically lies in the tangent plane, and the equation is consistent.

5.3.2 Weak Formulation

The finite-element discretization proceeds by multiplying Equation (5.22) by a test function \(\mathbf {w}\) and integrating over the domain \(\Omega \). In weak form:

\begin{equation} \int _\Omega \left ( \alpha \mathbf {v} + \mathbf {m} \times \mathbf {v} \right ) \cdot \mathbf {w} \, d\mathbf {x} = \gamma _0 \int _\Omega \mathbf {H}_\text {eff} \cdot \mathbf {w} \, d\mathbf {x}, \label {eq::TI_TPS_weak} \end{equation}

where the term \((\mathbf {m} \cdot \mathbf {H}_\text {eff}) \mathbf {m} \cdot \mathbf {w}\) vanishes when \(\mathbf {w}\) lies in the tangent space.

The effective field contributions are treated as follows. For the exchange field, integration by parts yields:

\begin{equation} \int _\Omega \mathbf {H}_\text {exch} \cdot \mathbf {w} \, d\mathbf {x} = -\frac {2A}{\mu _0 M_s} \int _\Omega \nabla \mathbf {m} : \nabla \mathbf {w} \, d\mathbf {x}, \label {eq::TI_TPS_exchange_weak} \end{equation}

where \(\nabla \mathbf {m}: \nabla \mathbf {w} = \sum _{i,j} \partial _j m_i \partial _j w_i\) denotes the Frobenius inner product, and homogeneous Neumann boundary conditions have been assumed. Other field contributions (external, anisotropy, demagnetization) enter as volume integrals against \(\mathbf {w}\).

5.3.3 Complete Weak Form with Spin-Transfer Torque

For simulations of current-induced magnetization dynamics, spin-transfer torque contributions must be incorporated. The spin-accumulation \(\mathbf {S}\), computed from the drift-diffusion equations, enters via the torque expression derived in Section 6.1. The complete weak form reads:

\begin{align} \int _{\Omega _m} \bigl ( \alpha \mathbf {v} + \mathbf {m}^n \times \mathbf {v} \bigr ) \cdot \mathbf {w} \, \mathrm {d}\mathbf {x} &= \frac {2A\gamma _0}{\mu _0 M_s} \int _{\Omega _m} \nabla \mathbf {m}^n : \nabla \mathbf {w} \, \mathrm {d}\mathbf {x} \nonumber \\ &\quad - \gamma _0 \int _{\Omega _m} \bigl ( \mathbf {H}_\text {ext} + \mathbf {H}_\text {ani}(\mathbf {m}^n) + \mathbf {H}_\text {dem}(\mathbf {m}^n) \bigr ) \cdot \mathbf {w} \, \mathrm {d}\mathbf {x} \nonumber \\ &\quad + \frac {D_e}{M_s} \int _{\Omega _m} \left ( \frac {\mathbf {S}^n}{\lambda _J^2} + \frac {\mathbf {m}^n \times \mathbf {S}^n}{\lambda _\varphi ^2} \right ) \cdot \mathbf {w} \, \mathrm {d}\mathbf {x}, \label {eq::TI_full_weak_STT} \end{align} where \(D_e\) is the electron diffusion coefficient, and \(\lambda _J\), \(\lambda _\varphi \) are the exchange and dephasing lengths characterizing the spin-transfer torque. The integrals are evaluated only over the magnetic subdomain \(\Omega _m\).

5.3.4 Time Discretization: The \(\theta \)-Method

A \(\theta \)-method time discretization treats the effective field at a weighted average of the current and next time levels:

\begin{equation} \mathbf {H}_\text {eff}^\theta = (1 - \theta ) \mathbf {H}_\text {eff}(\mathbf {m}^n) + \theta \mathbf {H}_\text {eff}(\mathbf {m}^{n+1}). \label {eq::TI_TPS_theta_field} \end{equation}

For the exchange field, which depends linearly on \(\mathbf {m}\), this introduces implicit dependence on \(\mathbf {m}^{n+1} = \mathbf {m}^n + \Delta t \mathbf {v}\). The key observation is that:

\begin{equation} \nabla \mathbf {m}^{n+1} = \nabla \mathbf {m}^n + \Delta t \nabla \mathbf {v}. \label {eq::TI_TPS_gradient_update} \end{equation}

Defining the \(\theta \)-weighted magnetization as \(\mathbf {m}^\theta = (1 - \theta )\mathbf {m}^n + \theta \mathbf {m}^{n+1} = \mathbf {m}^n + \theta \Delta t\, \mathbf {v}\), the exchange contribution becomes:

\begin{equation} -\frac {2A \gamma _0}{\mu _0 M_s} \int _\Omega \nabla \mathbf {m}^\theta : \nabla \mathbf {w} \, d\mathbf {x} = -\frac {2A \gamma _0}{\mu _0 M_s} \int _\Omega \nabla \mathbf {m}^n : \nabla \mathbf {w} \, d\mathbf {x} - \theta \Delta t \frac {2A \gamma _0}{\mu _0 M_s} \int _\Omega \nabla \mathbf {v} : \nabla \mathbf {w} \, d\mathbf {x}. \label {eq::TI_TPS_exchange_theta} \end{equation}

In the full weak formulation (Equation (5.25)), the first term is known from \(\mathbf {m}^n\) and moves to the right-hand side, while the second term depends on the unknown \(\mathbf {v}\) and contributes to the left-hand side.

5.3.5 The Saddle-Point System

Enforcement of the tangent-plane constraint \(\mathbf {v} \cdot \mathbf {m} = 0\) via Lagrange multipliers leads to a block-structured linear system. Let \(\mathbf {v}_h\) and \(\lambda _h\) denote the finite-element approximations to the velocity and Lagrange multiplier, expanded in the basis \(\{\boldsymbol {\phi }_i\}\) defined in Section 4.2.2:

\begin{equation} \mathbf {v}_h = \sum _i v_i \boldsymbol {\phi }_i, \quad \lambda _h = \sum _i \lambda _i \phi _i, \label {eq::TI_TPS_FE_expansion} \end{equation}

where \(\phi _i\) are scalar basis functions (with \(\boldsymbol {\phi }_i\) the corresponding vector-valued functions). The constraint is imposed weakly:

\begin{equation} \int _\Omega \mathbf {v}_h \cdot \mathbf {m}^n \, \psi \, d\mathbf {x} = 0 \quad \forall \psi \in V_h, \label {eq::TI_TPS_constraint_weak} \end{equation}

where \(V_h\) is the scalar finite-element space.

Assembling the discrete equations yields the block system:

\begin{equation} \begin{pmatrix} A & B^T \\ B & 0 \end {pmatrix} \begin{pmatrix} \mathbf {v} \\ \boldsymbol {\lambda } \end {pmatrix} = \begin{pmatrix} \mathbf {f} \\ \mathbf {0} \end {pmatrix}, \label {eq::TI_TPS_saddle_point} \end{equation}

where:

  • (i) \(A\) is the \((1,1)\)-block with entries \(A_{ij} = \int _\Omega (\alpha \boldsymbol {\phi }_j + \mathbf {m}^n \times \boldsymbol {\phi }_j) \cdot \boldsymbol {\phi }_i \, d\mathbf {x} + \theta \Delta t K_{ij}\),

  • (ii) \(K_{ij} = \frac {2A\gamma _0}{\mu _0 M_s} \int _\Omega \nabla \boldsymbol {\phi }_j : \nabla \boldsymbol {\phi }_i \, d\mathbf {x}\) is the exchange stiffness matrix,

  • (iii) \(B\) is the constraint matrix with entries \(B_{ij} = \int _\Omega (\mathbf {m}^n \cdot \boldsymbol {\phi }_j) \phi _i \, d\mathbf {x}\),

  • (iv) \(\mathbf {f}\) is the RHS incorporating explicit field contributions.

The zero block in the \((2,2)\) position renders the overall system indefinite, giving rise to a saddle-point problem  [163]: the solution corresponds to a minimum with respect to \(\mathbf {v}\) and a maximum with respect to \(\boldsymbol {\lambda }\).

The \((1,1)\)-block \(A\) has the structure:

\begin{equation} A = \alpha M + [\mathbf {m}^n]_\times + \theta \Delta t K, \label {eq::TI_TPS_A_structure} \end{equation}

where \(M\) is the mass matrix, \([\mathbf {m}^n]_\times \) is the skew-symmetric matrix representing the cross product with \(\mathbf {m}^n\), and \(K\) is the stiffness matrix (see Figure 5.3). In addition to the indefiniteness of the overall saddle-point structure, the skew-symmetric contribution renders \(A\) itself non-symmetric, necessitating GMRES  [164] or other Krylov methods for iterative solution.
The linear algebra routines are provided by the MFEM library  [144, 145].

5.3.6 Constraint Enforcement and Magnetization Update

The tangent-plane constraint \(\mathbf {v} \cdot \mathbf {m}^n = 0\) is enforced via Lagrange multipliers by solving the full saddle-point system (5.31). This yields a velocity \(\mathbf {v}\) that satisfies the constraint in the finite-element sense, ensuring that the magnetization update remains tangent to the unit sphere.

After solving for the velocity \(\mathbf {v}\), the magnetization is updated:

\begin{equation} \mathbf {m}^{n+1} = \mathbf {m}^n + \Delta t \mathbf {v}. \label {eq::TI_TPS_update} \end{equation}

Even with exact tangent-plane enforcement, this first-order update does not preserve \(|\mathbf {m}| = 1\) exactly and therefore the deviation is \(\mathcal {O}(\Delta t^2)\) (as shown in Section 5.1.2).

(-tikz- diagram)

Figure 5.3: Block structure of the tangent-plane scheme saddle-point system corresponding to (5.31). The \((1,1)\)-block \(A\) combines the damping, precession, and implicit exchange terms. The off-diagonal blocks \(B\) and \(B^T\) enforce the tangent-plane constraint \(\mathbf {v} \cdot \mathbf {m} = 0\), while the solution vector contains both the velocity \(\mathbf {v}\) and Lagrange multipliers \(\boldsymbol {\lambda }\).

Renormalization is therefore applied:

\begin{equation} \mathbf {m}^{n+1} \leftarrow \frac {\mathbf {m}^{n+1}}{|\mathbf {m}^{n+1}|}. \label {eq::TI_TPS_renormalize} \end{equation}