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'を使用してインストールできます。コマンドラインまたはターミナルで以下のコマンドを実行してください。

'''bash pip install numpy pymatgen seekpath '''

必要な入力ファイル

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

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

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

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

例:'ZnO.cif'

'''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つの経路セグメントを示し、' → ' で接続された高対称点のシンボルが含まれます。

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

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

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

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

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

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

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

基本構文:

'''bash python kpath_seekpath.py [入力CIFファイル] '''

  • 'python kpath_seekpath.py': Pythonインタプリタを指定してスクリプトを実行します。

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

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

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

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

'''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' が現在のディレクトリに存在する場合、引数なしで実行できます。

    '''bash 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' という名前のシリコン結晶のファイルがあると仮定します。

    '''bash 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] '''