rmc_dft
rmc_dft は、Reverse Monte Carlo(RMC)による実験データを再現する3次元構造モデルの生成と、
DFT によるエネルギー・原子間力に基づく構造緩和を交互に行う RMC-DFT
ワークフローを Python から構築・実行するためのパッケージです。
現在の実装は RMC_POT + VASP を実動系としており、 RMC と VASP の反復実行、入力条件の更新、restart、実行ごとの初期化スクリプト、 計算結果の保存など、実際の RMC-DFT 計算を継続的に運用するための機能を含んでいます。
現在の位置づけ
rmc_dft は当初、RMC_POT の操作機能と RMC-DFT ワークフローの両方を同じパッケージ内に持っていました。
v0.7.0 で RMC_POT の入力・実行・解析に関する機能を独立した rmc_util
パッケージへ分離しました。現在の rmc_dft は、VASP 側の操作と RMC-DFT ワークフローの制御を担当し、RMC_POT のハンドリングには
rmc_util を利用します。
新しいコードでは RMC_POT 関連クラスを rmc_util から直接 import します。
from rmc_dft import Config, Vasp, VaspIncar, VaspKpoints
from rmc_util import RmcPot, RmcPotDat, RmcPotHst
この分離により、RMC_POT 単独の操作は rmc_util、RMC と DFT を組み合わせた計算フローは rmc_dft という役割分担になっています。
サンプルスクリプトの配置
rmc_dft install <カテゴリ> で、指定カテゴリ以下のすべてのファイルをカレントディレクトリへコピーします。カテゴリのディレクトリ自体は作成しません。対象は analyze、check、edit、job、make、plot、run、tools の8カテゴリです。all は8カテゴリすべてをカテゴリ別ディレクトリ構造を保ってコピーします。
rmc_dft install analyze
rmc_dft install check
rmc_dft install edit
rmc_dft install job
rmc_dft install make
rmc_dft install plot
rmc_dft install run
rmc_dft install tools
rmc_dft install all
rmc_dft install plot --force
rmc_dft install all は ./analyze/、./check/、./edit/、./job/、./make/、./plot/、./run/、./tools/ にコピーします。個別ファイル指定は受け付けません。
例えば rmc_dft install run は scripts/run/ 内の7ファイルを ./ にコピーします。既存ファイルがある場合は事前に中止し、--force 指定時のみ上書きします。配布には src/rmc_dft/scripts/ に元の scripts/ 全44ファイルを同じ構造で収録してください。
インストール
PyPI からインストールします。
pip install rmc-dft
RMC_POT を利用する現在のワークフローでは rmc_util を使用します。
RMC_POT および VASP の実行バイナリそのものはこのパッケージには含まれません。現在の RMC-DFT 計算を実行するには、それぞれの実行環境を別途用意する必要があります。
現在実装されている主な機能
RMC_POT / VASP の反復実行
現在の実運用コードでは、RMC_POT と VASP を交互に実行します。
基本的な流れは、
initial structure
|
v
RMC_POT
|
v
VASP
|
v
RMC_POT
|
v
VASP
|
...
です。
RMC 側では rmc_util の RmcPot、RmcPotDat、RmcPotLog、RmcPotHst などを利用し、DFT 側では rmc_dft の Vasp、
VaspIncar、VaspKpoints、VaspLog などを利用します。
計算条件のスクリプト化
RMC と VASP の条件は、実行スクリプトから変更できます。
現在のワークフローでは主に、
rmc_init.py
rmc_vasp_init.py
を用いて RMC / VASP の計算条件を設定します。
さらに、
rmc_init_N.py
rmc_vasp_init_N.py
のような番号付き init を用意することで、特定の RMC / VASP run だけ異なる条件を適用できます。
番号付き init では CONTINUE_NUMBERED_INIT により、その設定を次の run に引き継ぐか、通常の init に戻すかを指定できます。init
ファイルは実行直前に読み込まれるため、長い RMC-DFT 計算の途中でも、その後の計算条件を変更できます。
restart
RMC / VASP の保存済み結果を調べ、RMC または VASP のどちらから再開すべきかを判断する restart 処理を持っています。
計算結果は rmc_log* / dft_log* などの実行ごとのディレクトリへ保存され、継続計算や計算履歴の確認に利用されます。
VASP 入力と結果のハンドリング
現在の VASP 実装には、たとえば以下が含まれます。
INCARの読み書きとパラメータ更新KPOINTSの設定POTCARの構築VASP の local / MPI / job 実行
OUTCARなどの結果読み取り計算結果の保存
POSCAR / CONTCAR と RMC の CFG の受け渡し
構造・原子移動・force 解析のための補助機能
RmcDft クラス
RmcDft は RMC と DFT を交互に実行するための統合クラスです。
from rmc_dft import Config, RmcDft
config = Config("config.yml")
rmc_dft = RmcDft(
config=config,
)
rmc_dft.run()
Config には現在、
rmc_code = "RmcPot"
dft_code = "Vasp"
というコード選択用の設定があり、RmcDft 側も RMC / DFT 実装を名前から選択する構造を持っています。
ただし、 現時点で実際に接続されている実装は RMC_POT と VASP です。RMCProfile や Quantum ESPRESSO などを設定名だけで利用できる状態ではありません。
RMC-DFT 実運用スクリプト
現在の実運用では、RmcDft クラスだけでなく、より細かな実行制御を行うスクリプトも使用しています。
rmc_vasp_script.py は、RMC と VASP の交互実行、restart、番号付き init、ログディレクトリ管理などを行います。
rmc_vasp_script_sequence.py では、通常の単純な RMC → VASP の繰り返しだけでなく、あらかじめ指定した RMC / VASP の実行
sequence を組むことができます。その後に通常の RMC-DFT loop を継続することもできます。
これらには歴史的な理由から rmc_vasp という名前が残っています。現在のパッケージ名とワークフロー全体の名称は rmc_dft
です。
設計目的と今後の方向
RMC-DFT の本質は、特定の RMC コードと特定の DFT コードを固定して呼び出すことではなく、
RMC により、実験データと整合する3次元構造モデルを生成する
DFT により、エネルギー・原子間力に基づいてその構造を緩和する
両者の間で構造を受け渡しながら反復する
という計算フローにあります。
現在は RMC_POT と VASP を用いてこのワークフローを実装していますが、rmc_dft の設計上の目的は、最終的には特定の RMC コードや
DFT コードに依存しない形へ拡張することです。
エネルギー・力に基づく構造緩和側についても、必ず第一原理 DFT で行う必要がない場合には、機械学習ポテンシャル(MLP)などによる構造緩和を選択できる構成を想定しています。これにより、大規模系や多数の反復を必要とする場合に、DFT と MLP を目的・精度・計算量に応じて使い分けられるワークフローを目指します。
概念的には、将来的に次のような構成を対象とします。
RMC modeling / experimental-data fitting
|
+---------+---------+
| |
RMC_POT other RMC
| |
+---------+---------+
|
structure
|
+---------+---------+
| |
DFT MLP
(VASP, etc.) structure relaxation
| |
+---------+---------+
|
structure
|
...
これは 将来の設計目標であり、現在すべてのバックエンドが実装済みという意味ではありません。現状の実動バックエンドは RMC_POT と VASP です。
rmc_util との関係
RMC_POT 関連の汎用機能は rmc_util に分離されています。
rmc_util は、RMC_POT の fixed / free format の入力、構造制約、実行、ログ・HST・FIT・PPCF の解析などを単独でも利用できるライブラリです。
rmc_dft はそれらを利用して、RMC と DFT の間の構造受け渡し、反復実行、restart、VASP 側の計算条件と実行、全体のワークフロー制御を担当します。
この分離により、RMC_POT の汎用機能を RMC-DFT 以外からも利用できる一方、rmc_dft 側では RMC-DFT
ワークフローそのものの実装に集中できる構成になっています。