kronig_penney_refactored.py ドキュメント
概要
矩形ポテンシャルを用いたKronig-Penneyモデルに基づき、電子のエネルギーバンド構造、波動関数、およびデルタ関数グラフを計算しプロットするPythonスクリプト。
説明
このスクリプトは、以下の3つの主要なモードで動作します。
delta(E)グラフのプロット (graphモード)バンド構造のプロット (
bandモード)波動関数のプロット (
wfモード)
各モードでは、ポテンシャルの幅、高さ、格子定数などのパラメータを調整できます。
主な機能は以下の通りです。
Kronig-Penney方程式の解に基づくエネルギーデルタ関数の計算。
エネルギーバンドの計算とプロット。
選択されたエネルギー準位に対応する波動関数の計算とプロット。
関連リンク: kronig_penney_refactored_usage
非標準ライブラリ
このスクリプトは以下の非標準ライブラリを使用しています。
matplotlib.pyplot: データのプロットに使用されます。numpy: 数値計算、特に配列操作や数学関数に使用されます。numpy.linalg: 線形代数演算、特に行列の解法に使用されます。
定数
スクリプト内で使用される主要な物理定数およびデフォルトパラメータは以下の通りです。
PI: 円周率の近似値 (3.14159265358979323846)PI2:2.0 * PIH: プランク定数 (6.6260755e-34J s)HBAR: 換算プランク定数 (1.05459e-34J s)ELEMENTARY_CHARGE: 素電荷 (1.60218e-19C)ELECTRON_MASS: 電子の静止質量 (9.1093897e-31kg)
デフォルトの動作パラメータは DEFAULT オブジェクト (types.SimpleNamespace) に格納されており、コマンドライン引数で上書きされない限りこれらの値が使用されます。
mode:graph(デフォルトの動作モード:graph,band,wfのいずれか)a:5.4064(格子定数、単位: Å)bwidth:0.5(ポテンシャル障壁の幅、単位: Å)bpot:10.0(ポテンシャルの高さ、単位: eV)kg:0.0(graphモードで使用される波数k、単位:pi/a)emin:0.0(エネルギーの最小値、単位: eV)emax:9.5(エネルギーの最大値、単位: eV)nE:51(エネルギー探索点の数)nEsearch:51(バンド計算におけるエネルギー探索点の数)eps:1.0e-8(ニュートン法における収束許容誤差)nmaxiter:100(ニュートン法における最大反復回数)dump:0.0(ニュートン法における微分値調整のためのダンプファクター)kmin:-0.5(bandモードで使用される波数の最小値、単位:pi/a)kmax:0.5(bandモードで使用される波数の最大値、単位:pi/a)nk:21(波数探索点の数)erange_min:0.0(バンドプロットのエネルギーY軸最小値、単位: eV)erange_max:10.0(バンドプロットのエネルギーY軸最大値、単位: eV)nMaxLevel:15(プロットするエネルギーバンドの最大レベル数)xwmin:0.0(波動関数プロットのx軸最小値、単位: Å)xwmax:None(波動関数プロットのx軸最大値、単位: Å。Noneの場合3.0 * a)nxw:101(波動関数プロットのx座標点の数)kw:0.0(wfモードで使用される波数k、単位:pi/a)iLevel:0(wfモードで使用されるエネルギー準位のインデックス)figsize_w:6.0(グラフの幅、単位: インチ)figsize_h:8.0(グラフの高さ、単位: インチ)wf_figsize_w:16.0(波動関数グラフの幅、単位: インチ)wf_figsize_h:4.0(波動関数グラフの高さ、単位: インチ)fontsize:12(グラフのフォントサイズ)legend_fontsize:8(凡例のフォントサイズ)show:1(グラフを表示するかどうか、1:表示、0:非表示)save:0(グラフをファイルに保存するかどうか、1:保存、0:非保存)output:kronig_penney.png(保存する画像ファイルのパス)
コマンドライン引数
スクリプトは argparse モジュールを使用してコマンドライン引数を解析します。
利用可能な引数とそれぞれの説明は以下の通りです。
mode説明: スクリプトの動作モードを選択します。
デフォルト:
graph選択肢:
graph,band,wf
legacy_args説明: 従来の引数形式 (位置引数) を受け取ります。
modeに応じて異なるパラメータにマップされます。
--a型:
float説明: 格子定数
a(単位: Å) を設定します。デフォルト:
5.4064
--bwidth型:
float説明: ポテンシャル障壁の幅 (
b) (単位: Å) を設定します。デフォルト:
0.5
--bpot型:
float説明: ポテンシャルの高さ (
V0) (単位: eV) を設定します。デフォルト:
10.0
--kg型:
float説明:
graphモードで使用される波数k(単位:pi/a) を設定します。デフォルト:
0.0
--Emin(dest="emin")型:
float説明: エネルギーの最小値 (単位: eV) を設定します。
デフォルト:
0.0
--Emax(dest="emax")型:
float説明: エネルギーの最大値 (単位: eV) を設定します。
デフォルト:
9.5
--nE型:
int説明: エネルギー探索点の数を設定します。
デフォルト:
51
--nEsearch型:
int説明: バンド計算におけるエネルギー探索点の数を設定します。指定がない場合、
--nEの値が使用されます。デフォルト:
51
--eps型:
float説明: ニュートン法における収束許容誤差を設定します。
デフォルト:
1.0e-8
--nmaxiter型:
int説明: ニュートン法における最大反復回数を設定します。
デフォルト:
100
--dump型:
float説明: ニュートン法における微分値調整のためのダンプファクターを設定します。
デフォルト:
0.0
--kmin型:
float説明:
bandモードで使用される波数の最小値 (単位:pi/a) を設定します。デフォルト:
-0.5
--kmax型:
float説明:
bandモードで使用される波数の最大値 (単位:pi/a) を設定します。デフォルト:
0.5
--nk型:
int説明: 波数探索点の数を設定します。
デフォルト:
21
--ErangeMin(dest="erange_min")型:
float説明: バンドプロットのエネルギーY軸最小値 (単位: eV) を設定します。
デフォルト:
0.0
--ErangeMax(dest="erange_max")型:
float説明: バンドプロットのエネルギーY軸最大値 (単位: eV) を設定します。
デフォルト:
10.0
--nMaxLevel型:
int説明: プロットするエネルギーバンドの最大レベル数を設定します。
デフォルト:
15
--kw型:
float説明:
wfモードで使用される波数k(単位:pi/a) を設定します。デフォルト:
0.0
--iLevel型:
int説明:
wfモードで使用されるエネルギー準位のインデックスを設定します。デフォルト:
0
--xwmin型:
float説明: 波動関数プロットのx軸最小値 (単位: Å) を設定します。
デフォルト:
0.0
--xwmax型:
float説明: 波動関数プロットのx軸最大値 (単位: Å) を設定します。指定されない場合、
3.0 * aがデフォルトとなります。デフォルト:
None
--nxw型:
int説明: 波動関数プロットのx座標点の数を設定します。
デフォルト:
101
--figsizeW(dest="figsize_w")型:
float説明: グラフの幅 (単位: インチ) を設定します。
デフォルト:
6.0
--figsizeH(dest="figsize_h")型:
float説明: グラフの高さ (単位: インチ) を設定します。
デフォルト:
8.0
--wfFigsizeW(dest="wf_figsize_w")型:
float説明: 波動関数グラフの幅 (単位: インチ) を設定します。
デフォルト:
16.0
--wfFigsizeH(dest="wf_figsize_h")型:
float説明: 波動関数グラフの高さ (単位: インチ) を設定します。
デフォルト:
4.0
--fontsize型:
int説明: グラフのフォントサイズを設定します。
デフォルト:
12
--legendFontsize(dest="legend_fontsize")型:
int説明: 凡例のフォントサイズを設定します。
デフォルト:
8
--show型:
int説明: グラフを表示するかどうかを設定します。
選択肢:
0(非表示),1(表示)デフォルト:
1
--save型:
int説明: グラフをファイルに保存するかどうかを設定します。
選択肢:
0(非保存),1(保存)デフォルト:
0
--output型:
str説明: 保存する画像ファイルのパスを設定します。
デフォルト:
kronig_penney.png
入出力
入力
スクリプトは、コマンドライン引数を通じてのみ入力パラメータを受け取ります。ファイルからのデータ読み込みは行われません。
出力
標準出力:
計算の進行状況や、中間結果 (エネルギー準位、波動関数係数、正規化係数など) が表示されます。
エラーや警告メッセージも標準出力に出力されます。
画像ファイル:
--save 1オプションが指定された場合、計算結果はPNG形式の画像ファイルとして保存されます。出力ファイル名は
--outputオプションで指定でき、デフォルトではkronig_penney.pngとなります。出力される図の種類は、選択された
mode(graph,band,wf) によって異なります。
関数
parse_args()
概要: コマンドライン引数を解析します。
詳細説明:
Kronig-Penneyモデルの計算およびプロットに必要なパラメータをコマンドラインから受け取ります。
従来の引数形式もサポートしています。xwmax が指定されない場合は、格子定数 a の3倍がデフォルト値となります。
:returns: 解析されたコマンドライン引数を格納した Namespace オブジェクト。
:rtype: argparse.Namespace
apply_legacy_args()
概要: 旧形式のコマンドライン引数を適用します。
詳細説明:
mode の後に続く位置引数として指定された値を解析し、args オブジェクトの対応する属性に設定します。
これにより、スクリプトの古いバージョンとの互換性が保たれます。
:param args: コマンドライン引数を格納した Namespace オブジェクト。
:type args: argparse.Namespace
:returns: なし。
round01()
概要:
値を周期 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
validate_args()
概要: コマンドライン引数の値を検証します。
詳細説明:
各引数が物理的に妥当な範囲内にあるか、または計算に必要な最小値を満たしているかを確認します。
例えば、幅やポテンシャル高さが正であること、格子定数 a がポテンシャル幅 bwidth より大きいことなどをチェックします。
:param args: コマンドライン引数を格納した Namespace オブジェクト。
:type args: argparse.Namespace
:returns: なし。 :raises ValueError: 引数の値が不正な場合に発生します。
create_context()
概要: 解析された引数からコンテキストオブジェクトを作成します。
詳細説明:
argparse.Namespace オブジェクトの引数を元に、計算やプロットに必要な全てのパラメータを
SimpleNamespace オブジェクトとして集約します。これにより、関数の引数渡しが簡潔になります。
特に、ポテンシャルの幅 b と井戸の幅 w を計算して格納します。
:param args: コマンドライン引数を格納した Namespace オブジェクト。
:type args: argparse.Namespace
:returns: 計算コンテキストを格納した SimpleNamespace オブジェクト。
:rtype: types.SimpleNamespace
save_show_close()
概要:
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
:returns: なし。
compute_potential_value()
概要:
指定された位置 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
compute_potential_profile()
概要: 指定された範囲とステップでポテンシャルプロファイルを計算します。
詳細説明:
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
compute_delta()
概要:
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: 井戸の幅 (Å)。
:type w: float
:param b: ポテンシャル障壁の幅 (Å)。
:type b: float
:param V0: ポテンシャルの高さ (eV)。
:type V0: float
:returns: デルタ関数の値。
:rtype: float
compute_boundary_matrix()
概要:
波動関数の境界条件を記述する 4x4 行列を計算します。
詳細説明:
Kronig-Penneyモデルにおける各領域 (井戸と障壁) での波動関数の係数間の関係を記述する行列を構築します。
この行列は、井戸と障壁の界面における波動関数とその導関数の連続性条件に基づいています。
電子のエネルギー E、波数 k、井戸の幅 w、障壁の幅 b、およびポテンシャルの高さ V0 が入力として必要です。
:param k: 電子の波数 (pi/a 単位)。
:type k: float
:param E: 電子のエネルギー (eV)。
:type E: float
:param w: 井戸の幅 (Å)。
:type w: float
:param b: ポテンシャル障壁の幅 (Å)。
:type b: float
:param V0: ポテンシャルの高さ (eV)。
:type V0: float
:returns: 境界条件を記述する 4x4 の複素数行列。
:rtype: numpy.ndarray
compute_wave_coefficients()
概要: 波動関数の係数を計算します。
詳細説明:
周期ポテンシャル中の電子の波動関数は、Blochの定理により周期部分と平面波部分に分けられます。
この関数は、境界条件行列を解くことで、井戸と障壁領域における波動関数の未知の係数 A, B, C, D を計算します。
特に、井戸領域の左側から右側への入射波の係数を 1.0 と仮定し、残りの3つの係数を連立一次方程式の解として求めます。
:param k: 電子の波数 (pi/a 単位)。
:type k: float
:param E: 電子のエネルギー (eV)。
:type E: float
:param w: 井戸の幅 (Å)。
:type w: float
:param b: ポテンシャル障壁の幅 (Å)。
:type b: float
:param V0: ポテンシャルの高さ (eV)。
:type V0: float
:returns: 波動関数の4つの複素数係数 (A, B, C, D) のリスト。
:rtype: list
check_wave_coefficients()
概要: 計算された波動関数係数が境界条件を満たしているか検証します。
詳細説明:
計算された波動関数の係数 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: 井戸の幅 (Å)。
:type w: float
:param b: ポテンシャル障壁の幅 (Å)。
:type b: float
:param V0: ポテンシャルの高さ (eV)。
:type V0: float
:param eps: 許容誤差。
:type eps: float
:param is_print: 結果を標準出力に表示するかどうかを示すフラグ (0:表示しない, 1:表示する)。
:type is_print: int
:returns: なし。 :raises RuntimeError: 係数が境界条件を満たさない場合に発生します。
compute_refined_energy()
概要: ニュートン法を用いてエネルギー準位を精密化します。
詳細説明:
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: 井戸の幅 (Å)。
:type w: float
:param b: ポテンシャル障壁の幅 (Å)。
: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
compute_energy_levels()
概要: 指定されたエネルギー範囲内で許容されるエネルギー準位を計算します。
詳細説明:
エネルギー範囲 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: 井戸の幅 (Å)。
:type w: float
:param b: ポテンシャル障壁の幅 (Å)。
:type b: float
:param V0: ポテンシャルの高さ (eV)。
:type V0: float
:param ctx: 計算コンテキストを格納した SimpleNamespace オブジェクト。
:type ctx: types.SimpleNamespace
:returns: 許容されるエネルギー準位のリストと、それぞれのエネルギー準位に対応する波動関数係数のリストのタプル。
:rtype: tuple
compute_wavefunction()
概要:
指定された位置 x における波動関数の値を計算します。
詳細説明:
計算された波動関数係数 ci を使用して、Blochの定理に基づく波動関数を評価します。
位置 x を周期 a で正規化し、それが井戸領域か障壁領域かに応じて適切な波動関数形式を適用します。
結果は複素数値の波動関数となります。
:param ci: 波動関数の複素数係数のリスト (A, B, C, D)。
:type ci: list
:param x: 波動関数の値を評価するx座標 (Å)。
:type x: float
:param kw: 電子の波数 (pi/a 単位)。
:type kw: float
:param E: 電子のエネルギー (eV)。
:type E: float
:param w: 井戸の幅 (Å)。
:type w: float
:param b: ポテンシャル障壁の幅 (Å)。
:type b: float
:param V0: ポテンシャルの高さ (eV)。
:type V0: float
:returns: x における波動関数の複素数値。
:rtype: complex
:raises ValueError: 内部でのx座標の正規化が不正な場合に発生します。
normalize_coefficients()
概要: 波動関数の係数を正規化します。
詳細説明:
波動関数の全空間での確率密度積分 (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
compute_graph_data()
概要:
delta(E) グラフプロット用のデータを計算します。
詳細説明:
コンテキストオブジェクト (ctx) で指定されたエネルギー範囲 (emin から emax) と
ステップ数 (nE) に基づいて、各エネルギー E におけるデルタ関数 (compute_delta) の値を計算します。
このデータは、許容エネルギーバンドを視覚化するために使用されます。
:param ctx: 計算コンテキストを格納した SimpleNamespace オブジェクト。
:type ctx: types.SimpleNamespace
:returns: エネルギー値のリストと対応するデルタ関数の値のリストのタプル。
:rtype: tuple
compute_band_data()
概要: バンド構造プロット用のデータを計算します。
詳細説明:
コンテキストオブジェクト (ctx) で指定された波数範囲 (kmin から kmax) と
ステップ数 (nk) に基づいて、各波数 k における許容エネルギー準位を計算します。
これらのエネルギー準位は、compute_energy_levels 関数を用いて探索され、
バンド構造としてプロットされます。
:param ctx: 計算コンテキストを格納した SimpleNamespace オブジェクト。
:type ctx: types.SimpleNamespace
:returns: 波数 k のリスト、各波数におけるエネルギー準位の numpy.ndarray、および見つかった最大バンドレベル数のタプル。
:rtype: tuple
compute_wavefunction_data()
概要: 波動関数プロット用のデータを計算します。
詳細説明:
コンテキストオブジェクト (ctx) で指定された波数 (kw) とエネルギー準位インデックス (iLevel) に基づいて、
対応する波動関数とその確率密度を計算します。
また、ポテンシャルプロファイルも計算し、波動関数と共にプロットできるように準備します。
波動関数は計算後に正規化されます。
:param ctx: 計算コンテキストを格納した SimpleNamespace オブジェクト。
:type ctx: types.SimpleNamespace
:returns: x座標、ポテンシャル値、エネルギー準位のリスト、波動関数の複素数値、確率密度のタプル。
:rtype: tuple
:raises IndexError: 指定された iLevel が利用可能なエネルギー準位の範囲外である場合に発生します。
print_coefficients()
概要: 波動関数の係数を整形して標準出力に表示します。
詳細説明:
与えられた波動関数係数 ci (通常は A, B, C, D に対応) を、
実部と虚部に分けて読みやすい形式でコンソールに出力します。
:param ci: 波動関数の複素数係数のリスト。
:type ci: list
:returns: なし。
plot_graph()
概要:
Kronig-Penneyモデルの delta(E) グラフをプロットします。
詳細説明:
与えられたコンテキストオブジェクト (ctx) のパラメータに基づいて、
エネルギー E に対するデルタ関数 (compute_delta) の値を計算し、プロットします。
デルタ関数の絶対値が 1 を超える領域は許容エネルギーバンドに対応しません。
生成された図は、ctx.save と ctx.show の設定に応じて保存または表示されます。
:param ctx: 計算コンテキストを格納した SimpleNamespace オブジェクト。
:type ctx: types.SimpleNamespace
:returns: なし。
plot_band()
概要: Kronig-Penneyモデルのバンド構造をプロットします。
詳細説明:
与えられたコンテキストオブジェクト (ctx) のパラメータに基づいて、
波数 k に対する許容エネルギー準位 (バンド) を計算し、プロットします。
これにより、電子が占めることのできるエネルギー領域と、バンドギャップを視覚化します。
生成された図は、ctx.save と ctx.show の設定に応じて保存または表示されます。
:param ctx: 計算コンテキストを格納した SimpleNamespace オブジェクト。
:type ctx: types.SimpleNamespace
:returns: なし。
plot_wavefunction()
概要: Kronig-Penneyモデルの波動関数とその確率密度、およびポテンシャルプロファイルをプロットします。
詳細説明:
与えられたコンテキストオブジェクト (ctx) のパラメータに基づいて、
特定の波数 k とエネルギー準位 iLevel における波動関数 (実部、虚部) とその確率密度 (charge) を計算します。
これらのデータは、計算されたポテンシャルプロファイルと共に一つの図にプロットされ、
電子の局在化とポテンシャルの関係を視覚化します。
生成された図は、ctx.save と ctx.show の設定に応じて保存または表示されます。
:param ctx: 計算コンテキストを格納した SimpleNamespace オブジェクト。
:type ctx: types.SimpleNamespace
:returns: なし。
run()
概要: Kronig-Penneyモデルの計算とプロットのメイン処理を実行します。
詳細説明:
まずコマンドライン引数を検証し、その後コンテキストオブジェクトを作成します。
args.mode の値に応じて、delta(E) グラフ、バンド構造、または波動関数のいずれかのプロット関数を呼び出します。
:param args: コマンドライン引数を格納した Namespace オブジェクト。
:type args: argparse.Namespace
:returns: なし。
:raises ValueError: args.mode が認識されない値である場合に発生します。
main()
概要: スクリプトのエントリポイントです。
詳細説明:
コマンドライン引数を解析し、run 関数を呼び出してKronig-Penneyモデルの計算とプロットを実行します。
例外が発生した場合は、エラーメッセージを表示してプログラムを終了します。
:returns: なし。
使用例
デルタ関数 (graph モード)
波数 k = 0.0 におけるエネルギー E に対するデルタ関数のグラフをデフォルト設定で表示します。
python kronig_penney_refactored.py graph
格子定数 a=6.0 Å、障壁幅 bwidth=0.8 Å、ポテンシャル高さ bpot=12.0 eV、波数 kg=0.25 pi/a を指定し、エネルギー範囲を 0 から 15 eV に広げてプロットを output_graph.png に保存します。
python kronig_penney_refactored.py graph --a 6.0 --bwidth 0.8 --bpot 12.0 --kg 0.25 --emin 0.0 --emax 15.0 --save 1 --output output_graph.png
バンド構造 (band モード)
エネルギーバンド構造をデフォルト設定で表示します。
python kronig_penney_refactored.py band
格子定数 a=5.0 Å、障壁幅 bwidth=0.6 Å、ポテンシャル高さ bpot=8.0 eV を指定し、波数範囲を -0.5 から 0.5 pi/a に設定してプロットを output_band.png に保存します。
python kronig_penney_refactored.py band --a 5.0 --bwidth 0.6 --bpot 8.0 --kmin -0.5 --kmax 0.5 --save 1 --output output_band.png
波動関数 (wf モード)
波数 k = 0.0 pi/a における0番目のエネルギー準位の波動関数と確率密度、ポテンシャルプロファイルをデフォルト設定で表示します。
python kronig_penney_refactored.py wf
波数 k = 0.2 pi/a における1番目のエネルギー準位の波動関数を、x範囲 -a から 3a までプロットし、 wf_output.png に保存します。
python kronig_penney_refactored.py wf --a 5.4064 --kw 0.2 --iLevel 1 --xwmin -5.4064 --xwmax 16.2192 --save 1 --output wf_output.png