outcar2axsf.py 技術ドキュメント

プログラムの動作

outcar2axsf.py は、VASP (Vienna Ab initio Simulation Package) の分子動力学 (MD) シミュレーションの出力ファイル (OUTCAR) を解析し、構造の時系列変化を可視化するためのXCrySDen AXSF (Animation XSF) ファイルに変換するプログラムです。

主な機能:

  • VASPの OUTCAR ファイルから、各ステップの結晶構造(格子ベクトル、原子座標、原子にかかる力または速度)を読み取ります。

  • 読み取った構造履歴をXCrySDenでアニメーションとして表示可能なAXSF形式で出力します。

  • VASPの POSCAR および CONTCAR ファイルから、シミュレーションの初期構造と最終構造をCIF (Crystallographic Information File) 形式で別途出力します。

  • INCAR ファイルからシミュレーション名 (SYSTEM) とタイムステップ (POTIM) を読み取り、出力ファイル名や情報表示に利用します。

解決する課題: VASPの分子動力学シミュレーション結果は、OUTCAR ファイルに構造情報が時系列で記述されますが、このファイルを直接可視化ツールでアニメーションとして扱うことは困難です。本プログラムは、OUTCAR の情報をXCrySDenという広く使われている結晶構造可視化ソフトウェアのアニメーションフォーマットに変換することで、VASP MDシミュレーションの動的な挙動を容易に解析・視覚化できるようにします。

原理

本プログラムは、主にVASPの出力ファイルを解析し、その内容をXCrySDenのAXSFフォーマットに再構成することで機能します。

