分子動力学法のアルゴリズム各種のチートシート

エネルギー一定(NVE)

速度Verlet

  1. \(\vec{v} (\frac{h}{2}) = \vec{v}(0) + \frac{h}{2} \vec{F}(0)\)
  2. \(\vec{x} (h) = \vec{x}(0) + h \vec{v}(\frac{h}{2})\)
  3. \(\vec{F}(h)\) を計算する
  4. \(\vec{v} (h) = \vec{v}(\frac{h}{2}) + \frac{h}{2} \vec{F}(h)\)

位置Verlet

  1. \(\vec{x} (\frac{h}{2}) = \vec{x}(0) + \frac{h}{2} \vec{v}(0)\)
  2. \(\vec{F}(\frac{h}{2})\) を計算する
  3. \(\vec{v} (h) = \vec{v}(0) + h \vec{F}(\frac{h}{2})\)
  4. \(\vec{x} (h) = \vec{x}(\frac{h}{2}) + \frac{h}{2} \vec{v}(h)\)

温度一定(NVT)

Berendsen熱浴

  1. \(\vec{v} (\frac{h}{2}) = \vec{v}(0) + \frac{h}{2} \vec{F}(0)\)
  2. \(\vec{x} (h) = \vec{x}(0) + h \vec{v}(\frac{h}{2})\)
  3. \(\vec{F}(h)\) を計算する
  4. \(\vec{v} (h) = \vec{v}(\frac{h}{2}) + \frac{h}{2} \vec{F}(h)\)
  5. \(\alpha = \sqrt{1 + h \frac{T_\mathrm{target} - T}{\tau T}}\) を計算する
  6. \(\vec{v} (h) = \alpha \vec{v}(h)\)

Nosé-Hoover熱浴

  1. 熱浴の更新
    1. \(v_\xi = v_\xi + \frac{h}{4} (|\vec{v}(0)|^2 - N_\mathrm{DOF}T_\mathrm{target}) / Q\)
    2. \(\vec{v}(0) = \exp(-v_\xi \frac{h}{2}) \vec{v}(0)\)
    3. \(v_\xi = v_\xi + \frac{h}{4} (|\vec{v}(0)|^2 - N_\mathrm{DOF}T_\mathrm{target}) / Q\)
  2. \(\vec{v} (\frac{h}{2}) = \vec{v}(0) + \frac{h}{2} \vec{F}(0)\)
  3. \(\vec{x} (h) = \vec{x}(0) + h \vec{v}(\frac{h}{2})\)
  4. \(\vec{F}(h)\) を計算する
  5. \(\vec{v} (h) = \vec{v}(\frac{h}{2}) + \frac{h}{2} \vec{F}(h)\)
  6. ステップ1を繰り返す

Nosé-Hoover Chain熱浴

  1. 熱浴の更新(降順)
    1. \(v_{\xi_M} = v_{\xi_M} + \frac{h}{4} (Q_{M-1} v_{\xi_{M-1}}^2 - T_\mathrm{target}) / Q_M\)
    2. \(v_{\xi_{M-1}} = \exp(-v_{\xi_M} \frac{h}{8}) v_{\xi_{M-1}}\)
    3. \(v_{\xi_{M-1}} = v_{\xi_{M-1}} + \frac{h}{4} (Q_{M-2} v_{\xi_{M-2}}^2 - T_\mathrm{target}) / Q_{M-1}\)
    4. \(v_{\xi_{M-1}} = \exp(-v_{\xi_M} \frac{h}{8}) v_{\xi_{M-1}}\)
    5. ステップ2から4を \(M-2\) 番目、 \(M-3\) 番目、 \(\cdots\) 、3番目の熱浴に対して繰り返す
    6. \(v_{\xi_2} = \exp(-v_{\xi_3} \frac{h}{8}) v_{\xi_2}\)
    7. \(v_{\xi_2} = v_{\xi_2} + \frac{h}{4} (Q_1 v_{\xi_1}^2 - T_\mathrm{target}) / Q_2\)
    8. \(v_{\xi_2} = \exp(-v_{\xi_3} \frac{h}{8}) v_{\xi_2}\)
    9. \(v_{\xi_1} = \exp(-v_{\xi_2} \frac{h}{8}) v_{\xi_1}\)
    10. \(v_{\xi_1} = v_{\xi_1} + \frac{h}{4} (|\vec{v}(0)|^2 - N_\mathrm{DOF} T_\mathrm{target}) / Q_1\)
    11. \(v_{\xi_1} = \exp(-v_{\xi_2} \frac{h}{8}) v_{\xi_1}\)
  2. \(\vec{v}(0) = \exp(-v_{\xi_1} \frac{h}{2}) \vec{v}(0)\)
  3. ステップ1を昇順に繰り返す
  4. \(\vec{v} (\frac{h}{2}) = \vec{v}(0) + \frac{h}{2} \vec{F}(0)\)
  5. \(\vec{x} (h) = \vec{x}(0) + h \vec{v}(\frac{h}{2})\)
  6. \(\vec{F}(h)\) を計算する
  7. \(\vec{v} (h) = \vec{v}(\frac{h}{2}) + \frac{h}{2} \vec{F}(h)\)
  8. ステップ1, 2, 3を繰り返す

