{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 局在モーメントの磁化 ##\n",
"\n",
"(初版:2020年3月、更新:2023年2月21日) "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"using Plots\n",
"using Plots.PlotMeasures\n",
"using LaTeXStrings"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$g \\mu_B J$の磁気モーメントを持つ原子が$N$個ある場合、磁化$M$は \n",
"\n",
" $M(H,T) = Ng \\mu_B JB\\left( \\frac{g \\mu_B J H}{k_B T} \\right)$ \n",
"\n",
"となる。ボーア磁子単位にした1イオンあたりの磁化は、 \n",
"\n",
" $\\mu (H,T) = g JB\\left( \\frac{g \\mu_B J H}{k_B T} \\right)$ [$\\mu_B$ / ion]\n",
"\n",
"となる。$B$はブリルアン関数で、"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"B(x) = ((2J+1)/2J)*coth(((2J+1)/2J)*x) - (1/2J)*coth(x/2J)\n",
"J = 7/2;\n",
"x = collect(0:0.1:30);\n",
"y = B.(x);\n",
"\n",
"plot(x, y)\n",
"plot!(size=(500, 300), xlabel=L\"x\", ylabel=L\"B(x)\", legend = false)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"となる。\n",
"指定した温度での磁化の磁場変化は以下のようになる。"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"μB = 9.27410*10^(-21); #ボーア磁子\n",
"kB = 1.3866*10^(-16); #ボルツマン定数\n",
"NA = 6.02217*10^(23); #アボガドロ数\n",
"J = 7/2; #全角運動量\n",
"L = 0; #軌道角運動量\n",
"S = 7/2; #スピン\n",
"T = 2; #温度\n",
"g = 3/2 + (S*(S+1)-L*(L+1))/(2J*(J+1)) #g因子\n",
"B(x) = ((2J+1)/2J)*coth(((2J+1)/2J)*x) - (1/2J)*coth(x/2J) #ブリュアン関数\n",
"MH(H) = g*J*B((J*g*μB*H)/(kB*T)) #磁化の式(磁場依存性として設定)\n",
"\n",
"h = collect(1:100:70000); #磁場(Oe)\n",
"m = MH.(h) #磁化(μB/ion)\n",
"\n",
"plot(h,m)\n",
"plot!(size = (500, 300), xlabel = L\"H\\quad \\textrm{(Oe)}\", ylabel = L\"M\\quad (\\mu_\\textrm{B}/\\textrm{ion})\", ylims = (0,7), legend = false)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 分子場:Weiss理論 ##\n",
"前述のように磁化$M$は\n",
"\n",
" $M = Ng \\mu_B JB\\left( \\frac{g \\mu_B J H}{k_B T} \\right)$ ・・・式(A)\n",
"\n",
"と書ける。 \n",
"磁化$M$による分子場$H_E$を、分子場係数$\\lambda$を用いて以下のように定義する。\n",
"\n",
" $H_E = \\lambda M$\n",
"\n",
"そうすると、これを書き換えて磁化$M$は\n",
"\n",
" $M = \\frac{H_E}{\\lambda}$ ・・・式(B)\n",
" \n",
"となる。 \n",
"磁化$M$により分子場$H_E$が生じ、また、分子場により磁化が生じる。 \n",
"つまり、「式(A)=式(B)」となれば、磁化が自発的に出るということである。 \n",
"ここで、\n",
"\n",
" $x = \\frac{g \\mu_B H_E}{k_B T}$、または $H_E = \\frac{k_B T x}{g \\mu_B}$\n",
" \n",
"とすると、式(A)と式(B)は\n",
"\n",
" $M = Ng \\mu_B JB\\left( Jx \\right)$ ・・・式(C)\n",
" \n",
" $M = \\frac{k_B T}{\\lambda g \\mu_B}$ ・・・式(D)\n",
" \n",
"となる。 \n",
"さらに、飽和磁化 $M_0 = Ng\\mu_B J$ と転移温度 $T_C = \\frac{\\lambda J(J+1)Ng^2 \\mu_B^2}{3k_B}$ を用いて書き直すと\n",
"\n",
" $\\frac{M}{M_0} = B\\left( Jx \\right)$ ・・・式(E)\n",
" \n",
" $\\frac{M}{M_0} = \\frac{J+1}{3J}\\frac{T}{T_C}x$ ・・・式(F)\n",
" \n",
"となる。 \n",
"これらをグラフに描くと以下のようになる。 \n",
"式(F)についてはいくつかの温度(T/Tc)についてプロットしてある。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"J = 7/2; #全角運動量\n",
"t1 = collect(0.1:0.2:0.9); #計算する温度(転移温度で規格化した温度 : T/T_C)\n",
"x = collect(0:0.1:30);\n",
"m1 = ((2J+1)/2J) * coth.(((2J+1)/2J) * x) - (1/2J) * coth.(x/2J)\n",
"m2 = (t1' * (J+1)/3J) .* x\n",
"\n",
"plot(x, [m1 m2])\n",
"plot!(size=(500, 300), xlabel = L\"x\", ylabel = L\"M/M_0\", legend = false, xlims = (0, 20), ylims = (0, 1.2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"グラフを見てわかるように、$T_C$ 以下で 式(E)と式(F)は $T = 0$ 以外の交点を持つ。 \n",
"つまり、有限の自発磁化の存在を示す。 \n",
"これを求めることにより、自発磁化の温度依存性が得られる。 "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using Roots\n",
"\n",
"function FindRootCalc(J, t)\n",
" m1(x) = ((2J+1)/2J) * coth(((2J+1)/2J) * x) - (1/2J) * coth(x/2J)\n",
" m2(x) = (t * (J+1)/3J) * x\n",
" m3(x) = m1(x)-m2(x)\n",
" sss = find_zero(m3, 100, Order16())\n",
"end\n",
"\n",
"J = 7/2; #全角運動量\n",
"calcT = collect(0.01:0.01:1); #T/Tc\n",
"calcM = FindRootCalc.(J, calcT) .* calcT * (J+1)/3J; #M/M0\n",
" \n",
"plot(calcT, calcM)\n",
"plot!(size=(500, 300), xlabel = L\"T/T_c\", ylabel = L\"M/M_0\", legend = false, xlims = (0, 1.1), ylims = (0, 1.1))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"molecularfield.csv\""
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using CSV, DataFrames\n",
"function saveData2(xwave, y1wave, filename::String)\n",
" df = DataFrame(TdivTc = xwave, MdivM0 = y1wave);\n",
" df |> CSV.write(filename)\n",
"end\n",
"\n",
"saveData2(calcT, calcM, \"molecularfield.csv\")"
]
},
{
"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
}