tsopt(遷移状態の構造最適化)¶
tsopt サブコマンドは、遷移状態(TS)の候補構造を 一次の鞍点へ最適化し、final geometry で Hessian を計算して虚振動の数(n_imag)を数えます。TS 最適化が成功すると、反応モードの虚振動が 1 つ出ます。
主な用途¶
TS 候補の仕上げ:
path-opt/path-searchの最高エネルギーのイメージ(HEI)やscanの頂点を、最適化した TS に仕上げる自作の構造の検証: 手で作った候補が TS か(n_imag = 1)を確かめ、反応モードをアニメーションで確認する
allの TS 段のやり直し:allで得た TS を、設定を変えて単独で最適化し直す
デフォルトの計算バックエンドは、Meta が公開した学習済みの機械学習原子間ポテンシャル(MLIP)の UMA です。-b/--backend で ORB、MACE、AIMNet2、DFT も選べます。
候補がまだ無い場合は、先に次のコマンドで作ってください。
手元にあるもの |
候補を作るコマンド |
|---|---|
反応物と生成物 |
|
反応物だけ、または動かしたい結合がある |
|
基本的な実行例¶
1. 標準の実行(RS-P-RFO)¶
電荷とスピン多重度を明示して実行します。
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 --out-dir ./result_tsopt
端末に [tsopt] Converged (n_imag=1). が出れば成功です。
2. Dimer 法¶
完全な Hessian を繰り返し計算するのが重い場合や、難しい候補で別の方法を試したい場合に使います。
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 --opt-mode dimer --out-dir ./result_tsopt_dimer
3. 余分な虚振動の除去¶
候補に虚振動が 2 つ以上ある場合は --flatten を付けます。
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 --flatten --out-dir ./result_tsopt_flatten
4. 保存した Hessian から開始¶
同じ構造で freq などの --dump-hess で保存した Hessian を読み込み、計算し直さずに始めます。
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 --read-hess ts_cand_hess.npy --out-dir ./result_tsopt
処理の仕組みと計算仕様¶
構造の読み込みと境界の固定: 電荷は
-qまたは-lから決まります。--freeze-links(デフォルト有効)では、切り出したクラスターのキャップ水素の親原子を固定し、可動原子だけで Hessian を扱います(PHVA: 部分 Hessian 振動解析)。PDB のモデルから得た.xyzの候補では、その PDB を--ref-pdbで渡すと、--freeze-linksで境界を固定できます。最適化法の選択(
--opt-mode):hess(デフォルト)は完全な Hessian を使う RS-P-RFO(restricted-step partitioned rational function optimization)を実行し、rsirfoとtrimはそれぞれ RS-I-RFO(restricted-step image RFO)と TRIM(trust-region image minimization)を選びます。dimer(またはgrad)は Hessian-guided Dimer 法で、勾配を使って最低固有モードを追い、ときどき厳密な Hessian で方向を更新します。反応モードに沿った探索: 反応モードの方向にはエネルギーを上り、それ以外の方向には下りながら、収束条件(
--thresh)を満たすまで構造を動かします。RS-P-RFO は Bofill 式で Hessian を更新し、1 ステップを信頼半径 0.1 bohr 以内に収めます。デフォルトのbakerは、力の最大値 3 × 10⁻⁴ 未満、力の RMS 2 × 10⁻⁴ 未満、ステップの最大値 3 × 10⁻⁴ 未満、ステップの RMS 2 × 10⁻⁴ 未満(原子単位)、エネルギー変化 10⁻⁶ hartree 未満の 5 つをすべて同時に求めます。どれも Gaussian のデフォルト(gau)より厳しい条件です。最後の確認: 収束すると、final geometry で Hessian を計算して n_imag を数え、各虚振動モードをアニメーションとして書き出します。ν < −5.00 cm⁻¹ のモードを虚振動として数え、−5.00 以上 0 cm⁻¹ 未満の値は数値誤差として扱います。この閾値は YAML の
freq.zero_cutoff_cmで変えられます。固定原子の扱いはfreqと同じです。余分な虚振動の除去(
--flatten): 虚振動が 2 つ以上残る場合は、余分なモードに沿って構造をずらして最適化し直し、1 つになるか回数の上限に達するまで繰り返します。Dimer 法では、各回でダイマー方向も更新し、短い Dimer + L-BFGS の区間を実行します。
TS の判定¶
結果は、実行がどう終わったかで決まります。
終わり方 |
端末の |
終了コード |
|
|
|---|---|---|---|---|
収束 |
|
0 |
final geometry、n_imag、虚振動モード |
n_imag ≥ 1 なら IRC へ進み、n_imag = 0 なら IRC の前で止まる |
エネルギーが変わらなくなって停止 |
|
1 |
final geometry と n_imag |
IRC の前で止まる |
未収束で停止(多くは |
|
1 |
final geometry(Hessian なし) |
IRC の前で止まる |
|
|
0 |
final geometry(Hessian なし) |
反応モードを確かめられないため、IRC の前で止まる |
最後の Hessian の計算に失敗 |
|
1 |
final geometry と、 |
IRC の前で止まる |
n_imag は次のように読みます。
n_imag |
意味 |
|---|---|
1 |
一次の鞍点。モードが狙った原子を動かしているかを確かめてから、 |
0 |
虚振動なし。構造が極小点の側へ緩和しています |
2 以上 |
高次の鞍点。余分な虚振動が残っています。 |
n_imag は端末の [tsopt] の判定の行か、--out-json を付けたときの result.json の n_imaginary_modes で読みます。
最適化後に n_imag が 1 でない場合¶
n_imag が 1 でない場合や、モードが狙った反応の原子を動かしていない場合は、次を試してください。これらは組み合わせて使えます。
結果 |
試すこと |
|---|---|
n_imag = 0 |
候補が鞍点から遠い状態です。経路探索や scan でよりよい候補を作ってください。 |
n_imag ≥ 2 |
各モードの動きを確かめてください。 |
モードは 1 つだが動きが違う |
どの原子が動くかを確かめ、狙った反応に近い候補から始めてください |
例として、fp64 と DLC 座標で、flatten を有効にしてやり直す場合は次のようにします。
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 \
--precision fp64 --coord-type dlc --flatten --out-dir ./result_tsopt_retry
ほかの手は TS が取れないとき に、そのほかの失敗は トラブルシューティング にあります。
主な出力ファイル¶
実行が終わると、--out-dir に次のファイルができます。
result_tsopt/
├─ final_geometry.xyz # final geometry(常に出力)
├─ final_geometry.pdb # 同じ構造の PDB(PDB/mmCIF 入力。Gaussian 入力では .gjf)
├─ vib/
│ ├─ imag_-385.20cm-1_trj.xyz # 虚振動モードごとのアニメーション
│ └─ imag_-385.20cm-1.pdb # 同じアニメーションの PDB(PDB/mmCIF 入力)
├─ optimization_trj.xyz # 最適化の軌跡(--dump。Dimer 法では optimization_all_trj.xyz)
└─ result.json # 結果の要約(--out-json)
mmCIF の入力と、PDB の欄に入りきらない大きな PDB の入力では、元の識別子を保った .cif も書きます。
final geometry:
final_geometry.*を、ircに渡す TS として使います。反応モード:
vib/imag_*_trj.xyzを PyMOL や VMD で開き、生成・切断される結合に沿って原子が動いているかを確かめてください。要約:
--out-jsonを付けると、result.jsonに終わり方optimization_statusとhessian_statusが記録されます。
主な CLI オプション¶
オプション |
引数の型 |
デフォルト |
説明 |
|---|---|---|---|
|
パス |
(必須) |
入力構造ファイル( |
|
整数 |
|
系全体の総電荷。 |
|
整数 |
|
スピン多重度(2S+1) |
|
文字列 |
|
リガンドの総電荷(例: |
|
パス |
|
|
|
パス |
|
出力先ディレクトリ |
|
文字列 |
|
バックエンド( |
|
|
|
最適化法: RS-P-RFO / Dimer / RS-I-RFO / TRIM( |
|
パス |
|
反応モードの参照方向( |
|
|
|
Hessian の計算法(有限差分 / 解析的) |
|
フラグ |
|
余分な虚振動を除く |
|
フラグ |
|
キャップ水素の親原子を固定(PDB/mmCIF 入力または |
|
文字列 |
|
固定する原子(1 始まり、カンマ区切り: 例 |
|
プリセット |
|
収束条件( |
|
整数 |
|
最適化サイクルの上限 |
|
フラグ |
|
エネルギーが変わらなくなったら(直近 50 サイクルの幅が 1e-4 hartree 未満)止め、Hessian を計算 |
|
フラグ |
|
収束後の最後の Hessian を省く |
|
パス |
|
Hessian を計算せず |
|
パス |
|
final geometry の Hessian を |
|
|
バックエンドごと( |
バックエンドの精度。 |
|
|
|
最適化に使う座標系:デカルト座標 / 冗長内部座標 / 非局在化内部座標(DLC)/ 並進・回転を含む内部座標(TRIC) |
|
パス |
|
コマンドラインのオプションより前に適用する YAML ファイル |
|
フラグ |
|
最適化の軌跡を書き出す |
|
フラグ |
|
結果の要約を |
全オプションは pdb2reaction tsopt --help-advanced または 自動生成のオプションの一覧(英語のみ) を参照してください。
補足: YAML では、Dimer 法は
hessian_dimer:ブロックを読み、RS-P-RFO・RS-I-RFO・TRIM はrsirfo:ブロックを共用します。キーは YAML 設定の一覧のrsirfoとhessian_dimerにあります。
補足: 最適化の途中で反応モードが別の Hessian 固有ベクトル(root)に入れ替わる場合は、
rsirfo.track_mode_by_overlap: trueを設定してください。
補足: 収束が遅い場合は、
rsirfo.hessian_recalc(デフォルト500)を 50〜200 に下げてください。厳密な Hessian を計算し直す間隔が短くなり、計算は増えますが収束しやすくなります。
使用上の注意点¶
--flatten を使うとき¶
flatten の回数は、Dimer 法でも RS-P-RFO・RS-I-RFO・TRIM でも、YAML の 1 つのキー hessian_dimer.flatten_max_iter で決まります。
コマンドライン |
flatten の回数 |
|---|---|
|
|
|
YAML の値(正の値の場合)、無ければ |
|
YAML に値があっても |
--flatten は欠けている反応モードを作れません。n_imag = 0 の場合は、よりよい候補を作ってください。
そのほかの注意¶
上り方向のステップは常に許可: 鞍点探索では反応モードに沿ってエネルギーを上る必要があるため、YAML で指定しても
tsoptはreject_uphill: falseを保ちます。--reject-uphill/--no-reject-uphillは、optとallの端点の最適化で使うフラグです。生成物側から scan した障壁: この候補を作った scan が生成物から始まった場合、障壁の読み方は scan: 障壁の向き を参照してください。
追う固有ベクトル(root)は 1 つ: 最適化は 1 つの固有ベクトルに沿って上ります(
0が最小の固有値)。rsirfo.roots: [0]のように 1 要素のリストで指定します。Dimer 法ではhessian_dimer.rootを使います。tsoptに--rootフラグはありません。そのほかの RS-P-RFO の設定:
trust_norm: max_atomはステップ全体ではなく原子ごとの変位を制限し(Cartesian 座標だけ)、hessian_update: ts_bfgsは Bofill の代わりに TS-BFGS で Hessian を更新します。どちらも信頼半径は変えません。追加の探索は指定したときだけ: 収束後は、n_imag が 1 でなくても、自動では追加の探索をしません。
--flattenを使うか、rsirfo.saddle_recovery_max_cyclesを0より大きくしてください(デフォルト0)。後者では、厳密な Hessian に虚振動が無いとき、RS-P-RFO・RS-I-RFO・TRIM がエネルギーを上る向きにステップを進めます。併用できない組み合わせ:
--skip-final-freqと--dump-hess、2 以上の--uma-workersと--hessian-calc-mode Analytical。--skip-final-freqと--flatten: RS-P-RFO・RS-I-RFO・TRIM では、--skip-final-freqを付けると、最後の Hessian を使う--flattenも省かれます。--read-hessを RS-P-RFO・RS-I-RFO・TRIM で使う場合: ファイルの Hessian が最初の厳密な Hessian の代わりになるので、rsirfo.hessian_initはデフォルトのcalcのままにしてください。ほかの値ではエラーで止まります。Dimer の方向: Dimer 法は今の方向を出力先の
.dimer_mode.datに書きます。--ref-modeと固定原子:--ref-modeは MEP から反応の方向を与えるだけで、固定境界の扱いは変えません。
関連ドキュメント¶
irc — 最適化した TS からの反応経路の追跡
freq — 完全な振動解析と熱化学補正
path-opt / path-search / scan — TS 候補の作成
all — 抽出・MEP・TS 最適化・IRC・振動解析を一度に実行するワークフロー
反応機構を調べるコツ — TS が取れないときに試すこと
トラブルシューティング — 実行が失敗したときの切り分け
YAML 設定の一覧 —
rsirfoとhessian_dimerのすべての設定用語集 — TS、Dimer、Hessian などの用語
終了コード — 終了ステータスの意味