crystal_MP_Evjen.py ドキュメント

概要

このPythonスクリプト crystal_MP_Evjen.py は、Evjen法を用いて結晶のマデルングポテンシャルを計算します。

詳細説明

本スクリプトは、指定された結晶構造(格子定数とサイト情報)に基づいて、Evjen法を用いてマデルングポテンシャルおよびマデルング定数を算出します。結晶学的な各種パラメータ(格子ベクトル、体積、逆格子など)も計算・表示します。

マデルングポテンシャルの計算では、中心イオンの周りに配置された他のイオンからのクーロン相互作用を、一定の範囲内でセルを拡大しながら合計します。

関連モジュール/ファイル

  • tkcrystalbase.py: 結晶構造の基本機能を提供するモジュールです。本スクリプトはこのモジュールに依存しています。

非標準ライブラリ

本スクリプトは以下の非標準ライブラリを使用しています。

  • numpy (np): 数値計算のためのライブラリ。配列操作、数学関数(sin, cos, sqrt など)、線形代数(linalg)などに利用されます。

  • matplotlib.pyplot (plt): グラフ描画のためのライブラリ。ただし、本スクリプト内では plt はインポートされていますが、実際には使用されていません。

  • tkcrystalbase: カスタムモジュールまたはプロジェクト固有のモジュールであり、結晶学的な基本機能を提供します。

定数

スクリプト内で定義されている主な定数を以下に示します。

数学・物理定数

  • pi: 円周率 (3.14159265358979323846)

  • pi2: pi の2倍 (pi + pi)

  • torad: 度からラジアンへの変換係数 (0.01745329251944)

  • todeg: ラジアンから度への変換係数 (57.29577951472)

  • basee: 自然対数の底e (2.71828183)

物理定数

  • h: プランク定数 (6.6260755e-34 Js)

  • h_bar (hbar): 換算プランク定数 (1.05459e-34 Js)

  • c: 光速 (2.99792458e8 m/s)

  • e: 素電荷 (1.60218e-19 C)

  • me: 電子の質量 (9.1093897e-31 kg)

  • mp: 陽子の質量 (1.6726231e-27 kg)

  • mn: 中性子の質量 (1.67495e-27 kg)

  • u0: 真空の透磁率 (4.0 * 3.14 * 1e-7 Ns2C-2)

  • e0: 真空の誘電率 (8.854418782e-12 C2N-1m-2)

  • e2_4pie0: クーロン力定数 e^2 / (4 * pi * e0) (2.30711e-28 Nm2)

  • a0: ボーア半径 (5.29177e-11 m)

  • kB: ボルツマン定数 (1.380658e-23 JK-1)

  • NA: アボガドロ定数 (6.0221367e23 mol-1)

  • R: 気体定数 (8.31451 J/K/mol)

  • F: ファラデー定数 (96485.3 C/mol)

  • g: 重力加速度 (9.81 m/s2)

グローバル変数

スクリプト内で初期設定される主なグローバル変数を以下に示します。

  • lattice_parameters: 結晶の格子定数と角度を格納するリスト。

    • 例: [ 5.62, 5.62, 5.62, 90.0, 90.0, 90.0] (a, b, c, alpha, beta, gamma)

  • sites: 単位セル内のサイト情報を格納するリスト。各サイトは以下の要素を持つリストです。

    • [原子名, サイトラベル, 原子番号, 原子質量, 電荷, 半径, 色, サイトの分数座標 (numpy.array)]

  • nrange0: 単位セル内のサイトを考慮する範囲。

    • 例: [[-0.1, 1.1], [-0.1, 1.1], [-0.1, 1.1]]

  • nmax: マデルングポテンシャル計算のためにセルを拡大する範囲 (main() 関数内で利用)。コマンドライン引数で指定されない場合、初期値 1 が使用されます。

  • rmin: 同一サイトを判定するための最小距離 (0.1)。

関数

usage()

  • 概要: スクリプトの正しい使用方法を標準出力に表示します。

  • 詳細説明: この関数は、プログラムの引数が不適切である場合などに呼び出され、ユーザーに引数の指定方法を案内します。

  • 引数: なし

  • 戻り値: なし

  • 出力例:

    Usage: python crystal_MP_Evjen.py rmax
       ex: python crystal_MP_Evjen.py 1
    

