schrodinger1d プログラム仕様

1次元シュレーディンガー方程式ソルバー

このスクリプトは、1次元の定常シュレーディンガー方程式を射撃法を用いて数値的に解きます。 原子単位系 (atomic units) を使用し、Verlet積分を用いて波動関数を計算します。 境界条件として「漸近条件 (asymptotic)」または「ゼロ条件 (zero)」を選択でき、 結果はExcelファイルに保存され、matplotlibで可視化されます。

schrodinger1d.py 技術ドキュメント

V(x)[ソース]

ポテンシャルエネルギーを計算します。

詳細説明:

現在の実装では、調和振動子ポテンシャル V(x) = 0.5 * x^2 (Ha) を使用しています。 他のポテンシャルを使用する場合は、この関数を変更してください。

パラメータ:

x (float or numpy.ndarray) -- 位置 (原子単位)

戻り値:

ポテンシャルエネルギー V(x) (Ha)

戻り値の型:

float or numpy.ndarray

initialize()[ソース]

コマンドライン引数を初期化し、パースします。

詳細説明:

argparse モジュールを使用して、エネルギーの推定値、計算領域、メッシュ点数、 波動関数の発散閾値、レポート間隔、出力ファイル名、境界条件、初期微分値といった パラメータを定義します。

戻り値:

  • parser (argparse.ArgumentParser): 引数パーサーオブジェクト

  • args (argparse.Namespace): パースされた引数の名前空間

戻り値の型:

tuple[argparse.ArgumentParser, argparse.Namespace]

main()[ソース]

プログラムのメイン処理を実行します。

詳細説明:
  1. コマンドライン引数をパースして初期設定を行います。

  2. パースされた引数を使用して solve_schrodinger 関数を呼び出し、 1次元シュレーディンガー方程式を解きます。

  3. 計算結果のメッセージと終了点の波動関数値を出力します。

  4. save_and_plot 関数を呼び出し、結果をExcelに保存し、グラフを表示します。

戻り値:

なし

戻り値の型:

None

save_and_plot(x, psi, outfile, diverged=False, diverged_x=None)[ソース]

計算結果の波動関数データをExcelファイルに保存し、matplotlibでプロットします。

詳細説明:

波動関数 psi(x) と確率密度 |psi(x)|^2 をExcelファイル (outfile) に保存します。 matplotlibを用いて psi(x)|psi(x)|^2 をグラフ表示します。 波動関数が発散した場合は、発散が始まったx座標に垂直な破線が追加され、y軸が対数スケールになります。

パラメータ:
  • x (numpy.ndarray) -- x座標の配列

  • psi (numpy.ndarray) -- 計算された波動関数の配列

  • outfile (str) -- データ保存先のExcelファイル名

  • diverged (bool) -- 波動関数が計算中に発散したかどうかを示すフラグ。デフォルトはFalse。

  • diverged_x (float or None) -- 波動関数が発散し始めたx座標。diverged がTrueの場合にのみ使用されます。 デフォルトはNone。

戻り値:

なし

戻り値の型:

None

solve_schrodinger(E, L, nx, psi_max, report_step, bc, eps)[ソース]

1次元シュレーディンガー方程式を射撃法で解きます。

詳細説明:

Verlet積分を用いて波動関数を数値的に伝播させます。 指定された境界条件 (bc) に基づいて初期条件を設定し、 計算中に波動関数が psi_max を超えた場合、発散と判断して計算を中断します。 計算の進行状況は report_step 間隔で出力されます。

パラメータ:
  • E (float) -- エネルギー固有値の推定値 (Ha)

  • L (float) -- 計算領域の半分のサイズ。xは[-L, L]の範囲になります。

  • nx (int) -- メッシュ点の数

  • psi_max (float) -- 波動関数の発散を検出するための閾値

  • report_step (int) -- 計算の進行状況を報告するステップ間隔。0以下の場合は報告しません。

  • bc (str) -- 境界条件のタイプ ("asymptotic" または "zero")

  • eps (float) -- bc="zero" の場合に使用される、x=-Lにおける波動関数の初期微分値

戻り値:

  • x_full (numpy.ndarray): 計算領域のx座標の配列

  • psi_full (numpy.ndarray): 計算された波動関数の配列。発散した場合は、発散点までの配列。

  • info (dict): 計算結果に関する情報を含む辞書。 - "success" (bool): 積分が正常に完了したか。 - "diverged" (bool): 波動関数が発散したか。 - "diverged_x" (float or None): 波動関数が発散し始めたx座標。発散しなかった場合はNone。 - "message" (str): 計算結果に関する簡潔なメッセージ。

戻り値の型:

tuple[numpy.ndarray, numpy.ndarray, dict]