Визуализация спиновой динамики: моделируем волны намагниченности в ферромагнетиках на Python
В настоящей статье мы рассмотрим практические аспекты численного моделирования спиновой динамики и визуализируем волновые процессы эволюции вектора намагниченности средствами программной анимации.
Теоретическим фундаментом для описания поведения магнитных моментов служит уравнение Ландау — Лифшица — Гильберта (LLG):
Эффективное поле формируется суперпозицией отдельных физических вкладов, которые рассчитываются в узлах расчетной сетки:
Внешнее магнитное полеHext — задается в качестве граничных или начальных условий эксперимента.
Обменное поле
— обусловлено квантовомеханическим стремлением соседних спинов выстраиваться сонаправленно. В дискретной схеме оно выражается через оператор Лапласа (вторые пространственные производные по соседним узлам сетки).
Размагничивающее (дипольное) полеHd — находится из уравнений магнитостатики:
В вычислительном микромагнетизме его определяют либо прямым интегрированием по объему, либо с помощью алгоритмов быстрого преобразования Фурье (FFT) для периодических структур.
Магнитная анизотропия (кристаллографическая или анизотропия формы) — как правило, моделируется эффективным полем, зависящим от ориентации компонент вектора M.
N = 64 # число ячеек
dx = 5e-9 # шаг сетки
dt = 1e-12 # шаг по времени (1 пс)
steps = 800 # сколько шагов считать
save_every = 10 # сохранять каждый N‑й кадр для анимации
gamma = 2.211e5 # гиромагнитное отношение
alpha = 0.0 # затухание выключено (чистая прецессия)
A_ex = 0.0 # обмен выключен (для начала)
Ms = 8e5
H_ext = 4.0e4 # УВЕЛИЧЕННОЕ поле (4 Т) — чтобы вращение было видно
Инициализация: M = (1, 0, 0) везде
M = np.ones((N, 3)) * np.array([1.0, 0.0, 0.0])
center = N // 2
angle = 0.52 # ~30 градусов
M[center, 0] = np.cos(angle)
M[center, 1] = np.sin(angle)
norm = np.sqrt(np.sum(M**2, axis=1, keepdims=True))
M = M / norm
ani = FuncAnimation(fig, update, frames=len(frames),
init_func=init, blit=True, interval=40)
Сохранение в GIF (требуется imagemagick или pillow)
output_path = "spin_precession.gif"
try:
ani.save(output_path, writer="pillow", fps=15)
print(f"Анимация сохранена в {output_path}")
except Exception as e:
print(f"Не удалось сохранить GIF: {e}")
plt.show()
В результате получаем наглядную динамическую визуализацию:
Волна намагниченности в 1D
Стоит отметить, что в данном приближении модель упрощена: диссипация и обменное поле временно исключены, за счет чего наблюдается идеальная гармоническая прецессия вокруг вектора внешнего поля.
Теперь перейдем к более сложной постановке — моделированию процессов на двумерной плоскости (2D):
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import os
ani = FuncAnimation(fig, update, frames=len(frames),
init_func=init, blit=True, interval=40)
output_path = "spin_wave_2d.gif"
try:
ani.save(output_path, writer="pillow", fps=15)
print(f"Анимация сохранена в {output_path}")
except Exception as e:
print(f"Не удалось сохранить GIF: {e}")
plt.show()
Графический вывод работы скрипта демонстрирует двумерную картину распространения:
Волна на плоскости
На визуализации отчетливо прослеживается периодическое колебательное движение локальных векторов намагниченности.
При значительном увеличении коэффициента затухания (α = 0.5) система переходит в режим сильной диссипации — колебания практически мгновенно гаснут, не успевая завершить даже первый период:
Затухающие колебания
Если поднять величину внешнего магнитного поля до значения 1.0·107, динамика системы трансформируется следующим образом:
Магнитное поле 10е6
При значении Hext = 1.25·107 фронт возмущения начинает плавно и равномерно распространяться по всей расчетной области:
умеренное внешнее поле
Дальнейшее форсирование внешнего поля (до 4.0·107) приводит к резкому росту групповой скорости волн и возникновению выраженного нелинейного хаотического отклика:
распространение по всей поверхности вещества
Любопытно, что при переходе к значениям порядка 10·107 наблюдается кажущееся замедление фронта при сохранении сложной турбулентной структуры фазового пространства:
Ещё увеличиваем поле
При росте напряженности до 15·107 волновой режим вновь демонстрирует тенденцию к квазистационарной стабилизации:
стабилизирующиеся колебания
Однако экстремальные значения поля снова провоцируют развитие нелинейной неустойчивости:
Огромное поле
При введении высокого коэффициента диссипации (α ~ 50) даже сверхинтенсивные внешние поля (100·107) приводят лишь к крайне медленной диффузии магнитного возмущения:
увеличим сопротивление
Увеличение поля еще на порядок при сохранении высокого затухания формирует регулярную пространственную картину:
Красивое распространение волны
Заключение: В рамках данной работы построена математическая модель и реализован вычислительный алгоритм для анализа спиновой динамики и волновых процессов намагниченности в ферромагнитных средах. Проведен детальный параметрический анализ, продемонстрировавший чувствительность волнового режима к амплитуде внешнего поля и параметрам диссипации. Весь исходный код доступен для воспроизведения и дальнейших экспериментов.
Полученные результаты находятся в качественном согласии с теоретическими концепциями физики магнетизма и выводами профильных исследований по спиновой динамике в низкоразмерных магнитных структурах (Циберкин К. Б. и соавт.). Численный эксперимент наглядно подтверждает применимость конечно-разностной схемы с периодическими граничными условиями для 2D-моделирования спиновых волн.
Несмотря на то что микромагнетизм традиционно относится к сложным разделам теоретической физики, его фундаментальные механизмы могут быть успешно проиллюстрированы компактными численными методами.
Материал носит ознакомительный научно-популярный характер.
Автор делится результатами энтузиастского исследования и не претендует на статус профессионального физика-теоретика.
Если подобная физика встретится на школьном экзамене — система образования определенно выйдет на совершенно новый уровень сложности!
Библиографический список и рекомендуемая литература: