3DQD.py 技術ドキュメント
プログラムの動作
D:/git/sphinx/tkProg/source/Quantum/3DQD.py は、量子ドット(Quantum Dot)における電子のエネルギー準位の計算、および関連する物理関数の可視化を行うプログラムです。
主な機能として、無限に深い球対称ポテンシャル井戸モデルを用いたエネルギー準位の計算、球Bessel関数のプロット、および水素原子の動径波動関数のプロットを備えています。
半導体量子ドットなどのナノスケール構造における量子閉じ込め効果を解析し、電子の取り得るエネルギー状態を理論的に理解・可視化するという課題を解決します。
なお、ソースコード内で関数の役割を説明するdocstringは、Pythonの構文に従い「3重引用符」で囲まれて記述されています。
原理
本プログラムでは、以下の物理式およびアルゴリズムを用いて計算を行います。
球対称ポテンシャル井戸モデルとエネルギー準位
半径 \(R\) の無限に深い球対称ポテンシャル井戸における電子の波動関数は、球Bessel関数 \(j_l(kr)\) で表されます。境界条件より、井戸の壁面(\(r=R\))で波動関数がゼロになる必要があるため、球Bessel関数の零点 \(\alpha_{nl}\) を用いて波数ベクトル \(k_{nl}\) が決定されます。
電子のエネルギー \(E_{nl}\) は、求めた波数ベクトルから以下の式で計算されます。
ここで、\(\hbar\) は換算プランク定数、\(m_{eff}\) は電子の有効質量(自由電子質量 \(m_e\) に対する比)です。
水素原子の動径波動関数
水素原子の動径波動関数 \(R_{nl}(r)\) は、一般化ラゲール多項式 \(L_{n-l-1}^{2l+1}(\rho)\) を用いて計算されます。ここで、無次元化された動径パラメータ \(\rho\) は以下のように定義されます。
これを用いて動径波動関数の比例成分は次のように表されます。
零点探索アルゴリズム
球Bessel関数の零点 \(\alpha_{nl}\) を求めるため、指定区間で関数値の符号が反転する位置を検出し、その近傍で数値微分と接線近似を反復するニュートン法に似たアルゴリズム(ダンプファクター付き)を適用して、高精度な零点座標を取得しています。
必要な非標準ライブラリとインストール方法
本プログラムは以下の非標準ライブラリを使用します。
numpy
scipy
matplotlib
これらのライブラリは、以下の pip コマンドを実行することでインストール可能です。
pip install numpy scipy matplotlib
必要な入力ファイル
本プログラムの実行にあたり、外部から読み込む入力ファイルは必要ありません。 必要なパラメータはすべてコマンドライン引数としてプログラムに与えます。
生成される出力ファイル
本プログラムはファイルへの自動保存を行いません。
cal モードの場合は計算結果が標準出力(コンソール)にテキストとして表示されます。
plot および plotH モードの場合は、画面上にグラフを描画したGUIウィンドウが表示されます。
必要に応じて、表示されたグラフウィンドウの保存機能を使用して画像ファイルとして保存することが可能です。
コマンドラインでの使用例 (Usage)
本プログラム D:/git/sphinx/tkProg/source/Quantum/3DQD.py は、以下の書式で実行します。
python 3DQD.py [mode] [R(nm)] [meff] [Z]
mode: 実行モードを指定します。以下の3つから選択可能です(デフォルトはcal)。cal: 球対称ポテンシャル井戸モデルを用いたエネルギー準位の計算。plot: 球Bessel関数のプロットおよび零点の可視化。plotH: 水素原子の動径波動関数のプロット。
R(nm): 量子ドットの半径をナノメートル(nm)単位で指定します(デフォルトは5.0)。meff: 電子の有効質量比を指定します(デフォルトは0.067)。Z: 原子番号を指定します(デフォルトは1)。
※ 第2引数以降を省略した場合は、上記のデフォルト値が適用されます。
コマンドラインでの具体的な使用例
例1: エネルギー準位の計算 (デフォルトパラメータ)
python 3DQD.py cal
実行結果の説明:
有効質量 0.067、半径 5.0 nm の量子ドットに対するエネルギー準位を計算します。
最初に \(l=0\) から \(l=4\) までの球Bessel関数の零点がコンソールに出力され、続いて軌道角運動量量子数 \(l\) と主量子数 \(n\) に対応する各状態のエネルギー(eV単位)が低い順に一覧表示されます。
例2: パラメータを指定したエネルギー準位の計算
python 3DQD.py cal 10.0 0.1 1
実行結果の説明:
半径を 10.0 nm、有効質量比を 0.1 に変更して計算を実行します。
量子ドットのサイズが大きくなるため電子の閉じ込め効果が弱まり、例1に比べて各準位のエネルギー値が全体的に低く算出された結果が出力されます。
例3: 球Bessel関数のプロット
python 3DQD.py plot
実行結果の説明: \(l=0\) から \(l=3\) までの球Bessel関数 \(j_l(kr)\) が描画されたグラフウィンドウが表示されます。 グラフ上には計算された各関数の零点が点(マーカー)として可視化され、波動関数の境界条件を満たす \(kr\) の値が視覚的に確認できます。
例4: 水素原子の動径波動関数のプロット
python 3DQD.py plotH
実行結果の説明: 主量子数 \(n=1\) から \(n=3\) に対応する水素原子の動径波動関数 \(R_{nl}(r)\) を描画したグラフウィンドウが表示されます。 横軸はボーア半径 \(a_0\) を単位とした距離 \(r\) であり、各量子状態に応じた波動関数の振幅分布(節の数やピークの位置など)を確認できます。