Bussi熱浴

  1. \(\vec{v} (\frac{h}{2}) = \vec{v}(0) + \frac{h}{2} \vec{F}(0)\)
  2. \(\vec{x} (h) = \vec{x}(0) + h \vec{v}(\frac{h}{2})\)
  3. \(\vec{F}(h)\) を計算する
  4. \(\vec{v} (h) = \vec{v}(\frac{h}{2}) + \frac{h}{2} \vec{F}(h)\)
  5. \(\alpha = \sqrt{f + \frac{T_\mathrm{target}}{|\vec{v}(h)|^2} (1 - f)(r_1^2 + r_2^2 + 2g) + 2 r_1 \sqrt{f(1 - f) \frac{T_\mathrm{target}}{|\vec{v}(h)|^2}}}\) を計算する
  6. \(\vec{v} (h) = \alpha \vec{v}(h)\)

Langevin熱浴(BAOAB)

  1. \(\vec{v} (\frac{h}{2}) = \vec{v}(0) + \frac{h}{2} \vec{F}(0)\)
  2. \(\vec{x} (\frac{h}{2}) = \vec{x}(0) + \frac{h}{2} \vec{v}(\frac{h}{2})\)
  3. \(\vec{v}^* (\frac{h}{2}) = c_1 \vec{v} (\frac{h}{2}) + c_3 \vec{r}\)
  4. \(\vec{x} (h) = \vec{x}(\frac{h}{2}) + \frac{h}{2} \vec{v}^*(\frac{h}{2})\)
  5. \(\vec{F}(h)\) を計算する
  6. \(\vec{v} (h) = \vec{v}^*(\frac{h}{2}) + \frac{h}{2} \vec{F}(h)\)

なお、BAOABの分解が最も精度が良いとされている

Langevin熱浴(ABOBA)

  1. \(\vec{x} (\frac{h}{2}) = \vec{x}(0) + \frac{h}{2} \vec{v}(0)\)
  2. \(\vec{F}(\frac{h}{2})\) を計算する
  3. \(\vec{v} (\frac{h}{2}) = \vec{v}(0) + \frac{h}{2} \vec{F}(\frac{h}{2})\)
  4. \(\vec{v}^* (\frac{h}{2}) = c_1 \vec{v} (\frac{h}{2}) + c_3 \vec{r}\)
  5. \(\vec{v} (h) = \vec{v}^* (\frac{h}{2}) + \frac{h}{2} \vec{F}(\frac{h}{2})\)
  6. \(\vec{x} (h) = \vec{x}(\frac{h}{2}) + \frac{h}{2} \vec{v}(h)\)

Langevin熱浴(SPV)

  1. \(\vec{x} (\frac{h}{2}) = \vec{x}(0) + \frac{h}{2} \vec{v}(0)\)
  2. \(\vec{F}(\frac{h}{2})\) を計算する
  3. \(\vec{v} (h) = c_1 \vec{v} (0) + c_2 \vec{F}(\frac{h}{2}) + c_3 \vec{r}\)
  4. \(\vec{x} (h) = \vec{x}(\frac{h}{2}) + \frac{h}{2} \vec{v}(h)\)

参考文献: