3DQD プログラム仕様

量子ドット (Quantum Dot) におけるエネルギー準位計算および関連関数のプロットスクリプト

概要:

本スクリプトは、球対称ポテンシャル井戸モデルを用いた量子ドットのエネルギー準位を計算し、 その結果を表示する機能、および関連する物理関数(球Bessel関数や水素原子の動径波動関数)を プロットする機能を提供する。

詳細説明:
  • cal モードでは、指定された有効質量と半径を持つ量子ドットの電子のエネルギー準位を、 球Bessel関数の零点を用いて計算する。

  • plot モードでは、球Bessel関数のグラフを描画し、その零点を視覚化する。

  • plotH モードでは、水素原子の動径波動関数を描画する。

  • コマンドライン引数により実行モードを選択できる。

関連リンク:
cal()[ソース]

量子球のエネルギー準位を計算し、結果を標準出力に表示する。

詳細説明:

設定された有効質量 meff と半径 R を持つ量子球(量子ドット)に対し、 指定された範囲の主量子数 n と軌道角運動量量子数 l について、 そのエネルギー準位を計算する。 まず get_bessel_zeros を用いて球Bessel関数の零点を取得し、 次に energy_level を用いて各準位のエネルギーを計算する。 計算結果はエネルギーの低い順にソートされ、各準位の情報(量子数、エネルギー、零点値)が出力される。

戻り値:

None

energy_level(meff, R, n, l, zeros)[ソース]

球対称量子井戸(量子ドット)のエネルギー準位を計算する。

詳細説明:

無限に深い球対称ポテンシャル井戸モデルに基づき、与えられた量子数 nl に対応する エネルギー準位を計算する。エネルギーは、球Bessel関数の零点 alpha_{nl} を用いて E_{nl} = (hbar^2 * k_{nl}^2) / (2 * m_eff * m_e) の式で求められる。 ここで k_{nl} = alpha_{nl} / R である。

パラメータ:
  • meff -- float: 電子の有効質量 (自由電子質量 me に対する比率)。

  • R -- float: 量子ドットの半径 (m)。

  • n -- int: 主量子数 (1から始まる)。球Bessel関数のn番目の零点に対応。

  • l -- int: 軌道角運動量量子数。

  • zeros -- list[list[float]]: 球Bessel関数の零点のリスト。zeros[l][n-1] の形式で零点にアクセスする。

戻り値:

tuple[float, float] or tuple[None, None]: 計算されたエネルギー準位 (eV) と対応する球Bessel関数の零点 alpha_nl。 零点が見つからない場合は (None, None) を返す。

get_bessel_zeros(l, xmin=0.0, xmax=10.0, dx=0.1, print_level=0)[ソース]

球Bessel関数 j_l(x) の零点を計算する。

詳細説明:

指定された次数 l の球Bessel関数 scipy.special.spherical_jn(l, x) を対象として、 get_zeros 関数を用いて零点を探索する。

パラメータ:
  • l -- int: 球Bessel関数の次数 (軌道角運動量量子数)。

  • xmin -- float: 探索範囲の最小値。

  • xmax -- float: 探索範囲の最大値。

  • dx -- float: 初期探索におけるステップサイズ。

  • print_level -- int: デバッグ情報の出力レベル。get_zeros 関数に渡される。

戻り値:

list[float]: 球Bessel関数の零点のリスト。

get_zeros(func, xmin=0.0, xmax=10.0, dx=0.1, eps=1e-10, nmaxiter=50, h=1e-10, dump=1.0, print_level=0)[ソース]

関数の零点を計算する。

詳細説明:

与えられた関数 func の指定された区間 [xmin, xmax] 内における零点を探索する。 零点の探索には、関数値の符号反転を検出した後、ニュートン法に似た数値的な手法を使用する。 各ステップで接線近似を用いて次点の推定を行い、指定された収束条件 eps または最大反復回数 nmaxiter に達するまで繰り返す。

パラメータ:
  • func -- callable: 零点を探す関数。引数を1つ取るcallableオブジェクト。

  • xmin -- float: 探索範囲の最小値。

  • xmax -- float: 探索範囲の最大値。

  • dx -- float: 初期探索におけるステップサイズ。

  • eps -- float: 零点探索の収束判定に用いる許容誤差。

  • nmaxiter -- int: ニュートン法系反復の最大回数。

  • h -- float: 数値微分の計算に使用する微小な差分。

  • dump -- float: ニュートン法におけるステップサイズの調整係数(ダンプファクター)。1.0は標準的なステップサイズ。

  • print_level -- int: デバッグ情報の出力レベル。0で非表示、1で表示。

戻り値:

list[float]: 見つかった零点のリスト。

main()[ソース]

スクリプトのメイン実行関数。

詳細説明:

コマンドライン引数 sys.argv[1] の値に基づいて、実行モードを決定する。 - 'cal': cal() 関数を呼び出し、量子球のエネルギー準位計算と表示を実行。 - 'plot': plot_spherical_bessel() 関数を呼び出し、球Bessel関数のプロットを実行。 - 'plotH': plot_H() 関数を呼び出し、水素原子の動径波動関数のプロットを実行。 - 上記以外のモードが指定された場合はエラーメッセージを表示し、スクリプトを終了する。

戻り値:

None

plot_H(nmax, rmax)[ソース]

水素原子の動径波動関数 R_nl(r) をプロットする。

詳細説明:

水素原子の動径波動関数 R_nl(r) を、主量子数 n と軌道角運動量量子数 l の 組み合わせに対して計算し、matplotlib を用いてグラフを描画する。 genlaguerre 関数(一般化されたラゲール多項式)を用いて計算が行われる。 プロットされる動径 r の範囲は 0 から 20 まで(ボーア半径 a0 単位)。 なお、rmax 引数は現在の実装ではプロット範囲に影響を与えない。

パラメータ:
  • nmax -- int: プロットする主量子数 n の最大値。n1 から nmax まで。

  • rmax -- float: (未使用) r軸の最大値として想定される値(ボーア半径 a0 単位)。

戻り値:

None

plot_spherical_bessel(lmax, rmax, rmesh=500)[ソース]

球Bessel関数 j_l(x) をプロットする。

詳細説明:

0から lmax までの次数 l について、球Bessel関数 j_l(x)0 から rmax までの区間で計算し、matplotlib を用いてグラフを描画する。 各関数の零点も get_bessel_zeros を使用して計算し、グラフ上にマークする。

パラメータ:
  • lmax -- int: プロットする球Bessel関数の最大次数 (l)。

  • rmax -- float: r軸の最大値。

  • rmesh -- int: r軸のデータポイント数。

戻り値:

None