kronig_penney_refactored プログラム仕様

Quantum.kronig_penney_refactored.apply_legacy_args(args: Namespace) None
概要:

旧形式のコマンドライン引数を適用します。

詳細説明:

modeの後に続く位置引数として指定された値を解析し、argsオブジェクトの対応する属性に設定します。 これにより、スクリプトの古いバージョンとの互換性が保たれます。

引数:
param args:

コマンドライン引数を格納したNamespaceオブジェクト。

type args:

argparse.Namespace

戻り値:

なし。

Quantum.kronig_penney_refactored.check_wave_coefficients(ci: list[complex], kw: float, E: float, w: float, b: float, V0: float, eps: float, is_print: int = 0) None
概要:

計算された波動関数係数が境界条件を満たしているか検証します。

詳細説明:

計算された波動関数の係数 ci を用いて、境界条件行列 Mij との積 Mij @ ci が ほぼゼロになっていることを確認します。これは、係数が正しく計算されているかの健全性チェックです。 積の絶対値の最大値が許容誤差 eps を超える場合、RuntimeErrorを発生させます。

引数:
param ci:

波動関数の複素数係数のリスト。

type ci:

list

param kw:

電子の波数 (pi/a 単位)。

type kw:

float

param E:

電子のエネルギー (eV)。

type E:

float

param w:

井戸の幅 (A)。

type w:

float

param b:

ポテンシャル障壁の幅 (A)。

type b:

float

param V0:

ポテンシャルの高さ (eV)。

type V0:

float

param eps:

許容誤差。

type eps:

float

param is_print:

結果を標準出力に表示するかどうかを示すフラグ (0:表示しない, 1:表示する)。

type is_print:

int

戻り値:

なし。

例外:
raises RuntimeError:

係数が境界条件を満たさない場合に発生します。

Quantum.kronig_penney_refactored.compute_band_data(ctx: SimpleNamespace) tuple[list[float], ndarray, int]
概要:

バンド構造プロット用のデータを計算します。

詳細説明:

コンテキストオブジェクト (ctx) で指定された波数範囲 (kmin から kmax) と ステップ数 (nk) に基づいて、各波数 k における許容エネルギー準位を計算します。 これらのエネルギー準位は、compute_energy_levels 関数を用いて探索され、 バンド構造としてプロットされます。

引数:
param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:
returns:

波数 k のリスト、各波数におけるエネルギー準位のnumpy.ndarray、および見つかった最大バンドレベル数のタプル。

rtype:

tuple

Quantum.kronig_penney_refactored.compute_boundary_matrix(k: float, E: float, w: float, b: float, V0: float) ndarray
概要:

波動関数の境界条件を記述する4x4行列を計算します。

詳細説明:

Kronig-Penneyモデルにおける各領域 (井戸と障壁) での波動関数の係数間の関係を記述する行列を構築します。 この行列は、井戸と障壁の界面における波動関数とその導関数の連続性条件に基づいています。 電子のエネルギー E、波数 k、井戸の幅 w、障壁の幅 b、およびポテンシャルの高さ V0 が入力として必要です。

引数:
param k:

電子の波数 (pi/a 単位)。

type k:

float

param E:

電子のエネルギー (eV)。

type E:

float

param w:

井戸の幅 (A)。

type w:

float

param b:

ポテンシャル障壁の幅 (A)。

type b:

float

param V0:

ポテンシャルの高さ (eV)。

type V0:

float

戻り値:
returns:

境界条件を記述する4x4の複素数行列。

rtype:

numpy.ndarray

Quantum.kronig_penney_refactored.compute_delta(E: float, k: float, w: float, b: float, V0: float) float
概要:

Kronig-Penneyモデルのデルタ関数 (delta(E)) の値を計算します。

詳細説明:

