RMC-DFT 手動 sequence 実行チュートリアル

対象: rmc_dft v0.6.13

rmc_vasp_script_sequence.py を使用し、RMC/VASPの実行順序を通し番号単位で明示的に指定する方法を説明します。

1. sequence の目的

通常の rmc_vasp_script.py は、

RMC -> VASP -> RMC -> VASP -> ...

を自動的に繰り返します。

一方、sequenceでは、

RMC
RMC
VASP
RMC
RMC
VASP

のように、RMCとVASPの実行順を明示的に指定できます。

例えば、

rmc_init_1.py
rmc_init_2.py
rmc_vasp_init_3.py
rmc_init_4.py
rmc_init_5.py
rmc_vasp_init_6.py

という任意の並びを実行できます。

2. 使用するファイル

sequence実行では主に、

rmc_vasp_script_sequence.py
rmc_vasp_script_sequence_dat.py
rmc_init_N.py
rmc_vasp_init_N.py

を使用します。

通常、実行順序を変更するときに編集するのは、

rmc_vasp_script_sequence_dat.py

です。

3. manual_sequence

実行順序は manual_sequence に書きます。

manual_sequence = [
    "rmc_init_1.py",
    "rmc_init_2.py",
    "rmc_vasp_init_3.py",
    "rmc_init_4.py",
    "rmc_init_5.py",
    "rmc_vasp_init_6.py",
]

上から順に実行されます。

この例では、

1: RMC
2: RMC
3: VASP
4: RMC
5: RMC
6: VASP

となります。

4. 通し番号との一致

ファイル名の番号は、実際に次に作成されるログ番号と一致している必要があります。

例えば、

rmc_init_4.py

を実行するとき、次のRMCログが

log4_rmc

でなければエラーになります。

同様に、

rmc_vasp_init_6.py

なら、次のDFTログは

log6_dft

である必要があります。

sequence側は next_log_dir_name() で実際の次番号を確認し、指定番号と一致しなければ RuntimeError で停止します。

5. RMCを連続して実行する

通常RMC-DFTではRMCとVASPを交互に実行しますが、sequenceなら、

manual_sequence = [
    "rmc_init_1.py",
    "rmc_init_2.py",
    "rmc_init_3.py",
]

のようにRMCを連続して実行できます。

各runで別の rmc_init_N.py を使用できるため、

run 1: sigmaを大きくして初期緩和
run 2: maximum moveを小さくする
run 3: sigmaを下げてフィットを厳しくする

といった段階的な操作が可能です。

6. VASPを任意の位置へ入れる

例えば、

manual_sequence = [
    "rmc_init_1.py",
    "rmc_init_2.py",
    "rmc_vasp_init_3.py",
    "rmc_init_4.py",
]

なら、RMCを2回実行した後にVASPを実行し、その後再びRMCを実行します。

VASP条件は rmc_vasp_init_3.py に記述します。

7. init ファイルは実行直前に読む

sequenceでも init ファイルは、

runpy.run_path(init_file)

で実行直前に読み込みます。

したがって、sequence実行中でも、まだ実行されていない

rmc_init_N.py
rmc_vasp_init_N.py

を書き換えることができます。

変更後の内容が、そのrunで使用されます。

8. continue_rmc_dft

rmc_vasp_script_sequence_dat.py には、

continue_rmc_dft = False

があります。

False: sequenceだけ実行

continue_rmc_dft = False

の場合、

manual_sequence
    |
    +--> 全項目を実行
    |
    +--> 終了

です。

通常の rmc_vasp_script.py の補完として、指定した処理だけを実行したい場合に使用します。

True: sequence後に通常RMC-DFTへ移行

continue_rmc_dft = True

の場合、

manual_sequence
    |
    +--> 全項目を実行
    |
    +--> 通常の RMC-DFT loop

へ移ります。

sequence終了後はRMCから通常ループを再開します。

9. CONTINUE_NUMBERED_INIT と sequence

v0.6.13 では、manual sequenceから通常RMC-DFTへ移る場合も CONTINUE_NUMBERED_INIT が追従します。

例えば最後に使用したRMC initが、

# rmc_init_5.py
CONTINUE_NUMBERED_INIT = True

なら、continue_rmc_dft=True で通常ループへ移った後も、次のRMC runで rmc_init_5.py を継続して使用します。

False なら通常の、

rmc_init.py

へ戻ります。

VASP側も同じです。

# rmc_vasp_init_6.py
CONTINUE_NUMBERED_INIT = True

なら、そのVASP initの継続状態が通常ループへ引き継がれます。

10. sequence中の動的変更

継続中の番号付きinitも毎runファイルから再読込されます。

したがって、

CONTINUE_NUMBERED_INIT = True

として継続中の rmc_init_5.py を、計算実行中に編集することもできます。

次にそのinitが使用されるときには変更後の内容が反映されます。

11. 典型例: RMCを段階的に収束させてからDFT

continue_rmc_dft = False

manual_sequence = [
    "rmc_init_1.py",
    "rmc_init_2.py",
    "rmc_vasp_init_3.py",
]

例えば、

rmc_init_1.py
    sigma 大
    maximum move 大

rmc_init_2.py
    sigma 小
    maximum move 小

rmc_vasp_init_3.py
    VASP structure relaxation

のように条件を分けられます。

12. 典型例: sequence後に通常RMC-DFTへ戻す

continue_rmc_dft = True

manual_sequence = [
    "rmc_init_1.py",
    "rmc_init_2.py",
    "rmc_vasp_init_3.py",
]

この場合、

log1_rmc
log2_rmc
log3_dft

までを手動sequenceで制御し、その後は通常のRMC-DFTループへ移ります。

最後に使用した番号付きinitの CONTINUE_NUMBERED_INIT に応じて、番号付きinitを継続するか通常initへ戻るかが決まります。

13. 通常 script との使い分け

rmc_vasp_script.py が適するケース:

RMC -> VASP -> RMC -> VASP

という通常の反復を行う場合。

rmc_vasp_script_sequence.py が適するケース:

RMC -> RMC -> VASP -> RMC -> RMC -> VASP

など、実行順序そのものを明示的に制御したい場合。

sequenceは通常scriptを置き換えるだけでなく、continue_rmc_dft=False によって通常scriptを補完するための部分実行にも使用できます。