crystal.kpath_pymatgen のソースコード

"""
pymatgen を用いて結晶構造の高対称k点経路を計算し表示するスクリプト。

概要:
    入力された結晶構造のBravais格子に基づいて高対称k点経路を計算し、表示します。

詳細説明:
    このスクリプトは、指定されたCIFファイルから結晶構造を読み込み、
    その原始構造 (`primitive structure`) に基づいて高対称k点経路を生成します。
    経路タイプは `hinuma` (Hinuma et al. 2017) または `sc` (Setyawan-Curtarolo 2010)
    から選択でき、デフォルトは `hinuma` です。
    計算されたk点経路のセグメントと、各高対称点の分数座標を標準出力に表示します。
    コマンドライン引数を使用することで、入力ファイルと経路タイプを動的に指定できます。
    例: `python kpath_pymatgen.py my_structure.cif sc`

引数 (Parameters):
    :param sys.argv[1]: (str, optional) 入力CIFファイルへのパス。デフォルトは 'ZnO.cif' です。
    :param sys.argv[2]: (str, optional) 使用する高対称k点経路のタイプ。'hinuma' (デフォルト) または 'sc'。

戻り値 (Returns):
    :returns: None. 計算結果は標準出力に表示されます。エラーが発生した場合はメッセージを表示し終了します。

関連リンク:
    :doc:`kpath_pymatgen_usage`
"""

import sys
from pymatgen.core import Structure
from pymatgen.symmetry.bandstructure import HighSymmKpath

infile = 'ZnO.cif'
path_type = "hinuma"  # hinuma: Hinuma–Pizzi–Kumagai–Oba–Tanaka (2017)
                      # sc: Setyawan–Curtarolo (2010)

if len(sys.argv) > 1:
    infile = sys.argv[1]
if len(sys.argv) > 2:
    path_type = sys.argv[2]


[ドキュメント] def main(): structure = Structure.from_file(infile) prim = structure.get_primitive_structure() # 高対称点と経路を生成 kpath = HighSymmKpath(prim, path_type = path_type) if kpath is None or kpath.kpath is None: print(f"\nError: Could not get k path for [{infile}] with the path_type={path_type}\n") exit() # 経路の定義を見やすく表示 print("\n=== k-path 経路 ===") for segment in kpath.kpath["path"]: print(" → ".join(segment)) # 高対称点座標を見やすく表示 print("\n=== 高対称点座標 ===") for point, coord in kpath.kpath["kpoints"].items(): print(f"{point:3s} : {coord}")
if __name__ == '__MAIN__': main()