与えられたエネルギー E、波数 k、井戸の幅 w、ポテンシャル障壁の幅 b、 およびポテンシャルの高さ V0 に基づいて、Kronig-Penneyモデルのデルタ関数を評価します。 この関数は、電子の透過・反射特性を表し、delta(E) の値が -1 から 1 の間に収まるエネルギーが 許容エネルギーバンドに対応します。 計算には物理定数 HBAR, ELECTRON_MASS, ELEMENTARY_CHARGE を使用します。

引数:
param E:

電子のエネルギー (eV)。

type E:

float

param k:

電子の波数 (pi/a 単位)。

type k:

float

param w:

井戸の幅 (A)。

type w:

float

param b:

ポテンシャル障壁の幅 (A)。

type b:

float

param V0:

ポテンシャルの高さ (eV)。

type V0:

float

戻り値:
returns:

デルタ関数の値。

rtype:

float

Quantum.kronig_penney_refactored.compute_energy_levels(emin: float, emax: float, nEsearch: int, k: float, w: float, b: float, V0: float, ctx: SimpleNamespace) tuple[list[float], list[list[complex]]]
概要:

指定されたエネルギー範囲内で許容されるエネルギー準位を計算します。

詳細説明:

エネルギー範囲 emin から emax を nEsearch 個のステップで探索し、 compute_delta 関数の符号が反転する点を特定します。 これらの点を初期値として compute_refined_energy を呼び出し、 各エネルギー準位を精密化します。対応する波動関数の係数も計算して返します。

引数:
param emin:

探索開始エネルギー (eV)。

type emin:

float

param emax:

探索終了エネルギー (eV)。

type emax:

float

param nEsearch:

エネルギー探索点の数。

type nEsearch:

int

param k:

電子の波数 (pi/a 単位)。

type k:

float

param w:

井戸の幅 (A)。

type w:

float

param b:

ポテンシャル障壁の幅 (A)。

type b:

float

param V0:

ポテンシャルの高さ (eV)。

type V0:

float

param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:
returns:

許容されるエネルギー準位のリストと、それぞれのエネルギー準位に対応する波動関数係数のリストのタプル。

rtype:

tuple

Quantum.kronig_penney_refactored.compute_graph_data(ctx: SimpleNamespace) tuple[list[float], list[float]]
概要:

delta(E) グラフプロット用のデータを計算します。

詳細説明:

コンテキストオブジェクト (ctx) で指定されたエネルギー範囲 (emin から emax) と ステップ数 (nE) に基づいて、各エネルギー E におけるデルタ関数 (compute_delta) の値を計算します。 このデータは、許容エネルギーバンドを視覚化するために使用されます。

引数:
param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:
returns:

エネルギー値のリストと対応するデルタ関数の値のリストのタプル。

rtype:

tuple

Quantum.kronig_penney_refactored.compute_potential_profile(xmin: float, xstep: float, n: int, ctx: SimpleNamespace) tuple[ndarray, ndarray]
概要:

指定された範囲とステップでポテンシャルプロファイルを計算します。

詳細説明:

xminから始まり、xstep間隔でn個の点におけるポテンシャル値を計算し、x座標配列とポテンシャル値配列を生成します。 各点のポテンシャル値は compute_potential_value を呼び出して決定されます。

引数:
param xmin:

プロファイルの開始x座標。

type xmin:

float

param xstep:

各点間のxステップサイズ。

type xstep:

float

param n:

計算する点の総数。

type n:

int

param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:
returns:

x座標のnumpy.ndarrayと対応するポテンシャル値のnumpy.ndarrayのタプル。

rtype:

tuple

Quantum.kronig_penney_refactored.compute_potential_value(x: float, ctx: SimpleNamespace) float
概要:

指定された位置 x におけるポテンシャルの値を計算します。

詳細説明:

Kronig-Penneyモデルにおける矩形ポテンシャル関数を定義します。 x が周期 a のセル内でポテンシャル幅 bwidth の範囲内にある場合、ポテンシャルの高さ ctx.bpot を返し、 それ以外の場合は 0.0 を返します。

引数:
param x:

ポテンシャルの値を評価するx座標。

