{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# マグノン\n", "\n", "(初版:2020年3月、更新:2023年2月21日) \n", "\n", "スピン波は強磁性体などの秩序状態にあるスピン系において発生する。\n", "スピン波を量子化したものがマグノンである。\n", "\n", "## スピン波の分散関係\n", "\n", "一次元ハイゼンベルグモデルから、以下のようなスピン波の分散関係が求められる。\n", "\n", "###  $\\displaystyle{\\omega = \\frac{4JS}{\\hbar}[1-\\cos (qa)]}$ \n", "\n", "ここで、 \n", "$S$ : スピン、$J$ : 交換積分、$a$ : 格子定数、$q$ : 波数、$\\omega$ : 角周波数 \n", "である。\n", "\n", "これをJuliaでかいてみる。 \n", "\n", "gifにした時に、角周波数 $\\omega$ [rad/s] より周波数 $f$ [Hz] の方が分かりやすいので、$\\omega \\to f$ に変える。 \n", "また、波数も $\\displaystyle{q \\to q\\frac{2\\pi}{a}}$ に変える。 \n", "周波数の最大値を 1 Hz になるように設定すると分散関係は\n", "###  $\\displaystyle{f = \\frac{1}{2}\\left[ 1-\\cos \\left( 2\\pi q \\right) \\right]}$ \n", "となる。これをプロットすると以下のようになる。" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "using Plots\n", "using Plots.PlotMeasures\n", "using LaTeXStrings" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qvec = collect(0:0.01:0.5) # qのArray\n", "wvec = @. 0.5*(1-cos(2π*qvec)) # ωのArray\n", "plot(qvec, wvec, legend=false, xlabel=L\"q\", ylabel=L\"ω\", size=(300,300))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## スピン波のアニメーション \n", "\n", "波数を決めて、そのときのスピン波の様子のgif動画を作る。 \n", "動画作成には下記URLを参考にした。 \n", "[Qiita: JuliaでグラフのGIFアニメを作ってみた](https://qiita.com/MTNakata/items/0418ae3493a26ac44603) \n", "\n", "教科書などでは円錐状の回転運動としてスピン波の様子が描かれているが、簡単に描くため、2Dで左右に首を振るような形にした(真横から見ているイメージ)。 \n", "\n", "これらを踏まえて作成したgif動画は以下になる。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "main1 (generic function with 1 method)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function main1(a, qval, num)\n", " \n", " fval = 0.5*(1-cos(2π*qval)) # Hzだとωよりfが良いので変えとく。\n", " xvec1 = a.*collect(0:1:num);\n", " xvec2 = a.*collect(0:0.1:num);\n", " yvec1 = zeros(length(xvec1)) .+ 1.0;\n", " arrowyvec1 = ones(length(xvec1));\n", "\n", " flamenum = Int64(round(10/fval))\n", " println(\"T = \", round(100/fval)/100, \" sec, f = \", round(fval*100)/100, \" Hz, flame_num = \", flamenum)\n", " anim = Animation()\n", " \n", " for t = range(0, 1/fval*((flamenum-1)/flamenum), length = flamenum)\n", " φvec1 = @. a*0.5*sin(xvec1*(qval*2π/a) + 2π*fval*t)\n", " φvec2 = @. 0.5*sin(xvec2*(qval*2π/a) + 2π*fval*t)\n", " plt = scatter(xvec1, yvec1, legend=false, ylims=[-0.5,2.5], xlims=[xvec1[begin], xvec1[end]], size=(800,200))\n", " plt = quiver!(xvec1, yvec1, quiver = (φvec1, arrowyvec1))\n", " plt = plot!(xvec2, φvec2)\n", " frame(anim, plt)\n", " end\n", "\n", " return gif(anim, \"magnon.gif\", fps = 10)\n", "end" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T = 1.0 sec, f = 1.0 Hz, flame_num = 10\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to D:\\Dropbox\\Python_Julia\\Julia\\教育用\\magnon.gif\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "Plots.AnimatedGif(\"D:\\\\Dropbox\\\\Python_Julia\\\\Julia\\\\教育用\\\\magnon.gif\")" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 1; # 格子定数。何でも良い。\n", "num = 50; # 表示するスピンの数\n", "qval = 1/2; # 波数\n", "\n", "main1(a, qval, num)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T = 1.11 sec, f = 0.9 Hz, flame_num = 11\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ] }, { "data": { "text/html": [ "" ], "text/plain": [ "Plots.AnimatedGif(\"D:\\\\Dropbox\\\\Python_Julia\\\\Julia\\\\教育用\\\\magnon.gif\")" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 1;\n", "num = 50;\n", "qval = 2/5;\n", "\n", "main1(a, qval, num)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T = 1.53 sec, f = 0.65 Hz, flame_num = 15\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ] }, { "data": { "text/html": [ "" ], "text/plain": [ "Plots.AnimatedGif(\"D:\\\\Dropbox\\\\Python_Julia\\\\Julia\\\\教育用\\\\magnon.gif\")" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 1;\n", "num = 50;\n", "qval = 3/10\n", "\n", "main1(a, qval, num)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T = 2.89 sec, f = 0.35 Hz, flame_num = 29\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ] }, { "data": { "text/html": [ "" ], "text/plain": [ "Plots.AnimatedGif(\"D:\\\\Dropbox\\\\Python_Julia\\\\Julia\\\\教育用\\\\magnon.gif\")" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 1;\n", "num = 50;\n", "qval = 1/5\n", "\n", "main1(a, qval, num)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T = 10.47 sec, f = 0.1 Hz, flame_num = 105\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ ] }, { "data": { "text/html": [ "" ], "text/plain": [ "Plots.AnimatedGif(\"D:\\\\Dropbox\\\\Python_Julia\\\\Julia\\\\教育用\\\\magnon.gif\")" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 1;\n", "num = 50;\n", "qval = 1/10\n", "\n", "main1(a, qval, num)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.9.0-beta3", "language": "julia", "name": "julia-1.9" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.9.0" } }, "nbformat": 4, "nbformat_minor": 4 }