vasp_input.py 技術ドキュメント

プログラムの動作

  • 目的: 本プログラム vasp_input.py は、VASP (Vienna Ab-initio Simulation Package) の入力ファイル、特にPOSCARファイルを管理することを目的とします。

  • 主な機能: 現在、本プログラムはCIF (Crystallographic Information File) 形式の結晶構造データからVASPのPOSCARファイルを生成する機能のみを提供します。

    • 指定されたCIFファイルを読み込み、その結晶構造情報(格子定数、格子ベクトル、原子の種類と数、原子座標)を抽出します。

    • 抽出した情報に基づいて、VASPが要求するPOSCAR形式のテキストファイルを生成します。

    • CIFファイルパスにはワイルドカード(例: *.cif)を使用でき、その場合は辞書順でソートされたリストの最初のファイルが処理されます。

  • 解決する課題: CIFファイルから手動でPOSCARファイルを作成する手間を省き、VASP計算の準備プロセスを自動化します。これにより、ユーザーは結晶構造情報に基づいたPOSCARファイルを迅速かつ正確に生成できます。

原理

本プログラムは、CIFファイルから結晶構造情報を解析し、それをVASPのPOSCARフォーマットに変換する原理に基づいています。

  1. CIFファイルの読み込みと解析:

    • tklib.tkcrystal.tkcif.tkCIF クラスを使用して、指定されたCIFファイルを読み込みます。

    • CIFファイル内のデータブロックから、格子パラメータ(\(a, b, c, \alpha, \beta, \gamma\))、原子サイトの座標、原子タイプなどの情報を抽出します。

    • tklib.tkcrystal.tkcrystal.tkCrystal オブジェクトが結晶構造全体を表現し、LatticeParameters(), LatticeVectors(), AtomTypeList(), ExpandedAtomSiteList() などのメソッドを通じて情報を提供します。

  2. POSCARフォーマットへの変換: VASPのPOSCARファイルは、以下の構造を持ちます。

    • 1行目: コメント行(通常は構造の名前や識別子)。 本プログラムでは、入力CIFファイルのファイル名(拡張子なし)を使用します。

    • 2行目: スケールファクタ。 本プログラムでは、結晶の\(a\)軸の長さ(単位: Å)を使用します。これは、格子ベクトルがこの値でスケールされることを意味します。 例: \(a\)

    • 3-5行目: 格子ベクトル。 結晶の基本並進ベクトル \(a_1, a_2, a_3\) を、スケールファクタで割った(規格化された)状態で記述します。本プログラムでは、cry.LatticeVectors() / a を使用してこれらのベクトルを計算します。 例えば、\(a, b, c\) を格子定数とする直交格子の場合、POSCARには以下のように記述されます。

      \[\begin{split} \begin{pmatrix} 1.0 & 0.0 & 0.0 \\ 0.0 & 1.0 & 0.0 \\ 0.0 & 0.0 & 1.0 \end{pmatrix} \end{split}\]

      実際には斜方格子など、一般の格子の場合、規格化されたベクトル成分が出力されます。

    • 6行目: 各原子の元素記号のリスト。 結晶に含まれる異なる原子タイプを、スペース区切りで記述します。 例: Fe O

    • 7行目: 各元素の原子数。 6行目で指定された順序で、各元素が構造中にいくつ存在するかを記述します。 例: 2 3 (Feが2個、Oが3個の場合)

    • 8行目: 選択的ダイナミクス(オプション)。 "Selective dynamics" と記述することで、後続の原子座標に各軸方向の移動を許可するかどうかを示すフラグを含めることができます。 本プログラムでは、常にこの行を出力します。

    • 9行目: 座標系。 "Direct" と記述することで、後続の原子座標が直接座標(分数座標)であることを示します。

    • 10行目以降: 原子座標と選択的ダイナミクスフラグ。 各原子サイトの直接座標 (\(x, y, z\)) と、その原子が\(x, y, z\)軸方向に移動可能かを示すフラグ(T: True, F: False)を記述します。 本プログラムでは、すべての原子のすべての軸方向を 'T' (True) に設定します。 例: 0.12345678901234 0.23456789012345 0.34567890123456 T T T

これらのステップを通じて、CIFファイルからVASP計算に必要なPOSCARファイルを自動的に生成します。

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

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

  1. numpy:

    • 数値計算、特に配列操作や数学関数を提供します。

    • インストール方法:

      pip install numpy
      
  2. tklib:

    • 本プログラムの作者によって開発されたカスタムライブラリの一部であり、ファイル操作 (tkFile, tkutils) や結晶学データ処理 (tkcrystal) の機能を提供します。

    • このライブラリは通常、Python Package Index (PyPI) には登録されていません。tklibvasp_input.py スクリプトと同じプロジェクトフォルダ内、またはPythonのパスが通っている場所に配置されている必要があります。

    • インストール方法: vasp_input.py と同じディレクトリ階層に tklib ディレクトリを配置してください。例えば、以下のディレクトリ構造を想定します。

      your_project/
      ├── vasp_input.py
      └── tklib/
          ├── __init__.py
          ├── tkfile.py
          ├── tkutils.py
          └── tkcrystal/
              ├── __init__.py
              ├── tkcif.py
              ├── tkcrystal.py
              └── tkatomtype.py
      

      もし tklib が利用可能なパッケージとして提供されている場合(例: 特定のリポジトリからインストールできる場合)は、その指示に従ってください。