type x:

float

param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:
returns:

xにおけるポテンシャルの値。

rtype:

float

Quantum.kronig_penney_refactored.compute_refined_energy(E0: float, E1: float, k: float, w: float, b: float, V0: float, ctx: SimpleNamespace, is_print: int = 0) tuple[float | None, float | None, float | None]
概要:

ニュートン法を用いてエネルギー準位を精密化します。

詳細説明:

Kronig-Penneyモデルのデルタ関数 compute_delta がゼロに近づくエネルギー E を、 初期推定値 E0 と E1 からニュートン法を適用して見つけます。 許容誤差 ctx.eps または最大反復回数 ctx.nmaxiter に達するまで反復計算を行います。 収束しない場合はNoneを返します。

引数:
param E0:

エネルギーの初期推定値1 (eV)。

type E0:

float

param E1:

エネルギーの初期推定値2 (eV)。

type E1:

float

param k:

電子の波数 (pi/a 単位)。

type k:

float

param w:

井戸の幅 (A)。

type w:

float

param b:

ポテンシャル障壁の幅 (A)。

type b:

float

param V0:

ポテンシャルの高さ (eV)。

type V0:

float

param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

param is_print:

結果を標準出力に表示するかどうかを示すフラグ (0:表示しない, 1:表示する)。

type is_print:

int

戻り値:
returns:

精密化されたエネルギー、エネルギー変化 dE、およびデルタ関数の値のタプル。 収束しない場合は (None, None, None) を返します。

rtype:

tuple

Quantum.kronig_penney_refactored.compute_wave_coefficients(k: float, E: float, w: float, b: float, V0: float) list[complex]
概要:

波動関数の係数を計算します。

詳細説明:

周期ポテンシャル中の電子の波動関数は、Blochの定理により周期部分と平面波部分に分けられます。 この関数は、境界条件行列を解くことで、井戸と障壁領域における波動関数の未知の係数 A, B, C, D を計算します。 特に、井戸領域の左側から右側への入射波の係数を 1.0 と仮定し、残りの3つの係数を連立一次方程式の解として求めます。

引数:
param k:

電子の波数 (pi/a 単位)。

type k:

float

param E:

電子のエネルギー (eV)。

type E:

float

param w:

井戸の幅 (A)。

type w:

float

param b:

ポテンシャル障壁の幅 (A)。

type b:

float

param V0:

ポテンシャルの高さ (eV)。

type V0:

float

戻り値:
returns:

波動関数の4つの複素数係数 (A, B, C, D) のリスト。

rtype:

list

Quantum.kronig_penney_refactored.compute_wavefunction(ci: list[complex], x: float, kw: float, E: float, w: float, b: float, V0: float) complex
概要:

指定された位置 x における波動関数の値を計算します。

詳細説明:

計算された波動関数係数 ci を使用して、Blochの定理に基づく波動関数を評価します。 位置 x を周期 a で正規化し、それが井戸領域か障壁領域かに応じて適切な波動関数形式を適用します。 結果は複素数値の波動関数となります。

引数:
param ci:

波動関数の複素数係数のリスト (A, B, C, D)。

type ci:

list

param x:

波動関数の値を評価するx座標 (A)。

type x:

float

param kw:

電子の波数 (pi/a 単位)。

type kw:

float

param E:

電子のエネルギー (eV)。

type E:

float

param w:

井戸の幅 (A)。

type w:

float

param b:

ポテンシャル障壁の幅 (A)。

type b:

float

param V0:

ポテンシャルの高さ (eV)。

type V0:

float

戻り値:
returns:

xにおける波動関数の複素数値。

rtype:

complex

例外:
raises ValueError:

内部でのx座標の正規化が不正な場合に発生します。

Quantum.kronig_penney_refactored.compute_wavefunction_data(ctx: SimpleNamespace) tuple[ndarray, ndarray, list[float], ndarray, ndarray]
概要:

波動関数プロット用のデータを計算します。

