ASEによるVASPの詳細設定
はじめに
- 以下は、ASEでVASPの設定を行いDFT計算を実行するためのメモ
-
ase.calculators.vasp
のVASP
クラスの変数を通じて設定する - 計算条件は基本的にVASPのインプットファイル(
INCAR
)に反映される。INCARタグの意味はここでは説明しない - 過去の記事(エネルギー計算)を参照してください
計算の設定
- VASPを計算するには環境変数
VASP_script
とVASP_PP_PATH
を設定する
$ export VASP_SCRIPT=$HOME/vasp/run_vasp.py
$ export VASP_PP_PATH=$HOME/vasp/potentials/potpaw_PBE
-
VASP_SCRIPT
には以下のような内容を記述する
import os
exitcode = os.system('vasp')
exitcode = os.system('mpirun -np 16 vasp') # 並列の場合
-
VASP_PP_NAME
はデフォルトとなる擬ポテンシャル(pseudo-potential)を設定する。シンボリックリンクでもOK
DFT+U
-
VASPのインプット(
INCAR
)で指定する場合のキーワード-
LDAU = [.TRUE.|.FALSE.]
: DFT+Uを使うかどうか -
LDAUTYPE = 2 (default)
: DFT+Uの手法選択 -
LDAUL = [-1 (no on-site)|1 (=p)|2 (=d)|3 (=f)]
: どの軌道にUパラメーターを適用するか -
LDAUU
: on-site Coulombパラメーター -
LDAUJ
: on-site Exchangeパラメーター
-
-
ASEでは
ldau_luj
dictで上記のLDAUL, LDAUU, LDAUJを設定する -
以下はLa原子とO原子を含む系の計算の場合で、LaにはUパラメーターを指定し、O原子は補正しない
-
系に含まれるすべての原子に対してdictの要素を設定しないといけない(要確認)
# DFT+Uパラメーターの設定
ldau = True
ldautype = 2
ldau_luj = {'La':{'L':2, 'U':3.0, 'J':0.0},
'O':{'L':-1, 'U':0.0, 'J':0.0}}
# calculatorの定義
bulk.calc = Vasp(..., ldau=ldau,
ldautype=ldautype,
ldau_luj=ldau_luj, ...)
# 計算の実行
bulk.get_potential_energy()
### Pseudo-potentialの選択
* 特殊なpseudo-potential(hard, softなど)を使いたい場合は`setups`で設定する
```python
calc = Vasp(xc='PBE', setups={'Li': '_sv'})
calculatorを設定した後、パラメーターを変更する場合
- setを用いる(おそらくこちらの方がよい)
calc.set(prec="accurate", ediff=1E-5, ispin=2)
- プライベート変数に直接代入
calc.float_params["encut"] = 500.0
スピン分極の計算
- スピン分極する場合は
VASP(..., ispin=2, ...)
とする - INCARでMAGMOMを指定しない場合はデフォルトでは高スピン状態から始まる
-
atoms.set_initial_magnetic_moments([1.0, 1.0])
で初期の磁気モーメントを原子ごとに指定
-