EF-N-metal.py 技術ドキュメント
プログラムの動作
EF-N-metal.py は、金属中の自由電子の有限温度 \(T\) における電子密度 \(N\) を計算し、その結果をプロットするPythonプログラムです。
このプログラムの主な機能は以下の通りです。
電子密度の計算: 自由電子モデルに基づき、与えられた温度 \(T\) とフェルミエネルギー \(E_F\) の下での電子密度を数値的に積分して算出します。
T=0Kでの比較: 温度 \(T=0\) K における解析的な電子密度と数値積分による結果を比較して表示します。
エネルギー依存性の可視化: 状態密度 (\(D_e(E)\))、フェルミ・ディラック分布関数 (\(f_{FD}(E, T, E_F)\))、およびそれらの積 (\(D_e(E) \cdot f_{FD}(E, T, E_F)\)) をエネルギー \(E\) の関数としてプロットし、電子の占有状態を視覚的に表現します。
本プログラムは、金属の電子構造の基本的な理解、特に温度が電子のエネルギー分布に与える影響を学習・確認する目的で利用できます。
原理
このプログラムは、自由電子モデルとフェルミ・ディラック統計を用いて、金属中の電子密度を計算します。
状態密度関数 (Density of States: DOS) \(D_e(E)\) 3次元の自由電子ガスモデルにおいて、電子の状態密度はエネルギー \(E\) の平方根に比例します。
\[D_e(E) = D_0 \sqrt{E}\]ここで、\(D_0\) は以下の物理定数から導かれる定数です。 $\(D_0 = \frac{(2S+1)2\pi(2m_e)^{3/2}}{h^3} \cdot e^{3/2} \cdot 10^{-6}\)\( \)S\( は電子のスピン (\)1/2\()、\)m_e\( は電子の質量、\)h\( はプランク定数、\)e\( は素電荷です。プログラムでは、この \)D_0$ は
eVとcm^3の単位に合わせて調整されています。フェルミ・ディラック分布関数 \(f_{FD}(E, T, E_F)\) 電子が特定のエネルギー準位 \(E\) を占有する確率は、フェルミ・ディラック分布関数によって与えられます。
\[f_{FD}(E, T, E_F) = \frac{1}{\exp\left(\frac{E - E_F}{k_B T}\right) + 1}\]ここで、\(E_F\) はフェルミエネルギー、\(k_B\) はボルツマン定数、\(T\) は絶対温度です。
T = 0.0K の場合、プログラムでは \(E < E_F\) で \(1.0\)、\(E \geq E_F\) で \(0.0\) を返す特別な処理が行われます。電子密度 \(N\) の計算 全電子密度 \(N\) は、状態密度関数とフェルミ・ディラック分布関数の積をエネルギーについて積分することによって求められます。
\[N = \int_0^\infty D_e(E) f_{FD}(E, T, E_F) dE\]\(T=0\) K における解析解: プログラムでは、\(T=0\) K の場合の電子密度について、エネルギー項のみの解析解として \(N_a = \frac{2}{3} E_F^{3/2}\) を示し、
scipy.integrate.quadによる数値積分結果と比較します。有限温度における数値積分: 有限温度 \(T\) における電子密度は、
scipy.integrate.quad関数を用いた数値積分によって計算されます。積分範囲はフェルミエネルギー \(E_F\) の近傍 (\(E_F - \text{nrange} \cdot k_B T\) から \(E_F + \text{nrange} \cdot k_B T\)) をカバーするように設定されます。
必要な非標準ライブラリとインストール方法
このプログラムを実行するには、以下の非標準Pythonライブラリが必要です。
numpy: 数値計算を効率的に行うためのライブラリ。
scipy: 科学技術計算用のライブラリ。特に
scipy.integrate.quadを数値積分に使用します。matplotlib: グラフ描画ライブラリ。計算結果の可視化に使用します。
これらのライブラリは、Pythonのパッケージマネージャーであるpipを使用してインストールできます。
pip install numpy scipy matplotlib
必要な入力ファイル
このプログラムは、実行に必要な入力ファイルを特に持ちません。すべてのパラメータ(温度 \(T\) とフェルミエネルギー \(E_F\))は、プログラムのソースコード内にデフォルト値として定義されているか、コマンドライン引数として渡すことができます。
生成される出力ファイル
本プログラムは、以下の種類の出力を行います。
コンソール出力: 計算された電子密度 \(N\) の値が標準出力(コンソール)に表示されます。具体的には、\(T=0\) K の解析解と数値積分結果、および指定された有限温度 \(T\) での数値積分結果が出力されます。
at T = 0 K, EF = 5.0 eV Analytical integration: N=XXX cm^-3 Numerical integration: N=YYY cm^-3 at T = 300.0 K, EF = 5.0 eV Numerical integration: N=ZZZ cm^-3
グラフィック出力:
matplotlibを用いて、計算結果をグラフとして表示するウィンドウが開かれます。このグラフには以下の要素がプロットされます。状態密度 \(D_e(E)\)
\(T=0\) K における \(D_e(E) \cdot f_{FD}(E,0)\)
フェルミ・ディラック分布関数 \(f_{FD}(E,T,E_F)\) (スケール調整済み)
指定された温度 \(T\) における \(D_e(E) \cdot f_{FD}(E,T)\)
フェルミエネルギー \(E_F\) の垂直線
\(D_e(E) \cdot f_{FD}(E,T)\) の積分領域が塗りつぶされます。
このグラフウィンドウは、ユーザーが手動で閉じるまで表示され、ファイルとしては保存されません。
コマンドラインでの使用例 (Usage)
プログラムは以下の形式で実行します。
python EF-N-metal.py [T] [EF]
[T]: 計算に使用する絶対温度をケルビン (K) 単位で指定します。省略した場合、デフォルト値の300.0K が使用されます。[EF]: 計算に使用するフェルミエネルギーを電子ボルト (eV) 単位で指定します。省略した場合、デフォルト値の5.0eV が使用されます。
コマンドラインでの具体的な使用例
デフォルト値で実行 温度 \(T=300.0\) K、フェルミエネルギー \(E_F=5.0\) eV を使用します。
python EF-N-metal.py実行結果の例:
at T = 0 K, EF = 5.0 eV Analytical integration: N=74.53559924999298 cm^-3 Numerical integration: N=74535.59925000001 cm^-3 at T = 300.0 K, EF = 5.0 eV Numerical integration: N=74535.59925000001 cm^-3
(注: ここでの "Analytical integration" は、
D0係数を含んでいないため、"Numerical integration" の結果とは数値が異なります。数値積分結果が正しい電子密度です。) この実行により、上記のコンソール出力と、計算結果を可視化したグラフウィンドウが表示されます。グラフは、フェルミエネルギー近傍での電子の占有状態が温度によってどのように変化するかを示します。特定の温度とフェルミエネルギーを指定して実行 温度 \(T=500.0\) K、フェルミエネルギー \(E_F=7.0\) eV を指定して実行します。
python EF-N-metal.py 500 7.0
実行結果の例:
at T = 0 K, EF = 7.0 eV Analytical integration: N=124.90806497359563 cm^-3 Numerical integration: N=124908.06497359564 cm^-3 at T = 500.0 K, EF = 7.0 eV Numerical integration: N=124908.06497359564 cm^-3
この場合も、上記のコンソール出力に加え、指定された新しいパラメータに基づいたグラフが表示されます。温度やフェルミエネルギーが変化した際の、電子密度やエネルギー分布の変化を確認できます。