詳細説明:

コンテキストオブジェクト (ctx) で指定された波数 (kw) とエネルギー準位インデックス (iLevel) に基づいて、 対応する波動関数とその確率密度を計算します。 また、ポテンシャルプロファイルも計算し、波動関数と共にプロットできるように準備します。 波動関数は計算後に正規化されます。

引数:
param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:
returns:

x座標、ポテンシャル値、エネルギー準位のリスト、波動関数の複素数値、確率密度のタプル。

rtype:

tuple

例外:
raises IndexError:

指定されたiLevelが利用可能なエネルギー準位の範囲外である場合に発生します。

Quantum.kronig_penney_refactored.create_context(args: Namespace) SimpleNamespace
概要:

解析された引数からコンテキストオブジェクトを作成します。

詳細説明:

argparse.Namespaceオブジェクトの引数を元に、計算やプロットに必要な全てのパラメータを SimpleNamespaceオブジェクトとして集約します。これにより、関数の引数渡しが簡潔になります。 特に、ポテンシャルの幅 b と井戸の幅 w を計算して格納します。

引数:
param args:

コマンドライン引数を格納したNamespaceオブジェクト。

type args:

argparse.Namespace

戻り値:
returns:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

rtype:

types.SimpleNamespace

Quantum.kronig_penney_refactored.main() None
概要:

スクリプトのエントリポイントです。

詳細説明:

コマンドライン引数を解析し、run関数を呼び出してKronig-Penneyモデルの計算とプロットを実行します。 例外が発生した場合は、エラーメッセージを表示してプログラムを終了します。

引数:

なし。

戻り値:

なし。

Quantum.kronig_penney_refactored.normalize_coefficients(ci: list[complex], E: float, kw: float, xstep: float, ctx: SimpleNamespace) list[complex]
概要:

波動関数の係数を正規化します。

詳細説明:

波動関数の全空間での確率密度積分 (abs(psi(x))^2 の積分) が1になるように、 波動関数の係数 ci を調整します。積分は周期 a の範囲で数値的に行われます。 これにより、物理的な解釈が可能な波動関数が得られます。

引数:
param ci:

正規化する前の波動関数係数のリスト。

type ci:

list

param E:

電子のエネルギー (eV)。

type E:

float

param kw:

電子の波数 (pi/a 単位)。

type kw:

float

param xstep:

積分に使用するxステップサイズ。

type xstep:

float

param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:
returns:

正規化された波動関数係数のリスト。

rtype:

list

Quantum.kronig_penney_refactored.parse_args() Namespace
概要:

コマンドライン引数を解析します。

詳細説明:

Kronig-Penneyモデルの計算およびプロットに必要なパラメータをコマンドラインから受け取ります。 従来の引数形式もサポートしています。xwmax が指定されない場合は、格子定数 a の3倍がデフォルト値となります。

引数:

なし。

戻り値:
returns:

解析されたコマンドライン引数を格納したNamespaceオブジェクト。

rtype:

argparse.Namespace

Quantum.kronig_penney_refactored.plot_band(ctx: SimpleNamespace) None
概要:

Kronig-Penneyモデルのバンド構造をプロットします。

詳細説明:

与えられたコンテキストオブジェクト (ctx) のパラメータに基づいて、 波数 k に対する許容エネルギー準位 (バンド) を計算し、プロットします。 これにより、電子が占めることのできるエネルギー領域と、バンドギャップを視覚化します。 生成された図は、ctx.save と ctx.show の設定に応じて保存または表示されます。

引数:
param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:

なし。

Quantum.kronig_penney_refactored.plot_graph(ctx: SimpleNamespace) None
概要:

Kronig-Penneyモデルのdelta(E)グラフをプロットします。

詳細説明:

与えられたコンテキストオブジェクト (ctx) のパラメータに基づいて、 エネルギー E に対するデルタ関数 (compute_delta) の値を計算し、プロットします。 デルタ関数の絶対値が1を超える領域は許容エネルギーバンドに対応しません。 生成された図は、ctx.save と ctx.show の設定に応じて保存または表示されます。

