RMC-DFT 実行チュートリアル
対象: rmc_dft v0.6.13
rmc_vasp_script.pyによる通常の RMC → VASP → RMC → VASP ... の自動実行と、rmc_init_N.py/rmc_vasp_init_N.pyの使い方を説明します。
1. 基本動作
rmc_vasp_script.py は RMC と VASP を交互に実行します。
概念的には、
RMC
|
v
DFT(VASP)
|
v
RMC
|
v
DFT(VASP)
|
...
です。
RMCで得た構造をVASPへ渡し、VASPで得た構造を次のRMCへ戻します。
2. 通し番号
v0.6.13 では RMC と DFT のログ番号は共通の通し番号です。
例えば、
log0_rmc
log1_dft
log2_rmc
log3_dft
log4_rmc
log5_dft
のように進みます。
RMC用カウンターとDFT用カウンターを別々に持つ方式ではありません。
現在の番号は next_log_dir_name() から決定されます。
3. 通常開始
通常開始は、
python rmc_vasp_script.py
です。
通常開始では、
POSCAR0
|
+--> POSCAR
|
+--> initial CFG
を作成してRMCから開始します。
4. restart
restart は、
python rmc_vasp_script.py restart
です。
既存の logN_rmc / logN_dft を調べ、次に実行すべき通し番号とRMC/VASPのどちらから再開するかを決定します。
restartだから init を無効にする、という特別な扱いはしません。
通常実行と同じ init 選択規則を使用します。
特に、番号付きVASP initを使っていない通常運用でも、restart後に通常の
rmc_vasp_init.py
が適用されます。
5. 通常 init
通常の入力条件は、
rmc_init.py
rmc_vasp_init.py
に記述します。
RMC run では rmc_init.py、VASP run では rmc_vasp_init.py が基本となります。
initファイルは各run直前にファイルから読み込まれるため、長時間のRMC-DFT実行中でも編集できます。
例えば実行中に、
rmc_init.py
の sigma や maximum move を変更すると、そのファイルが次に使用されるRMC runで変更後の内容が読み込まれます。
VASP側も同様です。
6. 番号付き init
特定の通し番号だけ異なる条件で実行したい場合は、
rmc_init_N.py
rmc_vasp_init_N.py
を使用します。
例えば、
rmc_init_4.py
が存在すると、通し番号4のRMC runではこのファイルが使用されます。
同様に、
rmc_vasp_init_5.py
があれば、通し番号5のVASP runで使用されます。
N はRMC番号やDFT番号ではなく、RMC/DFT共通の通し番号です。
7. 番号付き init の継続
番号付きinitには、
CONTINUE_NUMBERED_INIT = False
があります。
False
CONTINUE_NUMBERED_INIT = False
の場合、その番号付きinitは現在runだけで使用します。
次の同種runでは通常initへ戻ります。
例えば、
log4_rmc -> rmc_init_4.py
log5_dft
log6_rmc -> rmc_init.py
となります。
True
CONTINUE_NUMBERED_INIT = True
の場合、その番号付きinitを次の同種runでも継続して使用します。
例えば、
log4_rmc -> rmc_init_4.py
log5_dft
log6_rmc -> rmc_init_4.py
log7_dft
log8_rmc -> rmc_init_4.py
となります。
その後、新しい番号付きinitが現れれば、そちらが使用されます。
8. init ファイルは動的に再読込される
CONTINUE_NUMBERED_INIT=True で rmc_init_4.py を継続している場合も、最初に読み込んだPythonモジュールを固定して使い続けるわけではありません。
各runで、
runpy.run_path(...)
によりファイルを再読込します。
したがって、計算実行中に rmc_init_4.py を編集すると、次のRMC runでは編集後の内容が使用されます。
これはVASP側も同じです。
9. RMC init と VASP init
RMC側では、
rmc_dat.init(...)
で *.dat の初期入力を確定し、その後 set_*() で条件を設定します。
VASP側では、
vasp_incar.init()
で INCAR の初期入力を確定し、その後 set_tag() で条件を設定します。
既存入力がある場合、それを初期状態として使用します。
initは既存入力を理由に無効化されません。
10. RMCからVASPへの構造受け渡し
RMC終了後、
shutil.copy(f"{config.cfg_name}.vasp", "POSCAR")
によって、RMC側から得たVASP形式の構造を次のVASP計算の POSCAR として使用します。
11. VASPからRMCへの構造受け渡し
VASPの postprocess() により、VASP計算後の構造が次のRMCで使用できる形へ処理されます。
この繰り返しによってRMCとDFTを交互に実行します。
12. 使い分け
通常は、
rmc_init.py
rmc_vasp_init.py
だけで運用します。
途中の特定runで条件を変更したい場合だけ、
rmc_init_N.py
rmc_vasp_init_N.py
を追加します。
一時的な変更なら、
CONTINUE_NUMBERED_INIT = False
継続的な変更なら、
CONTINUE_NUMBERED_INIT = True
を使用します。
実行ロジックを rmc_vasp_script.py に書き込むのではなく、計算条件とその継続指定を init 側へ置くのが v0.6.13 の基本方針です。