kpath_seekpath.py 技術ドキュメント

プログラムの動作

kpath_seekpath.py は、与えられた結晶構造ファイル(CIF形式)から、バンド構造計算のための標準的なk点パス(高対称点経路)と高対称点の分率座標を決定し、標準出力に表示するPythonスクリプトです。

このプログラムの主な機能は以下の通りです。

  1. 結晶構造の読み込み: CIFファイルから結晶構造情報を読み込みます。

  2. 原始セルの取得: 読み込んだ構造から原始セル(Primitive Cell)をPymatgenライブラリを使用して取得します。

  3. 高対称k点パスの決定: seekpath ライブラリを用いて、原始セルの対称性に基づいた標準的な高対称k点パスを自動的に決定します。

  4. 高対称点の座標表示: 決定された高対称点の分率座標を標準出力に表示します。

  5. k点パスの表示: 各高対称点を結ぶパスを標準出力に表示します。

これにより、ユーザーはDFT(密度汎関数理論)などの計算手法でバンド構造を計算する際に必要なk点パス情報を簡単に得ることができます。

原理

kpath_seekpath.py は、Hinumaらによって提案された結晶学に基づいたバンド構造図のk点パス決定アルゴリズムを実装したseekpathライブラリを利用しています。

主要なアルゴリズムは以下のステップで構成されます。

  1. 結晶構造の対称性解析: 入力された結晶構造(原始セル)は、まずspglibライブラリ(seekpathが内部的に利用)によって空間群対称性が解析されます。これにより、結晶の基本的な対称操作が識別されます。

  2. ブリルアンゾーンと高対称点の決定: 決定された空間群と単位格子ベクトルに基づき、その構造のブリルアンゾーン(Brillouin zone)が定義されます。そして、国際結晶学連合(IUCr)によって定められた、または一般的に受け入れられている慣習に従って、ブリルアンゾーン内の高対称点(High-symmetry k-points)が識別され、それらの座標が決定されます。これらの点は、バンド構造が対称性のために特異な挙動を示すことが多い場所です。

  3. 標準的なk点パスの生成: 識別された高対称点の中から、バンド構造図を作成するための標準的なパスが選択されます。このパスは、Γ点(ブリルアンゾーンの中心)から始まり、様々な高対称点を経由して再びΓ点に戻る、またはその他の重要な経路を辿るように設計されています。

seekpathライブラリは、結晶構造情報(単位格子ベクトル、原子の分率座標、原子番号)をspglib互換のタプル形式 (cell, positions, atomic_numbers) で受け取り、上述の原理に基づいて高対称点パスと座標を計算します。

必要な非標準ライブラリとインストール方法

このプログラムの実行には、以下の非標準Pythonライブラリが必要です。

  • numpy: 数値計算を効率的に行うためのライブラリです。

  • pymatgen: 結晶構造操作や解析を行うための強力なライブラリです。

  • seekpath: 結晶構造から高対称k点パスを決定するためのライブラリです。

これらのライブラリは、Pythonのパッケージマネージャーであるpipを使用してインストールできます。コマンドラインまたはターミナルで以下のコマンドを実行してください。

pip install numpy pymatgen seekpath

必要な入力ファイル

プログラムは、解析対象の結晶構造データを含むファイルを必要とします。

  • ファイル形式: CIF (Crystallographic Information File) 形式を期待します。pymatgenライブラリがサポートする他の形式(例: POSCAR、XYZなど)も読み込み可能ですが、CIFが推奨されます。

  • デフォルトファイル名: 引数が指定されない場合、プログラムは現在のディレクトリにある ZnO.cif という名前のファイルをデフォルトで読み込もうとします。

  • データ構造: CIFファイルには、単位格子パラメータ、空間群情報、原子の種類と座標(分率座標または直交座標)、およびその他の結晶学的な情報が含まれている必要があります。

例:ZnO.cif

#_chemical_name_common 'Zinc oxide'
#_chemical_formula_sum 'O1 Zn1'
#_symmetry_space_group_name_H-M 'P 63 m c'
#_cell_length_a 3.2498
#_cell_length_b 3.2498
#_cell_length_c 5.2066
#_cell_angle_alpha 90.0
#_cell_angle_beta 90.0
#_cell_angle_gamma 120.0
_atom_site_type_symbol    Zn    O
_atom_site_fract_x        0.333333  0.333333
_atom_site_fract_y        0.666667  0.666667
_atom_site_fract_z        0.0       0.381
loop_
_atom_site_label
_atom_site_type_symbol
_atom_site_fract_x
_atom_site_fract_y
_atom_site_fract_z
Zn1  Zn  0.333333  0.666667  0.000000
O1   O   0.333333  0.666667  0.381000