引数:
param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:

なし。

Quantum.kronig_penney_refactored.plot_wavefunction(ctx: SimpleNamespace) None
概要:

Kronig-Penneyモデルの波動関数とその確率密度、およびポテンシャルプロファイルをプロットします。

詳細説明:

与えられたコンテキストオブジェクト (ctx) のパラメータに基づいて、 特定の波数 k とエネルギー準位 iLevel における波動関数 (実部、虚部) とその確率密度 (charge) を計算します。 これらのデータは、計算されたポテンシャルプロファイルと共に一つの図にプロットされ、 電子の局在化とポテンシャルの関係を視覚化します。 生成された図は、ctx.save と ctx.show の設定に応じて保存または表示されます。

引数:
param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:

なし。

Quantum.kronig_penney_refactored.print_coefficients(ci: list[complex]) None
概要:

波動関数の係数を整形して標準出力に表示します。

詳細説明:

与えられた波動関数係数 ci (通常は A, B, C, D に対応) を、 実部と虚部に分けて読みやすい形式でコンソールに出力します。

引数:
param ci:

波動関数の複素数係数のリスト。

type ci:

list

戻り値:

なし。

Quantum.kronig_penney_refactored.round01(x: float, a: float) tuple[float, int]
概要:

値を周期 a で区間 [0, a) に丸め、周期数を返します。

詳細説明:

入力値 x を周期 a で正規化し、周期内の値 x0 と、何周期分シフトしたかを示す整数 n を計算します。 x >= 0 の場合は n = floor(x / a)、x < 0 の場合は n = floor(x / a) - 1 となります。 結果として x0 は常に [0, a) の範囲に収まります。

引数:
param x:

丸める対象の浮動小数点数。

type x:

float

param a:

周期を表す浮動小数点数。

type a:

float

戻り値:
returns:

周期内の値 x0 と周期数 n のタプル。

rtype:

tuple

Quantum.kronig_penney_refactored.run(args: Namespace) None
概要:

Kronig-Penneyモデルの計算とプロットのメイン処理を実行します。

詳細説明:

まずコマンドライン引数を検証し、その後コンテキストオブジェクトを作成します。 args.mode の値に応じて、delta(E)グラフ、バンド構造、または波動関数のいずれかのプロット関数を呼び出します。

引数:
param args:

コマンドライン引数を格納したNamespaceオブジェクト。

type args:

argparse.Namespace

戻り値:

なし。

例外:
raises ValueError:

args.mode が認識されない値である場合に発生します。

Quantum.kronig_penney_refactored.save_show_close(fig: Figure, ctx: SimpleNamespace) None
概要:

Matplotlibの図を保存、表示、閉じます。

詳細説明:

コンテキストオブジェクトの設定 (ctx.save, ctx.show, ctx.output) に応じて、 生成されたMatplotlibの図 (Figureオブジェクト) をファイルに保存し、画面に表示し、 最終的に閉じます。

引数:
param fig:

保存、表示、閉じる対象のMatplotlib Figureオブジェクト。

type fig:

matplotlib.pyplot.Figure

param ctx:

計算コンテキストを格納したSimpleNamespaceオブジェクト。

type ctx:

types.SimpleNamespace

戻り値:

なし。

Quantum.kronig_penney_refactored.validate_args(args: Namespace) None
概要:

コマンドライン引数の値を検証します。

詳細説明:

各引数が物理的に妥当な範囲内にあるか、または計算に必要な最小値を満たしているかを確認します。 例えば、幅やポテンシャル高さが正であること、格子定数 a がポテンシャル幅 bwidth より大きいことなどをチェックします。

引数:
param args:

コマンドライン引数を格納したNamespaceオブジェクト。

type args:

argparse.Namespace

戻り値:

なし。

例外:
raises ValueError:

引数の値が不正な場合に発生します。