必要な入力ファイル

本プログラムは以下の形式のファイルを期待します。

  1. CIF (Crystallographic Information File) ファイル:

    • ファイル名: 任意のファイル名(例: structure.cif, material.cif)。コマンドライン引数で指定します。

    • 形式: CIF標準に準拠したテキストファイル。結晶構造に関する情報(格子定数、原子サイトの座標、原子タイプなど)が含まれている必要があります。

    • ワイルドカード: CIFファイルのパスとしてワイルドカード(例: *.cif)を指定することも可能です。その場合、プログラムはワイルドカードにマッチするファイルを検索し、辞書順でソートされたリストの最初のファイルを処理対象とします。

生成される出力ファイル

本プログラムはVASPの入力ファイルの一つであるPOSCARファイルを生成します。

  1. POSCARファイル:

    • ファイル名: デフォルトでは POSCAR ですが、コマンドライン引数で任意のパスを指定できます(例: POSCAR_Fe2O3)。

    • 内容:

      • 1行目: コメント(元のCIFファイルのファイル名、拡張子なし)。

      • 2行目: スケールファクタ(\(a\)軸の長さ、単位: Å)。

      • 3-5行目: 規格化された格子ベクトル。

      • 6行目: 各原子の元素記号(スペース区切り)。

      • 7行目: 各元素の原子数(スペース区切り)。

      • 8行目: "Selective dynamics" (選択的ダイナミクスを有効化)。

      • 9行目: "Direct" (直接座標系を使用)。

      • 10行目以降: 各原子の直接座標 (\(x, y, z\)) と、それぞれの軸方向の移動許可フラグ(T: True)。

    例(一部抜粋):

    sample_name
      5.0000000000000000
        1.0000000000000000  0.0000000000000000  0.0000000000000000
        0.0000000000000000  1.0000000000000000  0.0000000000000000
        0.0000000000000000  0.0000000000000000  1.0000000000000000
         Fe  O
          2  3
    Selective dynamics
    Direct
      0.0000000000000000  0.0000000000000000  0.0000000000000000   T   T   T
      0.5000000000000000  0.5000000000000000  0.0000000000000000   T   T   T
      0.0000000000000000  0.5000000000000000  0.5000000000000000   T   T   T
    

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

本プログラム vasp_input.py は、コマンドライン引数を使用して操作モードと入出力ファイルを指定します。

基本的な実行形式:

python vasp_input.py <mode> <input_path> <output_path>

現在のところ、サポートされている唯一のモードは cif2poscar です。

  • <mode>: 実行モードを指定します。

    • cif2poscar: CIFファイルからPOSCARファイルを生成するモード。

  • <input_path>: 入力となるCIFファイルのパスを指定します。

    • 単一のCIFファイルパス(例: structure.cif

    • ワイルドカードパターン(例: *.cif)。この場合、マッチするファイルの中で辞書順で最初のファイルが使用されます。

  • <output_path>: 生成されるPOSCARファイルのパスを指定します。

    • デフォルトは POSCAR ですが、任意のファイル名を指定できます。

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

例1: 単一のCIFファイルからPOSCARファイルを生成する

sample.cif というCIFファイルが存在する場合、それから POSCAR_sample という名前のPOSCARファイルを生成します。

実行コマンド:

python vasp_input.py cif2poscar sample.cif POSCAR_sample

実行結果の説明:

このコマンドを実行すると、vasp_input.py は以下の処理を行います。

  1. sample.cif を読み込み、結晶構造データを解析します。

  2. 解析された格子定数、原子タイプ、原子数、および原子座標をVASPのPOSCARフォーマットに変換します。

  3. 現在のディレクトリに POSCAR_sample という名前のファイルが新しく作成されます。このファイルには、sample.cif の構造情報に基づいたVASPのPOSCAR入力データが記述されます。

  4. プログラムは処理の進捗状況(CIFパス、サンプル名、出力先など)を標準出力に表示し、正常終了します。

例2: ワイルドカードを使用してCIFファイルからPOSCARファイルを生成する

現在のディレクトリに alpha.cifbeta.cif の2つのCIFファイルが存在し、これらの中から辞書順で最初のファイル (alpha.cif) を選択して POSCAR ファイルを生成します。

実行コマンド:

python vasp_input.py cif2poscar *.cif POSCAR

実行結果の説明:

このコマンドを実行すると、vasp_input.py は以下の処理を行います。

  1. 現在のディレクトリで *.cif にマッチするファイルを検索します。例えば、alpha.cifbeta.cif が見つかったとします。

  2. 見つかったファイルを辞書順にソートします(この場合 alpha.cif, beta.cif)。

  3. ソートされたリストの最初のファイル、つまり alpha.cif を入力として選択します。

  4. alpha.cif を読み込み、結晶構造データを解析します。

  5. 解析されたデータをPOSCARフォーマットに変換し、POSCAR という名前のファイルとして出力します。

  6. プログラムは処理の進捗状況を標準出力に表示し、alpha.cif の構造情報に基づいた POSCAR ファイルが作成されて正常終了します。