FNC (Fixed Neighbour Constraint)
FNC とは
FNC (Fixed Neighbour Constraint) は、 RMC_POT が持つ局所構造拘束機能である。
通常の Reverse Monte Carlo では、 実験データとの一致のみを評価するため、
化学結合が切れる
配位数が大きく変化する
ネットワークが崩壊する
といった構造が生成されることがある。
FNC はこれを防ぐために導入された拘束であり、 指定した近接原子間の距離が一定範囲内に保たれるよう Monte Carlo の受理判定へ拘束条件を加える。
RMC_POT における FNC の位置付け
RMC_POT では
switch = 1
switch = 2
switch = 3
で FNC が利用される。
一方、
switch = 4
では GROMACS 形式 Topology を利用した Bonded Potential が使用される。
そのため、
switch = 4
では FNC と Topology は 役割が一部重複するが、 拘束方法は全く異なる。
FNC の考え方
FNC は
距離拘束
のみを扱う。
例えば
Si ----- O
が
1.55 Å
~
1.75 Å
の範囲内であることを要求する。
距離がこの範囲を外れる Move は 受理されない、 あるいは受理確率が低下する。
つまり
Bond Potential
ではなく
Allowed Distance Range
を与える拘束である。
本ライブラリでの FNC 生成
本ライブラリでは、 Qn ネットワーク解析から得られた
Central
↓
Bridge
の結合情報を利用して FNC を生成する。
解析段階では
(atom_i,
atom_j,
type_id)
という情報のみを保持している。
ここで
type_id
は
距離範囲
を表す番号である。
Writer は この type_id を RMC_POT の FNC 定義へ変換する。
FNC Type
RMC_POT の FNC では
Type 1
↓
1.55〜1.75 Å
Type 2
↓
2.45〜2.70 Å
のように、
距離範囲を
type_id
で管理する。
本ライブラリでも JSON に定義された
fnc_ranges
を読み込み、
type_id
↓
(rmin, rmax)
へ変換する。
これにより 同じ距離拘束を持つ Pair を 一つの Type として共有できる。
FNC Pair
解析結果から生成される Pair は
(atom_i,
atom_j,
type_id)
である。
Writer はこれを
各 atom が
どの atom と
どの Type の拘束を持つか
という RMC_POT の入力形式へ並べ替える。
つまり
Pair List
ではなく
Atom List
へ変換して出力している。
FNC ファイル構成
本ライブラリが生成する FNC は 概ね次の構成となる。
FNC Type 数
各 Type の最小距離
各 Type の最大距離
原子数
Atom 1
拘束数
相手 atom
Type
Atom 2
...
実際には 各原子ごとに
拘束数
↓
拘束相手
↓
拘束 Type
が並ぶ。
この形式は RMC_POT が要求する 固定近接拘束入力形式に対応している。
Pair の対称性
本ライブラリでは
Si ----- O
という拘束は
Si
↓
O
だけではなく
O
↓
Si
としても保持する。
これは RMC_POT の入力が
各 atom の拘束一覧
という形式だからである。
そのため、 内部では Pair を対称化してから 出力を行う。
Type 管理
Writer は Type 番号が
1
↓
2
↓
3
↓
...
と連番になっていることを確認する。
これは RMC_POT が
Type 番号
↓
距離範囲
を 番号順で読み込むためである。
途中の番号が欠落している場合は 設定ミスと判断し、 エラーとして処理する。
FNC の特徴
FNC は
距離
しか拘束しない。
そのため、
Bond Angle
Dihedral
剛性
などは表現できない。
SiO₂ のような 四面体ネットワークでは
Si-O
距離だけでは
O-Si-O
Si-O-Si
角度は保持されない。
そのため 局所構造をより厳密に保持したい場合は
switch = 4
を利用し、
Topology による Bonded Potential を 利用する方が適している。
本ライブラリでの位置付け
FNC は
QnNetworkAnalysis
が生成した
抽象ネットワーク情報
から
RmcConstraintWriter
が生成する。
解析アルゴリズムは FNC の書式を知らず、
Writer は Qn 判定を知らない。
この責務分離により、
解析アルゴリズム
と
RMC_POT の書式
を独立して保守できる設計となっている。
次章では、
Bond・Angle・Molecule を扱う
Topology (*.top) の生成方法について解説する。