材料研究に便利なPythonライブラリ「Pymatgen」。この記事ではPymatgenを使って、全自動でVASP入力ファイルを生成する方法を紹介する。
本記事で紹介するコードを実行すると、4つのファイルが以下のように生成される。
INCARも全て自動で設定が行われる。
※この記事はPymatgenの使用法・実例をまとめたPymatgenの使い方の一部です。
参考サイト
pymatgen.io.vasp.inputs
事前準備:POTCARの登録
pymatgenは必要なPOTCARのパス(ファイルの場所)を指定するyaml形式のファイルを読み込むことで取得する。
当然何もしなければyaml形式ファイルは生成してくれないので、以下の手順で設定しなければいけない。
-
potcarの入っているフォルダを探す
-
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フォルダに関しても同様。
-
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
-
3の実行後に
pmg config --add PMG_VASP_PSP_DIR <MY_PSP>
みたいなのをしろと表示されるので、それをコピーして実行する。これでPOTCARの場所が記録された。
-
pymatgenのデフォルト関数はPBEになっている。これを変更したい場合は
pmg config --add PMG_DEFAULT_FUNCTIONAL PBE_52
のように登録する。
-
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.inputs
のPoscar
モジュールに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の使い方一覧をご覧ください。
材料研究に便利なPythonライブラリ「Pymatgen」。この記事ではPymatgenを使って、全自動でVASP入力ファイルを生成する方法を紹介する。
本記事で紹介するコードを実行すると、4つのファイルが以下のように生成される。
INCARも全て自動で設定が行われる。
※この記事はPymatgenの使用法・実例をまとめたPymatgenの使い方の一部です。
目次
参考サイト
pymatgen.io.vasp.inputs
事前準備:POTCARの登録
pymatgenは必要なPOTCARのパス(ファイルの場所)を指定するyaml形式のファイルを読み込むことで取得する。
当然何もしなければyaml形式ファイルは生成してくれないので、以下の手順で設定しなければいけない。
potcarの入っているフォルダを探す
potcarの名前を書きかえたものをコピーとして作成する。名前は以下のもののみ許されている(上記参考サイトの中盤より)
例えば実際にpotcarを生成するときは
とするが、PBEと指定した場合pymatgenは”POT_GGA_PAW_PBE”というフォルダを探す。しかしこの名前になっていないことが多いので、
を
にリネームする。他のPOTCARフォルダに関しても同様。
pymatgenのインストール方法のPOTCAR Setupに書いてあるように以下のコードを実行する
ここでEXTRACTED_VASP_POTCARはPOTCARがあるフォルダで、MYPSPには適当に変換後のフォルダの場所を指定する。作ってなくても場所だけ指定すれば勝手に作ってくれる。
私の例
3の実行後に
みたいなのをしろと表示されるので、それをコピーして実行する。これでPOTCARの場所が記録された。
pymatgenのデフォルト関数はPBEになっている。これを変更したい場合は
のように登録する。
pymatgenをインポートし、以下を実行できれば成功
これで入力ファイルを生成する準備は整った。
4つのインプットファイルを生成
Pymatgenからインプットファイルを作るには
pymatgen.io.vasp.inputs
クラスが必要である。このクラスのドキュメントはここで見れる。もちろん一つずつ生成してもいいが、ここではより簡単な「POSCARを指定するだけで4つのファイルを生成する方法」を紹介する。
POSCAR:cifから作る場合
pymatgen.io.vasp.inputs
のPoscar
モジュールにStructure
オブジェクトを入れると、POSCAR形式に変換してくれる。Pymatgen vasp setを使う
POSCAR形式のファイルが
POSCAR
に入っている前提で、以下のコードを実行すると、残り3つのファイル(INCAR,KPOINTS,POTCAR)が/tmp/test
に生成される。各設定は英語そのままだが、簡単に解説する。
まず
pymatgen.io.vaps.sets
クラスというのは、他の大規模なプロジェクトなどで使われているパラメータを用いてVASPインプットファイルを自動生成してくれるものである。ドキュメントには様々な例(Materials projectでの使用パラメータ等)があるが、ここではMITRelaxSetを用いた。これは構造最適化を行うインプットファイルのセットである。vaspinputset moduleの使い方は簡単。
これが共通操作となっている。入力に必要なのはSTRUCTURE(pymatgen.core.structureモジュール)とYOURPATH(出力先のディレクトリ)のみである。
その他、引数を設定してSetの値を少しいじることもできる。
INCARの設定を変更したり追加したりする。入力は辞書形式。EDIFF=1E-5, LDAU = Falseにしたいときは
とする。
KPOINTSのdensityや切り方などを変更できる。
使用するPOTCARの種類を設定できる。LDA_54を使いたい場合は
その他に使用できる引数や詳細はVaspInputSetsのDictSetクラスを参照のこと。
まとめ
pymatgen.io.vasp.sets
モジュールを使用し、簡単に入力ファイルを生成できました。1から作るよりも効率が良く、一度コードを作ってしまえば自分の計算プロジェクトの計算条件を合わせることができます。非常に便利ですので、活用してみましょう。
その他のPymatgenの使用法についてはPymatgenの使い方一覧をご覧ください。