MLIP の TS を DFT で確かめる¶
MLIP で妥当な経路が見つかったら、その TS をそのまま DFT での TS 構造最適化にもっていくことにも pdb2reaction は対応しています。TS 最適化 → IRC → 端点の最適化 → 振動数計算のワークフローを、GPU4PySCF を用いることで GPU で高速化された DFT 計算により実行可能です。
主役は MLIP による経路探索で、DFT は MLIP で見つけた TS 候補を確かめるための追加の機能です。
主な用途¶
TS を DFT で詰める:TS 最適化 → IRC → 端点の最適化 → 振動数計算を DFT で実行します(
-b dft)。MLIP の計算に DFT のエネルギーを足す:MLIP で得た R・TS・P に DFT の一点計算を行います(
--dft)。
処理の流れ¶
基本的な実行例¶
1. 小さなモデルで MLIP の探索を行う¶
DFT で扱える大きさのモデルで MLIP の探索を行います。出てくる TS の result_mlip/segments/seg_01/ts.pdb を例 2 の入力にします。seg_01 は最初の反応セグメントです。セグメントが複数あるときは、詰めたい段のものを選んでください。
pdb2reaction all -i 1.R.pdb 3.P.pdb -c 'SAM,GPP,MG' -l 'SAM:1,GPP:-3' \
-r 0 --selected-resn '44,63,186' --tsopt -o ./result_mlip
-r 0 --selected-resn でのモデルの組み方は モデルを削る にあります。
2. TS を DFT で詰める¶
例 1 の TS を 1 つだけ入力にすると、TS-only モードになります。DFT 用の追加パッケージが要ります。
pdb2reaction all -i result_mlip/segments/seg_01/ts.pdb -l 'SAM:1,GPP:-3' \
--tsopt --thermo -b dft -o ./result_dft
モデルは 300 原子くらいまでに¶
DFT で最適化できるのは、多くても 300 原子くらいまでです。300 と比べるのはキャップ水素を含む原子数で、モデルを確かめるの端末の行から N + M として求めます。MLIP で探す前にこの大きさのモデルを作っておけば、出てきた TS をそのまま DFT に渡せます。
モデルの削り方は モデルを削る、手で削ったモデルの境界の原子の固定は 原子の固定と距離の拘束 を見てください。
-b dft と --dft の違い¶
オプション |
DFT で計算するもの |
使う場面 |
|---|---|---|
|
計算のすべて(MEP 探索、TS 最適化、IRC、端点の最適化、振動数) |
TS 候補を DFT で詰めて確かめる |
|
MLIP で得た R・TS・P の一点計算( |
MLIP の構造で DFT のエネルギーを得る |
-b dft は 11 のコマンドで使えます:all、opt、tsopt、irc、freq、scan、scan2d、scan3d、path-opt、path-search、sp。
主な出力ファイル¶
-b dft の出力の並びは、同じモードの MLIP の計算と同じです(TS-only モードは期待される出力)。--dft を付けると、次のファイルが増えます。
ファイル |
内容 |
|---|---|
|
各状態の DFT 一点計算の結果 |
|
MLIP の構造での DFT のエネルギー図 |
|
DFT のエネルギーに MLIP の熱補正を足した図( |
|
全セグメントをまとめた同じ図(出力ディレクトリの直下) |
主な CLI オプション¶
オプション |
説明 |
デフォルト値 |
|---|---|---|
|
DFT を計算に使います(GPU4PySCF。 |
|
|
汎関数と基底を |
|
|
|
|
|
R・TS・P に DFT の一点計算を足します( |
|
|
|
|
ほかの DFT のオプションは all のオプションの一覧(英語のみ)にあります。
補足: YAML では、
-b dftの設定はcalc.dftに書き、--dftの一点計算はdftコマンドと同じく最上位のdftセクションを読みます。どちらのブロックでも、pyscfで PySCF のオブジェクトに名前ごとに属性を渡せます。たとえば収束しにくい SCF には、calc.dft.pyscfかdft.pyscfの下にmf: {level_shift: 0.2}と書きます。キーの一覧は YAML 設定の一覧と dft セクション にあります。
使用上の注意点¶
DFT 用の追加パッケージ:PyTorch の wheel が
cu130・cu132ならpip install "pdb2reaction[dft]"、cu126ならpip install "pdb2reaction[dft-cuda12]"で入れてください。GPU が無いときは--dft-engine cpuを付けてください。電荷:残基を除くと全体の電荷が変わります。DFT を流す前に、例 1 の端末の出力の
Total active site model chargeを確かめてください。キャップ水素:
ts.pdbにはモデルのキャップ水素(LKH/HL)が残っているので、DFT の計算でも MLIP のときと同じく、その親原子が固定されます。組み合わせ:
-b dftと--dftは一緒に使えず、実行の始めにエラーで止まります。-b dftの計算の後に DFT の一点計算を足すときは、別のジョブでpdb2reaction sp -b dftかpdb2reaction dftを実行してください。--dftと--thermoには--tsoptが必要です。図のファイル名とキーの名前:
-b dftでも、図のファイル名はenergy_diagram_MLIP.pngとenergy_diagram_G_MLIP.png(--thermoのとき)、summary.jsonのブロックの名前はmlipとgibbs_mlipのままです。中身は DFT の値で、図の題には DFT と出ます。メモリとスレッド数:
-b dftと--dftは、pdb2reaction dftと同じ低メモリモード・--dft-nprocs・--dft-memoryを使います。GPU のメモリが足りないときはモデルを削り、--dftでメモリが足りないときは--dftを外してpdb2reaction dftを別に実行してください。SCF が収束しないとき:初期推測をやり直しても SCF が収束しないときは、
PySCF SCF did not converge with either the reused density or a fresh guess.で計算が止まります。メモリに余裕があれば--no-dft-low-memoryの密度フィッティングか、YAML のレベルシフトで収束しやすくなることがあります。段階的なグリッド:
--scf-stepwise-grid(デフォルトは on)は、各実行の最初の SCF を、グリッドレベル 1・収束閾値 1e-6 でいったん収束させ、その密度から指定のグリッドと閾値で収束させます。2 回目以降の SCF は、これまでどおり前の密度から始めます。効果は系によって変わり、小さい系では少し遅くなることがあります。--no-scf-stepwise-gridで無効にできます。指定のグリッドレベルが 1 以下のときと、pyscf.grids.atom_gridでグリッドを直接指定したときは、段階化を行いません。粗い段階が収束しなかったときは、通常の SCF を行います。SCF のチェックポイント:ファイルがとても大きくなることがあるので、デフォルトでは保存しません。
--save-scf-checkpointで保存し、--scf-checkpoint PATHで使うファイルを選べます。パスを省くと、all以外のコマンドは<out-dir>/_work/dft_scf/state.chkに、allは状態ごとに別のファイルに保存します。チェックポイントは、手法・原子の順番・座標が今の構造と一致するときだけ使われます。
関連ドキュメント¶
dft:DFT 一点計算とポピュレーション解析sp:任意のバックエンドでの一点のエネルギーと力クイックスタート:TS-only モード:
all --tsoptで TS 候補を確かめるクラスターモデルの組み方:活性部位モデルを組む・削る・広げる
インストール:手順 7 で DFT 用の追加パッケージを入れる
MLIP バックエンド:バックエンドの選び方
トラブルシューティング:計算が失敗したとき