terminate()

  • 概要: usage() 関数を呼び出して使用方法を表示し、プログラムを終了します。

  • 詳細説明: 通常、コマンドライン引数のエラー時など、プログラムの実行を中断する必要がある場合に呼び出されます。

  • 引数: なし

  • 戻り値: なし

main()

  • 概要: プログラムの主要な処理を実行します。

  • 詳細説明:

    1. グローバル変数 lattice_parameters から格子ベクトル、体積、逆格子情報を計算し、表示します。

    2. 単位セル内のサイトの多重度をカウントし、全てのサイト情報を拡張します。この際、nrange0 の範囲を考慮します。

    3. extpos リストに格納されたサイト情報と多重度 mult を基に、単位セル内の全電荷 qtot を計算し表示します。

    4. Evjen法を用いて、extpos[0] (最初のサイト) を中心イオンとし、指定された nmax の範囲で中心イオン周りのマデルングポテンシャルを計算します。

    5. 計算されたマデルングポテンシャルの合計から、マデルングポテンシャル(J単位およびeV単位)とマデルング定数を計算・表示します。マデルング定数の計算には、中心イオンの電荷 q0 と格子定数 a (lattice_parameters[0]) が使用されます。

    6. 最後に、terminate() 関数を呼び出してプログラムを終了します。

  • 引数: なし

  • 戻り値: なし

使用方法

本スクリプトはコマンドライン引数を一つ取ることができます。

python crystal_MP_Evjen.py nmax
  • nmax: Evjen法でマデルングポテンシャルを計算する際のセルの最大拡張範囲を指定する整数値です。

例:

python crystal_MP_Evjen.py 2

コマンドライン引数 nmax が指定されない場合、デフォルト値 1 が使用されます。

入力

  • 設定ファイル: コードからは確認できません。

  • コマンドライン引数:

    • nmax: マデルングポテンシャル計算の範囲を指定する整数値。省略可能であり、省略時にはグローバル変数 nmax の初期値 (1) が使用されます。

  • スクリプト内の直接定義:

    • lattice_parameters: 格子定数 (a, b, c, α, β, γ)。

    • sites: 各サイトの原子名、ラベル、原子番号、原子質量、電荷、半径、色、分数座標。

    • nrange0: 単位セル内のサイトを考慮する分数座標の範囲。

    • rmin: 同一サイトを判定する最小距離。

出力

スクリプトは計算結果を標準出力に表示します。主な出力内容は以下の通りです。

  • 格子情報:

    • 格子パラメータ (lattice_parameters)

    • 格子ベクトル (ax, ay, az)

    • メトリックテンソル (gij)

    • 単位セルの体積

  • 逆格子情報:

    • 逆格子パラメータ (Rlatt)

    • 逆格子ベクトル (Rax, Ray, Raz)

    • 逆格子メトリックテンソル (Rgij)

    • 逆格子単位セルの体積

  • サイト情報:

    • nrange0 で指定された範囲内の全てのサイト情報 (ラベル、分数座標、電荷、多重度、重み)

    • 単位セル内の総電荷 (qtot)

  • マデルングポテンシャル:

    • 計算されたマデルングポテンシャル (ジュール J 単位)

    • 計算されたマデルングポテンシャル (電子ボルト eV 単位)

    • 計算されたマデルング定数

エラー処理

  • コマンドライン引数の数が不足している場合 (nmax が指定されていないか、追加の引数が多すぎる場合)、usage() 関数が呼び出され、使用方法が表示された後にプログラムが終了します。

  • 引数 nmax が整数に変換できない場合の挙動は、コードからは直接確認できません。Pythonのデフォルトの例外処理に従う可能性があります。

注意事項

  • 本スクリプトは tkcrystalbase.py モジュールが同じディレクトリまたはPythonの検索パス内に存在することを前提としています。

  • matplotlib.pyplot がインポートされていますが、本スクリプト内では描画機能は使用されていません。

著作権/ライセンス

コードからは確認できません。

著者/連絡先

コードからは確認できません。