Object-Oriented Micromagnetic Framework

2D Landau-Lifshitz-Gilbert Vector Lattice Simulator

Explore interactive spin dynamics, magnetic skyrmion nucleation, domain wall propagation, and real-time polar hysteresis loops ($M_x$ vs $M_y$) powered by in-browser numerical differential solvers.

Grid Resolution
30 × 20 (600 Spins)
Topology Charge (Q)
0.000
Avg Magnetization |M|
0.998
Exchange Energy
12.4 pJ/m

2D Micromagnetic Vector Field

Precession Engine
H_ext: (0.00, 0.00) T | Mode: Apply Field
In-Plane Spin Angle θ:
-π to +π
Interactive Cursor Tool
Magnetic Topology Presets
External Field ($H_{\text{ext}}$)
Field Magnitude ($|H|$) 0.00 T
Field Angle ($\phi$)
Material Constants
Gilbert Damping ($\alpha$) 0.10
Exchange Stiffness ($A$) 1.00
Uniaxial Anisotropy ($K_u$) 0.20

Polar Hysteresis ($M_x$ vs $M_y$)

Damping Dissipation ($\frac{dE}{dt}$)

Micromagnetic Diagnostics

  • $\langle M_x \rangle$ Component: +0.998
  • $\langle M_y \rangle$ Component: +0.012
  • $\langle M_z \rangle$ (Out-of-Plane): +0.000
  • Precession Frequency: 28.0 GHz/T
  • Numerical Solver: Heun-RK2 Predictor
  • Simulation Clock: 0.00 ps

Landau-Lifshitz-Gilbert Equation & Energy Functional

The dynamical evolution of continuous magnetic media is governed by the phenomenological Landau-Lifshitz-Gilbert (LLG) differential equation, describing gyromagnetic precession alongside phenomenological Gilbert damping towards local effective field minima:

$$\frac{\partial \mathbf{m}}{\partial t} = -\gamma_0 \left( \mathbf{m} \times \mathbf{H}_{\text{eff}} \right) + \alpha \left( \mathbf{m} \times \frac{\partial \mathbf{m}}{\partial t} \right)$$

Effective Field $\mathbf{H}_{\text{eff}}$

The effective magnetic field is the functional derivative of total Gibbs free energy: $\mathbf{H}_{\text{eff}} = -\frac{1}{\mu_0 M_s} \frac{\delta \mathcal{E}}{\delta \mathbf{m}}$, accounting for Heisenberg exchange, magnetocrystalline anisotropy, demagnetization dipolar tensors, and external Zeeman excitation.

🌀

Topological Skyrmion Charge

The discrete winding number $Q = \frac{1}{4\pi} \int \mathbf{m} \cdot \left( \frac{\partial \mathbf{m}}{\partial x} \times \frac{\partial \mathbf{m}}{\partial y} \right) dx dy$ characterizes protected chiral skyrmions ($Q = \pm 1$), which resist thermal destruction in high-density racetrack memory devices.

📉

Energy Dissipation

The rate of magnetic energy loss through spin relaxation is quadratic in the cross-product torque: $\frac{d\mathcal{E}}{dt} = -\frac{\alpha \gamma_0}{1+\alpha^2} \mu_0 M_s \int |\mathbf{m} \times \mathbf{H}_{\text{eff}}|^2 dV \le 0$, driving the lattice toward energetic ground states.

OOMMF Core vs. Client-Side WebGL/Canvas Architecture

The Object-Oriented Micromagnetic Framework (developed by NIST) provides extensible C++ core classes (Oxs — OOMMF eXtensible Solver). This web implementation provides an ultra-fast in-browser playground for testing micromagnetic problem specifications before running heavy multi-GPU cluster simulations.

Oxs_EulerEvolve / RK4

Adaptive step-size Runge-Kutta Cash-Karp and Heun integrators maintain continuous normalization condition $|\mathbf{m}_i| = 1.0$ at every sub-picosecond timestep.

FFT Demagnetization

Long-range dipolar field computation is accelerated via 2D/3D Convolution theorem using discrete demagnetizing tensor kernels $N_{xx}, N_{yy}, N_{zz}$.

Zero-Allocation Loop

The in-browser JavaScript engine operates with zero heap allocations during the 60 FPS animation loop (0B GC pressure), preserving consistent sub-millisecond render frames.

Live MIF2.1 (Micromagnetic Input Format) Generator

Generate ready-to-run OOMMF batch configuration files directly from your interactive canvas parameters:

# MIF 2.1 script generated by OOMMF Web Visualizer # Canonical source: https://jirnyak.github.io/oommf/ SetOptions { basename sim_oommf_2d scalar_output_format "%.12g" } Specify Oxs_BoxAtlas:atlas { xrange {0 300e-9} yrange {0 200e-9} zrange {0 10e-9} } Specify Oxs_RectangularMesh:mesh { cellsize {10e-9 10e-9 10e-9} atlas :atlas } Specify Oxs_UniformExchange { A 13e-12 } Specify Oxs_UniaxialAnisotropy { K1 500e3 axis {0 0 1} } Specify Oxs_UZeeman [subst { Hrange { { 0 0 0 0.1 0 0 10 } } }] Specify Oxs_RungeKuttaEvolve:evolver { alpha 0.10 gamma_G 2.211e5 } Specify Oxs_TimeDriver { evolver :evolver stopping_time 1e-9 stage_count 1 mesh :mesh Ms 800e3 m0 { 1 0 0 } }