生成される出力ファイル

kpath_seekpath.py は、いかなるファイルもディスクに保存しません。代わりに、すべての結果を標準出力 (stdout) に直接表示します。

出力される内容は以下の2つのセセクションに分かれます。

  1. === 経路 ===:

    • ブリルアンゾーン内の高対称点間の経路がテキスト形式で表示されます。各行は1つの経路セグメントを示し、 で接続された高対称点のシンボルが含まれます。

    • 例: Γ MM K など。複数のパスが結合される場合は K|U X のように表示されることもあります。

  2. === 高対称点座標 ===:

    • 決定された高対称点のシンボル(例: Γ, M, K など)と、それに対応する3次元の分率座標(Fractional Coordinates)がペアで表示されます。

    • 例: Γ : [0. 0. 0.]M : [0.5 0. 0.] など。

これらの情報は、バンド構造計算の入力として、または結果の可視化のために利用できます。

コマンドラインでの使用例 (Usage)

kpath_seekpath.py は、コマンドラインから実行されます。入力ファイルは引数として渡すことができます。

基本構文:

python kpath_seekpath.py [入力CIFファイル]
  • python kpath_seekpath.py: Pythonインタプリタを指定してスクリプトを実行します。

  • [入力CIFファイル]: 解析したい結晶構造データが記述されたCIFファイルのパスを指定します。この引数を省略した場合、プログラムはデフォルトで ZnO.cif を読み込もうとします。

コマンドラインでの具体的な使用例

ここでは、ZnO.cif を入力ファイルとして使用する具体的な例を示します。

事前に、ZnO.cif というファイルをプログラムと同じディレクトリに用意してください。

# ZnO.cif の内容(例:実際のファイル内容に合わせてください)
data_ZnO
_audit_creation_method         'pymatgen.core.structure.Structure object'
_chemical_formula_structural   'ZnO'
_chemical_formula_sum          'Zn1 O1'
_cell_length_a                 3.2498
_cell_length_b                 3.2498
_cell_length_c                 5.2066
_cell_angle_alpha              90
_cell_angle_beta               90
_cell_angle_gamma              120
_symmetry_space_group_name_H-M 'P 63 m c'
_symmetry_Int_Tables_number    186
_atom_site_label               Zn1
_atom_site_type_symbol         Zn
_atom_site_fract_x             0.3333333333
_atom_site_fract_y             0.6666666667
_atom_site_fract_z             0
_atom_site_label               O1
_atom_site_type_symbol         O
_atom_site_fract_x             0.3333333333
_atom_site_fract_y             0.6666666667
_atom_site_fract_z             0.381
  1. デフォルトの入力ファイルを使用する場合: ZnO.cif が現在のディレクトリに存在する場合、引数なしで実行できます。

    python kpath_seekpath.py
    

    実行結果の例:

    === 経路 ===
    Γ → M
    M → K
    K → Γ
    Γ → A
    A → L
    L → H
    H → A
    A → M
    
    === 高対称点座標 ===
    Γ   : [0. 0. 0.]
    M   : [0.5 0. 0.]
    K   : [0.33333333 0.33333333 0.        ]
    A   : [0.  0.  0.5]
    L   : [0.5 0.  0.5]
    H   : [0.33333333 0.33333333 0.5       ]
    
  2. 特定のCIFファイルを指定する場合: Si.cif という名前のシリコン結晶のファイルがあると仮定します。

    python kpath_seekpath.py Si.cif
    

    実行結果の例: (シリコン (空間群Fm-3m, No. 227) の標準的なパスの例)

    === 経路 ===
    Γ → X
    X → W
    W → K
    K → Γ
    Γ → L
    L → U
    U → W
    W → L
    L → K|U
    K|U → X
    
    === 高対称点座標 ===
    Γ   : [0. 0. 0.]
    X   : [0.5 0.  0.5]
    W   : [0.5 0.25 0.75]
    K   : [0.375 0.375 0.75]
    L   : [0.5 0.5 0.5]
    U   : [0.625 0.25 0.625]