アルゴリズムの概要:

  1. 入力ファイルパスの特定: コマンドライン引数で指定された OUTCAR ファイルのパスから、同じディレクトリ内の INCAR, POSCAR, CONTCAR ファイルのパスを推測し特定します。

  2. 初期/最終構造の抽出とCIF出力:

    • POSCAR から初期結晶構造を読み込み、[SYSTEM]-initial.cif というファイル名でCIF形式で出力します。

    • CONTCAR から最終結晶構造を読み込み、[SYSTEM]-final.cif というファイル名でCIF形式で出力します。

  3. シミュレーション情報の取得:

    • INCAR ファイルから SYSTEM (サンプル名) と POTIM (タイムステップ) を読み込みます。

  4. AXSFファイルの準備:

    • OUTCAR を一度スキャンし、格納されている結晶構造の総ステップ数 $N_{step}$ を取得します。

    • AXSFファイルのヘッダーとして ANIMSTEPS $N_{step}$CRYSTAL を出力ファイルに書き込みます。

  5. 構造履歴の読み取りとAXSF出力:

    • OUTCAR ファイルを最初から順次読み込み、各ステップの結晶構造データを抽出します。

    • 各ステップ $i_{step}$ ごとに以下の情報をAXSFフォーマットで出力ファイルに追加書き込みます。

      • 格子ベクトル: PRIMVEC $i_{step}$CONVVEC $i_{step}$ の後、現在の単位格子の3つの基底ベクトル(直交座標系)を書き込みます。

      • 原子座標: PRIMCOORD $i_{step}$ の後、総原子数とダミーの数を書き込み、続いて各原子の情報を書き込みます。

        • 原子の種類 (AtomicNumber)

        • 直交座標 $x_c, y_c, z_c$

        • 原子にかかる力または速度 $f_x, f_y, f_z$ 原子の直交座標は、VASPの分数座標 $x_f, y_f, z_f$ と現在の格子ベクトル $a_1, a_2, a_3$ を用いて以下のように計算されます。 $$ \begin{pmatrix} x_c \ y_c \ z_c \end{pmatrix} = x_f \begin{pmatrix} a_{1x} \ a_{1y} \ a_{1z} \end{pmatrix}

        • y_f \begin{pmatrix} a_{2x} \ a_{2y} \ a_{2z} \end{pmatrix}

        • z_f \begin{pmatrix} a_{3x} \ a_{3y} \ a_{3z} \end{pmatrix} $\( ここで `\)a_1, a_2, a_3$` は格子ベクトルです。

使用ライブラリ: このプログラムは、作者が開発したと思われるカスタムライブラリ群 (tkfile, tkre, tkutils, tksci, tkcrystal) に依存しています。これらのライブラリは、ファイル操作、正規表現、ユーティリティ関数、科学計算、結晶学関連の機能を提供します。特にVASPの出力ファイルを解析し、結晶構造を表現するための tkVASPtkCrystal クラスが中心的な役割を担います。

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

本プログラムは、以下の非標準ライブラリに依存しています。

  • numpy: 数値計算を行うためのPythonライブラリ。

インストール方法 (pipを使用):

pip install numpy

カスタムライブラリ (tkfile, tkre, tkutils, tksci, tkcrystal など): ソースコードの冒頭に以下の行があります。

sys.path.append("c:/Programs/python/lib")
sys.path.append("d:/Programs/python/lib")

これは、プログラムが実行時にPythonのライブラリ検索パスに c:/Programs/python/libd:/Programs/python/lib を追加することを意味します。 したがって、上記のカスタムライブラリはこれらのパス、または outcar2axsf.py スクリプトと同じディレクトリ、あるいはPythonの標準的なサイトパッケージディレクトリに配置されている必要があります。pip を用いた一般的なインストール方法はありません。

必要な入力ファイル

本プログラムは、指定された OUTCAR ファイルと同じディレクトリに、以下のVASP関連の入力ファイルが存在することを期待します。

  1. OUTCAR

    • 形式: VASPのメイン出力ファイル。

    • データ構造: シミュレーションの各ステップにおける格子ベクトル、原子の種類と座標(分数座標)、原子にかかる力(または速度)のデータが時系列で記述されている必要があります。

    • 説明: これがプログラムの主要な入力であり、アニメーションのフレームデータが抽出されます。

  2. INCAR

    • 形式: VASPの入力パラメータファイル。

    • データ構造: SYSTEM タグ(シミュレーション名)と POTIM タグ(タイムステップ)が記述されている必要があります。

    • 説明: 出力されるCIFファイルの名前付けや、シミュレーション時間の計算に利用されます。

  3. POSCAR

    • 形式: VASPの初期構造ファイル。

    • データ構造: シミュレーション開始時の結晶構造情報(格子定数、原子の種類、原子数、原子座標など)が記述されている必要があります。

    • 説明: 原子種の特定や初期構造のCIFファイル生成に利用されます。

  4. CONTCAR

    • 形式: VASPの最終構造ファイル。

    • データ構造: シミュレーション終了時の結晶構造情報が記述されている必要があります。

    • 説明: 最終構造のCIFファイル生成に利用されます。

これらのファイルは、通常VASPシミュレーションが実行されたディレクトリにまとめて存在します。

生成される出力ファイル

本プログラムを実行すると、以下のファイルが OUTCAR と同じディレクトリに生成されます。

  1. [outcar_body].xsf

    • 保存されるファイル名: 入力された OUTCAR ファイルのファイル本体名に拡張子 .xsf が付加されたもの(例: OUTCAR を入力した場合、OUTCAR.xsf)。

    • 内容: XCrySDen AXSF (Animation XSF) 形式のテキストファイル。VASPシミュレーションの各ステップにおける結晶構造が、時系列順に記録されています。このファイルはXCrySDenで開くことで、シミュレーション中の原子の動きや構造変化をアニメーションとして視覚化できます。各ステップには、格子ベクトル (PRIMVEC, CONVVEC) と、各原子の原子番号、直交座標、そして原子にかかる力または速度 (PRIMCOORD) が含まれます。

  2. [SYSTEM]-initial.cif

    • 保存されるファイル名: INCAR ファイルから読み取られた SYSTEM パラメータ(存在しない場合は 'hogehoge')に -initial.cif が付加されたもの(例: SYSTEM = "Si_bulk" の場合、Si_bulk-initial.cif)。

    • 内容: CIF (Crystallographic Information File) 形式のテキストファイル。VASPシミュレーションの初期結晶構造が記述されています。結晶の空間群、格子定数、原子の種類と位置などの情報を含みます。

  3. [SYSTEM]-final.cif

    • 保存されるファイル名: INCAR ファイルから読み取られた SYSTEM パラメータ(存在しない場合は 'hogehoge')に -final.cif が付加されたもの(例: SYSTEM = "Si_bulk" の場合、Si_bulk-final.cif)。

    • 内容: CIF (Crystallographic Information File) 形式のテキストファイル。VASPシミュレーションの最終結晶構造が記述されています。[SYSTEM]-initial.cif と同様に、最終的な結晶の空間群、格子定数、原子の種類と位置などの情報を含みます。

(備考): ソースコード中には historycsvfile = sample_name + '-history.csv' の定義がありますが、このファイルに対する書き込み処理は実行されないため、実際には生成されません。

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

outcar2axsf.py の基本的な使用方法は以下の通りです。

python outcar2axsf.py outcar_path
  • outcar_path: 変換したいVASP OUTCAR ファイルのパスを指定します。相対パスまたは絶対パスのいずれも指定可能です。OUTCAR ファイルが他のVASP入力ファイル (INCAR, POSCAR, CONTCAR) と同じディレクトリにあることを想定しています。

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

ここでは、VASPシミュレーションの出力ファイル群が vasp_simulations/md_run1/ ディレクトリに格納されていると仮定します。このディレクトリには、OUTCAR, INCAR, POSCAR, CONTCAR が存在し、INCAR ファイルには SYSTEM = "GaAs_MD" という記述があるとします。

  1. 入力ファイルの準備: vasp_simulations/md_run1/ ディレクトリに以下のファイルを用意します。

    • OUTCAR (VASPのMD出力)

    • INCAR (内容例: SYSTEM = "GaAs_MD", POTIM = 2.0)

    • POSCAR (初期構造)

    • CONTCAR (最終構造)

  2. プログラムの実行: ターミナル(コマンドプロンプト)で、outcar2axsf.py があるディレクトリ、またはPythonパスが設定されている場所から以下のコマンドを実行します。

    python outcar2axsf.py vasp_simulations/md_run1/OUTCAR
    
  3. 実行結果の説明: 上記のコマンドを実行すると、以下のような情報が標準出力に表示され、指定されたディレクトリにファイルが生成されます。

    =============== Convert VASP output files to XCrySDen AXSF file ============
    
    CAR dir :  vasp_simulations/md_run1
    INCAR   :  vasp_simulations/md_run1/INCAR
    POSCAR  :  vasp_simulations/md_run1/POSCAR
    CONTCAR :  vasp_simulations/md_run1/CONTCAR
    OUTCAR  :  vasp_simulations/md_run1/OUTCAR
    AXSF file:  vasp_simulations/md_run1/OUTCAR.xsf
    
    *** Read initial crystal structure from [vasp_simulations/md_run1/POSCAR]
    cell:   5.6530000000   5.6530000000   5.6530000000 A      90.000000   90.000000   90.000000
    
    *** Read final crystal structure from [vasp_simulations/md_run1/CONTCAR]
    cell:   5.6531234500   5.6531234500   5.6531234500 A      90.000000   90.000000   90.000000
    
    Read [vasp_simulations/md_run1/INCAR]
    sample_name: GaAs_MD
    POTIM: 2.0 fs
    
    Write to [vasp_simulations/md_run1/GaAs_MD-initial.cif]
    Write to [vasp_simulations/md_run1/GaAs_MD-final.cif]
    # of crystal structures: 100
    # of atom sites for atom types =  [4 4]
    
    Read crystal structures from [vasp_simulations/md_run1/OUTCAR]
    

    # of atom sites for atom types は例えばGaAs結晶でGa原子が4つ、As原子が4つの場合)

    この実行により、以下のファイルが vasp_simulations/md_run1/ ディレクトリに生成されます。

    • OUTCAR.xsf: XCrySDenで開くと、VASP MDシミュレーションの構造変化をアニメーションとして見ることができます。

    • GaAs_MD-initial.cif: シミュレーション開始時のGaAs結晶構造。

    • GaAs_MD-final.cif: シミュレーション終了時のGaAs結晶構造。

    これらの出力ファイルを使用することで、VASPの分子動力学シミュレーション結果を効果的に視覚化し、解析することが可能になります。