Pymatgen:VASP入力ファイルの自動生成方法

材料研究に便利なPythonライブラリ「Pymatgen」。この記事ではPymatgenを使って、全自動でVASP入力ファイルを生成する方法を紹介する。

本記事で紹介するコードを実行すると、4つのファイルが以下のように生成される。

INCARも全て自動で設定が行われる。

※この記事はPymatgenの使用法・実例をまとめたPymatgenの使い方の一部です。

参考サイト

pymatgen.io.vasp.inputs

事前準備:POTCARの登録

pymatgenは必要なPOTCARのパス(ファイルの場所)を指定するyaml形式のファイルを読み込むことで取得する。
当然何もしなければyaml形式ファイルは生成してくれないので、以下の手順で設定しなければいけない

  1. potcarの入っているフォルダを探す

  2. potcarの名前を書きかえたものをコピーとして作成する。名前は以下のもののみ許されている(上記参考サイトの中盤より)

    例えば実際にpotcarを生成するときは

    import pymatgen.io.vasp.inputs as pgi
    potcar = pgi.Potcar(symbols=['Pb','Mn','O'], functional = 'PBE')
    

    とするが、PBEと指定した場合pymatgenは”POT_GGA_PAW_PBE”というフォルダを探す。しかしこの名前になっていないことが多いので、

    potPAW_PBE
    

    POT_GGA_PAW_PBE
    

    にリネームする。他のPOTCARフォルダに関しても同様。

  3. pymatgenのインストール方法のPOTCAR Setupに書いてあるように以下のコードを実行する

    pmg config -p <EXTRACTED_VASP_POTCAR> <MY_PSP>
    

    ここでEXTRACTED_VASP_POTCARはPOTCARがあるフォルダで、MYPSPには適当に変換後のフォルダの場所を指定する。作ってなくても場所だけ指定すれば勝手に作ってくれる。

    私の例

    pmg config -p /VASP/POTCAR/POT_GGA_PAW_PBE /VASP/new_POTCAR
    
  4. 3の実行後に

    pmg config --add PMG_VASP_PSP_DIR <MY_PSP>
    

    みたいなのをしろと表示されるので、それをコピーして実行する。これでPOTCARの場所が記録された。

  5. pymatgenのデフォルト関数はPBEになっている。これを変更したい場合は

    pmg config --add PMG_DEFAULT_FUNCTIONAL PBE_52
    

    のように登録する。

  6. pymatgenをインポートし、以下を実行できれば成功

    import pymatgen.io.vasp.inputs as pgi
    potcar = pgi.Potcar(symbols=['Pb','Mn','O'])
    

これで入力ファイルを生成する準備は整った。

4つのインプットファイルを生成

Pymatgenからインプットファイルを作るにはpymatgen.io.vasp.inputsクラスが必要である。このクラスのドキュメントはここで見れる。

もちろん一つずつ生成してもいいが、ここではより簡単な「POSCARを指定するだけで4つのファイルを生成する方法」を紹介する。

POSCAR:cifから作る場合

def make_poscar(file):
    parser = CifParser(file)
    structure = parser.get_structures(primitive=False)[0]
    poscar = pvi.Poscar(structure)
    return poscar

### エクスプローラーでcifファイルを指定 ###
import os, tkinter, tkinter.filedialog, tkinter.messagebox
# ファイル選択ダイアログの表示
root = tkinter.Tk()
root.withdraw()
fTyp = [("","*")]
iDir = os.path.abspath(os.path.dirname(r"C:\Users\Cutma\Desktop"))
tkinter.messagebox.showinfo('cif file selection','select a cif file')
file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir)

# POSCAR形式に変換
POSCAR = make_poscar(file)

pymatgen.io.vasp.inputsPoscarモジュールにStructureオブジェクトを入れると、POSCAR形式に変換してくれる。

Pymatgen vasp setを使う

POSCAR形式のファイルがPOSCARに入っている前提で、以下のコードを実行すると、残り3つのファイル(INCAR,KPOINTS,POTCAR)が/tmp/testに生成される。

import pymatgen.io.vasp.sets as ps
mitset = ps.MITRelaxSet(poscar.structure,user_incar_settings={"EDIFF":1e-8,"EDIFFG":-0.001,"ICHARG":2,"LDAUJ":{"Mn":2}},user_kpoints_settings={"reciprocal_density":64})
mitset.write_input(output_dir="/tmp/test",make_dir_if_not_present=True,include_cif=True)

各設定は英語そのままだが、簡単に解説する。

まずpymatgen.io.vaps.setsクラスというのは、他の大規模なプロジェクトなどで使われているパラメータを用いてVASPインプットファイルを自動生成してくれるものである。ドキュメントには様々な例(Materials projectでの使用パラメータ等)があるが、ここではMITRelaxSetを用いた。これは構造最適化を行うインプットファイルのセットである。

vaspinputset moduleの使い方は簡単。

set = ps.HOGEHOGESet(STRUCTURE)
set.write_input(output_dir="YOURPATH")

これが共通操作となっている。入力に必要なのはSTRUCTURE(pymatgen.core.structureモジュール)とYOURPATH(出力先のディレクトリ)のみである。

その他、引数を設定してSetの値を少しいじることもできる。

  • user_incar_settings
    INCARの設定を変更したり追加したりする。入力は辞書形式。EDIFF=1E-5, LDAU = Falseにしたいときは

    user_incar_settings{“EDIFF”: 1e-5, “LDAU”: False}
    

    とする。

  • user_kpoints_settings
    KPOINTSのdensityや切り方などを変更できる。

    user_kpoints_settings={"reciprocal_density":64}
    
  • user_potcar_settings
    使用するPOTCARの種類を設定できる。LDA_54を使いたい場合は

    user_potcar_settings={"LDA_54"}
    

その他に使用できる引数や詳細はVaspInputSetsのDictSetクラスを参照のこと。

まとめ

pymatgen.io.vasp.setsモジュールを使用し、簡単に入力ファイルを生成できました。1から作るよりも効率が良く、一度コードを作ってしまえば自分の計算プロジェクトの計算条件を合わせることができます。

非常に便利ですので、活用してみましょう。

その他のPymatgenの使用法についてはPymatgenの使い方一覧をご覧ください。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です