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を補完するための部分実行にも使用できます。