D:/git/sphinx/tkProg/source/Quantum/wavefunction2D.py の技術ドキュメント

プログラムの動作

本プログラムは、様々な物理モデルにおける波動関数を計算し、2次元(および1次元・3次元)で可視化するPythonスクリプトです。

主な機能として、以下の3つのモデル(モード)の波動関数を計算できます。

  1. 平面波モデル (pw): 自由電子の平面波。

  2. 量子箱モデル (qbox): 無限ポテンシャル障壁によって区切られた量子ドット(量子箱)。

  3. 水素原子モデル (H): 水素様原子の電子軌道(s軌道、p軌道、d軌道など)。

解決する課題としては、量子力学における波動関数の空間的な広がりや位相(実部と虚部)、確率密度を直感的に理解しやすくするための可視化(グラフ化)を提供することです。周期境界条件を考慮したブロッホの定理に基づく波数の変調もシミュレートできます。

原理

本プログラムでは、指定されたモデルに応じて空間座標 \((x, y, z)\) における波動関数 \(\psi\) を計算します。すべてのモデルに対して、結晶格子や周期構造を想定したブロッホ因子 \(\phi\) が掛け合わされます。

ブロッホ因子は以下の式で計算されます。

\[\phi(x, y, z) = \exp\left[ i 2\pi \left( \frac{k_x x}{a_x} + \frac{k_y y}{a_y} + \frac{k_z z}{a_z} \right) \right]\]

各モデルの波動関数の計算原理は以下の通りです。

1. 平面波モデル (pw) 量子数 \(n_1, n_2, n_3\) によって定義される基本の平面波にブロッホ因子を乗じます。

\[\psi_{\mathrm{pw}}(x, y, z) = \exp\left( i 2\pi \frac{n_1 x}{a_x} \right) \exp\left( i 2\pi \frac{n_2 y}{a_y} \right) \exp\left( i 2\pi \frac{n_3 z}{a_z} \right) \cdot \phi(x, y, z)\]

2. 量子箱モデル (qbox) 単位セル内に閉じ込められた粒子の波動関数です。量子数 \(n_i\) が奇数の場合は \(\cos\) 関数、偶数の場合は \(\sin\) 関数が適用されます(例として \(x\) 方向の奇数の場合を示します)。

\[\psi_{\mathrm{qbox},x}(x) = \cos\left( \frac{\pi x_0}{a_x} n_1 \right)\]

プログラム内では、隣接するセルからの寄与を足し合わせることで周期境界条件を模倣しています。

3. 水素原子モデル (H) 主量子数 \(n\)、方位量子数 \(l\)、磁気量子数 \(m\) に基づき、動径波動関数 \(R_{nl}(r)\) と球面調和関数 \(Y_{lm}(\Theta, \Phi)\) の積として計算されます。

\[\psi_{\mathrm{H}}(x, y, z) = R_{nl}(r) \cdot Y_{lm}(\Theta, \Phi) \cdot \phi(x, y, z)\]

動径波動関数はラゲール多項式を基にし、球面調和関数はルジャンドル陪関数を基にして、プログラム内で各量子数に応じた数式が定義されています。

必要な非標準ライブラリとインストール方法

本プログラムを実行するためには、数値計算用の numpy と、グラフ描画用の matplotlib が必要です。 これらは標準ライブラリではないため、以下のコマンドを用いてインストールしてください。

pip install numpy matplotlib

必要な入力ファイル

本プログラムは、必要なパラメータ(モデルの種類、量子数、波数ベクトル、メッシュ数など)をすべてコマンドライン引数として受け取ります。そのため、外部の入力ファイルは一切必要としません。

生成される出力ファイル

本プログラムは計算結果をコンソール画面にテキスト出力し、描画結果をGUIウィンドウ(matplotlib のプロット画面)に表示します。 画像ファイルやデータファイルとしてストレージに保存する処理は含まれていないため、生成される出力ファイルはありません。

コマンドラインでの使用例 (Usage)

コマンドラインから実行する際の基本的な構文は以下の通りです。モデル(モード)によって引数の意味が一部異なります。

平面波モデルの場合:

python D:/git/sphinx/tkProg/source/Quantum/wavefunction2D.py pw kx0 ky0 kz0 kx ky kz nmeshx nmeshy nmeshz

量子箱モデルの場合:

python D:/git/sphinx/tkProg/source/Quantum/wavefunction2D.py qbox nx ny nz kx ky kz nmeshx nmeshy nmeshz

水素原子モデルの場合:

python D:/git/sphinx/tkProg/source/Quantum/wavefunction2D.py H n l m kx ky kz nmeshx nmeshy nmeshz

引数の詳細:

  • pw, qbox, H: 実行するモード。

  • 第2〜第4引数: 量子数。平面波の場合は波数ベクトル、量子箱の場合は各軸の量子数、水素原子の場合は \(n, l, m\)

  • kx, ky, kz: ブロッホ波の波数ベクトル(\(\pi/a\) 単位)。

  • nmeshx, nmeshy, nmeshz: 各軸方向の計算メッシュ(分割)数。

コマンドラインでの具体的な使用例

ここでは、水素原子モデルを選択し、2pz軌道(主量子数 \(n=2\)、方位量子数 \(l=1\)、磁気量子数 \(m=0\))を描画する例を示します。

python D:/git/sphinx/tkProg/source/Quantum/wavefunction2D.py H 2 1 0 0.0 0.0 0.0 120 120 120

実行結果の説明:

  1. コンソール出力: 各メッシュポイントにおける座標 \(x, y, z\) と、波動関数の実部、虚部、確率密度(絶対値の2乗)が一覧として出力されます。最後に「Press ENTER to exit>>」と表示され、入力待ち状態になります。

  2. グラフの表示: matplotlib のウィンドウが立ち上がり、以下のグラフ群が表示されます。

    • \(x\) 方向および \(y\) 方向の1次元波動関数プロット(実部・虚部)。

    • \(xy\) 平面における波動関数の実部と虚部の2次元カラーマップ(等高線付き)。

    • \(xy\) 平面における波動関数の実部と虚部の3次元サーフェスプロット。

  3. 終了方法: 表示されたグラフを確認した後、コンソール上で Enter キーを押すことでプログラムが終了します。