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 の基本方針です。