irc(固有反応座標)¶
irc サブコマンドは、ML/MM の系で最適化した遷移状態(TS)から、EulerPC(Euler 予測子–修正子法)で固有反応座標(IRC)を両方向へたどります。各分岐の軌跡と、2 つの端点の候補を書き出します。この端点を opt で最適化すると、TS がどの反応物(R)と生成物(P)をつなぐかが分かります。
主な用途¶
TS の確認:
tsoptとfreq(n_imag = 1)の後に、TS が意図した R と P をつなぐかを確かめるR と P の取得: 端点を
optで最適化し、この TS の R と P の構造を得るallの IRC 段のやり直し:allの IRC を、設定を変えて単独でたどり直す
ML 領域の計算バックエンドにはデフォルトの UMA(Meta)のほか、-b/--backend で ORB、MACE、AIMNet2、DFT も選べます。MM 原子には --parm7 の Amber 力場を使います。
基本的な実行例¶
1. 両方向の IRC¶
TS の構造 ts.pdb から両方向へたどり、--out-json で結果の要約も書き出します。
mlmm irc -i ts.pdb --parm7 real.parm7 --model-pdb ml_region.pdb \
-q 0 -m 1 --out-json --out-dir ./result_irc
端点の候補は forward_first.xyz と backward_last.xyz です。
2. 順方向だけ¶
順方向の分岐だけをたどります。
mlmm irc -i ts.pdb --parm7 real.parm7 --model-pdb ml_region.pdb \
-q 0 -m 1 --no-backward --out-dir ./result_irc_forward
3. 解析 Hessian¶
最初の Hessian を、ML バックエンドに有限差分ではなく解析的に計算させます。
mlmm irc -i ts.pdb --parm7 real.parm7 --model-pdb ml_region.pdb \
-q 0 -m 1 --hessian-calc-mode Analytical --out-dir ./result_irc_analytical
4. 小さいステップでの再試行¶
分岐が数フレームで止まるときは、最大ステップを 0.05 bohr にして再試行します。
mlmm irc -i ts.pdb --parm7 real.parm7 --model-pdb ml_region.pdb \
-q 0 -m 1 --step-size 0.05 --out-dir ./result_irc_small_step
5. サイクルの上限までたどる¶
--never-stop を付けると、勾配とエネルギーによる停止の条件を無視し、各分岐を --max-cycles までたどります。
mlmm irc -i ts.pdb --parm7 real.parm7 --model-pdb ml_region.pdb \
-q 0 -m 1 --step-size 0.05 --never-stop --max-cycles 250 \
--out-dir ./result_irc_continue
処理の仕組みと計算仕様¶
ML/MM の系の組み立て:
-iから TS の構造を、--parm7から Amber のトポロジーを、--model-pdbから ML 領域 を読みます。-qと-mは ML 領域の電荷とスピン多重度です。出発の方向: TS で Hessian を計算するか
--read-hessのファイルから読み、剛体運動をfreqと同じように除いてから、--root番目(デフォルト0)の固有ベクトルを反応モードとします。そのモードが虚振動でなければ、エラーで止まります。EulerPC による積分: 各分岐(順方向、次に逆方向)は TS から始まります。各ステップでは、質量加重の最急降下方向に沿って Euler 予測子で進み、続いて DWI(距離加重補間)面の上で修正 Bulirsch–Stoer 修正子をかけます。予測子の勾配は、Bofill 式で更新する現在の Hessian を使った 2 次の Taylor 展開で見積もります。分岐は、TS の近くを出た後に RMS 勾配が 1 × 10⁻³ hartree/bohr を下回ったとき、エネルギーが上がったとき、1 ステップのエネルギー変化が 1 × 10⁻⁶ hartree 以下になったとき、または
--max-cycles(デフォルト 125)に達したときに止まります。経路の書き出し: 各分岐、TS を通る経路全体、端の構造を書き出します。PDB/mmCIF の入力か
--ref-pdbがあるときは、軌跡と 2 つの端点の候補を PDB にも変換します。
IRC の成否の判定¶
IRC が収束しなくても、端点の最適化で狙った R と P に着けば、その結果は使えます。
確かめること |
見る場所 |
|---|---|
出発点が TS か |
端末の |
各分岐の止まり方 |
|
経路に沿って変わる結合 |
|
どちらの端が R でどちらが P か |
|
irc は端点を判定しないので、端点が狙った R と P かは自分で確かめてください。
端点は .xyz なので、原子の順と層を与える TS の PDB を --ref-pdb で渡して、両方の端点を opt で最適化してください。
mlmm opt -i result_irc/forward_first.xyz --ref-pdb ts.pdb --parm7 real.parm7 \
--model-pdb ml_region.pdb -q 0 -m 1 --out-dir ./result_opt_forward
mlmm opt -i result_irc/backward_last.xyz --ref-pdb ts.pdb --parm7 real.parm7 \
--model-pdb ml_region.pdb -q 0 -m 1 --out-dir ./result_opt_backward
端点が意図した R と P でないときは、TS が取れないとき を参照してください。
主な出力ファイル¶
実行が終わると、--out-dir(デフォルト: ./result_irc/)に次のファイルができます。
result_irc/
├─ finished_irc_trj.xyz # TS を通る IRC 経路全体
├─ finished_irc.pdb # 同じ経路の PDB
├─ finished_first.xyz # 経路全体の最初のフレーム(順方向を実行したときは forward_first.xyz と同じ構造)
├─ finished_last.xyz # 経路全体の最後のフレーム(逆方向を実行したときは backward_last.xyz と同じ構造)
├─ forward_irc_trj.xyz # TS から順方向の分岐(実行したとき)
├─ forward_irc.pdb # 同じ分岐の PDB
├─ forward_first.xyz # 順方向の分岐の端(端点の候補)
├─ forward_first.pdb # 同じ構造の PDB
├─ backward_irc_trj.xyz # TS から逆方向の分岐(実行したとき)
├─ backward_irc.pdb # 同じ分岐の PDB
├─ backward_last.xyz # 逆方向の分岐の端(端点の候補)
├─ backward_last.pdb # 同じ構造の PDB
└─ result.json # 結果の要約(--out-json)
.pdb は、PDB/mmCIF の入力か --ref-pdb があるときに書きます。mmCIF の入力 と、PDB の欄に入りきらない大きな PDB の入力では、元の識別子を保った .cif も書きます。
端点の候補:
forward_first.xyzとbackward_last.xyzをoptで最適化します。各分岐は TS 側のもう一方の端(forward_last.xyz、backward_first.xyz)も書きます。経路:
finished_irc_trj.xyzかfinished_irc.pdbを PyMOL や VMD で開くと、反応の動きを見られます。要約:
--out-jsonを付けると、result.jsonに各分岐のフレーム数(n_frames_forward、n_frames_backward)、各分岐の止まり方、bond_changes、両端と TS のエネルギー(energy_first_hartree、energy_ts_hartree、energy_last_hartree)、rigid_projectionに除いた剛体運動と最初の Hessian の情報が記録されます。端末: 各分岐のステップの表と実行時間が出ます。
補足: YAML で
irc.prefix: trialとすると、result.json以外のファイルの名前がtrial_finished_irc_trj.xyzのようにtrial_で始まり、result.jsonのfilesにも接頭辞つきの名前が記録されます。YAML のirc.dump_everyに正の整数を指定すると、実行中に HDF5 のチェックポイントirc_data.h5も書きます(デフォルトは書きません)。
主な CLI オプション¶
ML/MM の計算コマンドに共通のオプションは ML/MM の共通オプション に 1 か所でまとめてあります。下の表は irc に固有のものだけです。
オプション |
引数の型 |
デフォルト |
説明 |
|---|---|---|---|
|
パス |
(必須) |
TS の構造( |
|
整数 |
|
ML 領域の電荷。 |
|
文字列 |
|
未知のリガンド残基の総電荷(例: |
|
整数 |
|
ML 領域のスピン多重度(2S+1) |
|
整数 |
|
分岐ごとの IRC ステップの上限 |
|
浮動小数点数 |
|
最大ステップ長(bohr、質量加重しない Cartesian 座標) |
|
整数 |
|
反応モードとする Hessian の固有ベクトル。固有値の昇順に 0 から数える |
|
フラグ |
|
順方向の分岐を実行 |
|
フラグ |
|
逆方向の分岐を実行 |
|
フラグ |
|
勾配とエネルギーによる停止の条件を無視し、 |
|
パス |
|
出力先ディレクトリ |
|
|
|
ML バックエンドが最初の Hessian を計算する方法 |
|
文字列 |
|
ML 領域のバックエンド( |
|
パス |
|
Hessian を計算せず、 |
|
フラグ |
|
結果の要約を |
全オプションは 自動生成のオプションの一覧(英語のみ) を参照してください。
補足: YAML(
--config)のircブロックのキーは、YAML 設定の一覧の irc にすべて載っています。
使用上の注意点¶
すぐ止まる分岐: 分岐がサイクルの上限より前に 3 フレーム以下で終わると、端末に
[irc] IRC stopped after only a few frames in …の警告が出ます。ステップが大きすぎると EulerPC が不安定になることがあるので、ほかの設定を変える前に、小さい--step-size(例:0.05)で再試行してください。--never-stopはデフォルト無効: 有効にすると、物理的な端点を過ぎてもサイクルの上限まで進みます。数値的な失敗や外部からの中断では止まります。軌跡を確かめて端点を最適化し、先の経路が役に立つときだけ--max-cyclesを増やしてください。--rootは 0 から数える: TS 最適化が成功すると、反応モードの虚振動が 1 つ出るので、n_imag = 1 の TS では--root 0(ただ 1 つの負の固有値)のままにしてください。1、2などは、反応モードより固有値の小さい(より負の)疑似モードがあると分かっているときだけ使います。Cartesian 座標: YAML の
geom.coord_typeにかかわらず、ircは Cartesian 座標を使います。--read-hessのファイル:freqと同じ.npyファイルで、単位は Hartree/bohr²、全原子か Hessian の計算に入る原子だけの分を持ちます。同じ構造・電荷・多重度・計算設定で求めた Hessian を渡してください。irc.hessian_init: calc(デフォルト)が必要です。ファイルを使ったときは、result.json["rigid_projection"]["hessian_source"]が"file"になります。解析 Hessian と
--uma-workers: UMA では、--hessian-calc-mode Analyticalは 1 より大きい--uma-workersと併用できず、エラーで止まります。解析 Hessian には--uma-workers 1を使ってください。速度とメモリ量はバックエンドと系によって変わるので、先に対象の系で両方を比べてください。固定原子: 固定 MM 層のほかに、
--freeze-atomsでほかの原子(1 始まり)も固定できます。選び方は 原子の固定と距離の拘束 を参照してください。大きな系:
--hess-device cpuを付けると、最初の Hessian を CPU に置き、IRC の Hessian の演算も CPU で行って、GPU のメモリに収めます。分岐は少なくとも 1 つ:
--no-forwardと--no-backwardを両方付けると、エラーで止まります。1 回に 1 構造:
-iには 1 つの構造を指定します。軌跡からは、使うフレームを先に.xyzに切り出し、--ref-pdbと一緒に渡してください。
関連ドキュメント¶
tsopt — IRC の前に TS を最適化する
freq — TS の虚振動が 1 つ(n_imag = 1)であることを確かめる
opt — IRC の端点を R と P へ最適化する
all —
tsoptの後に IRC を実行し、端点まで最適化する一連のワークフロートラブルシューティング — 実行が失敗したときの切り分け
YAML 設定の一覧 —
ircのすべての設定用語集 — IRC などの用語
終了コード — 終了ステータスの意味