分子動力学法における温度制御の基礎
はじめに
分子動力学法(Molecular Dynamics method, MD)における温度制御の基礎の話を書きます。簡単のため、かなり雑な議論をします。細かい式の導出などは、2019年の金沢大学における集中講義のノートなどを参照してください。
分子動力学法における温度
$N$原子から構成される三次元の系を考えます。原子に$1$から$N$まで通し番号をつけ、 $i$番目の原子を「$i$原子」と呼ぶことにしましょう。$i$原子の速度を$\vec{v}_i$、位置を$\vec{r}_i$としましょう。この系のハミルトニアン、すなわち全エネルギーが以下のように与えられています。
\[H = K(\{\vec{v}_i\}) + V(\{\vec{r}_i\})\]ただし、$K$は運動エネルギー、$V$はポテンシャル(相互作用)エネルギーです。ここではポテンシャルエネルギーについての詳細は考えません。
運動エネルギーは以下のように書けます。
\[K = \sum_i \frac{1}{2}m \vec{v}_i^2\]さて、この系が温度$T$であるとしましょう。すると、等分配則により、自由度あたり$k_B T/2$のエネルギーが分配されるのでした。ただし$k_B$はボルツマン定数です。
いま、原子が$N$個あり、三次元空間なので、運動エネルギーは$3N$の自由度を持っています。従って、運動エネルギーには全体として
\[K = \frac{3}{2} N k_B T\]のエネルギーが分配されます。分子動力学シミュレーションでは、全原子の速度ベクトルと位置ベクトルを追いかけるので、運動エネルギー$K$は簡単に計算することができます。そこで、先程の式を温度について解くと、
\[T= \frac{2K}{3N k_B}\]を得ます。これを、分子動力学シミュレーションにおける温度と定義します。
さて、分子動力学法では、$k_B=1$とする単位系をとることが多いです。すると、
\[T= \frac{2K}{3N}\]となります。$K/N$は、原子あたりの運動エネルギーです。原子あたりの運動エネルギー(平均運動エネルギー)を$\bar{K}$と書くと、最終的に
\[T= \frac{2}{3} \bar{K}\]となります。要するに温度とは、原子あたりの平均運動エネルギーの2/3倍のことです。
なぜ温度制御が必要なのか
分子動力学法は、与えられたハミルトニアンから導出されるハミルトンの運動方程式を数値積分することで、原子の座標や速度を更新していく手法です。$i$原子の運動量$\vec{p}_i = m\vec{v}_i$を用いると、ハミルトンの運動方程式は以下のように書けます。
\[\begin{aligned} \frac{d \vec{p}_i}{dt} &= -\frac{\partial H}{\partial \vec{r}_i}\\ \frac{d \vec{r}_i}{dt} &= \frac{\partial H}{\partial \vec{p}_i} \end{aligned}\]上記の式から、ただちに$H$の時間微分がゼロとなることがわかります。
\[\begin{aligned} \frac{d H}{dt} &= \sum_i \left( \frac{\partial H}{\partial \vec{r}_i} \frac{d\vec{r}_i}{dt} + \frac{\partial H}{\partial \vec{p}_i} \frac{d\vec{p}_i}{dt} \right) \\ &= \sum_i \left( \frac{\partial H}{\partial \vec{r}_i} \frac{\partial H}{\partial \vec{p}_i} - \frac{\partial H}{\partial \vec{p}_i} \frac{\partial H}{\partial \vec{r}_i} \right)\\ &=0 \end{aligned}\]つまり、普通にシミュレーションをすると、全エネルギー$E$が保存します。通常、体積$V$一定の条件でシミュレーションをするため、原子の数$N$、体積$V$、エネルギー$E$が一定のシミュレーションをしていることになります。この結果得られる統計集団を$NVE$アンサンブルといいます。
しかし、我々が知りたいのはエネルギー依存性ではなく、温度依存性であることが多いです。例えば、大気圧下で水が沸騰するのは原子あたりのエネルギーがXXジュールの時である、という情報は使いづらいです。温度100度の時に沸騰する、の方が知りたい情報です。そこで、原子の数$N$、体積$V$、温度$T$が一定のとなる統計集団を考えます。これを$NVT$アンサンブルといいます。
原子数が多ければ、$NVE$アンサンブルと$NVT$アンサンブルも本質的には同じものになります。従って、シミュレーションは$NVE$アンサンブルで行って、その時の運動エネルギーから温度$T$を求めれば、そのシミュレーションで得られた観測量は、温度$T$における値であるとみなすことができます。
従って、温度$T$における平衡状態の運動エネルギー$K$さえわかれば、$NVE$アンサンブルから$NVT$アンサンブルの情報を引き出すことができます。
さて、$NVE$アンサンブルにおいて、我々が調整できるパラメータは原子数$N$、体積$V$、そして全エネルギー$E$です。全エネルギーは、運動エネルギーとポテンシャルエネルギーの和でした。
\[E = K + V\]シミュレーションでは全エネルギーが保存するため、最終的に平衡状態では、全エネルギーの何割かが運動エネルギーに、残りがポテンシャルエネルギーに分配されます。そして、運動エネルギーと温度の関係は
\[K = \frac{3}{2} N k_B T\]とわかっているため、これで温度がわかります。問題は、全エネルギー$E$が$K$と$V$にどのように分配されるかはシミュレーション前にはわからないということです。全エネルギー$E$が与えられた時、それがどのくらい運動エネルギー$K$に分配され、どのくらいがポテンシャルエネルギー$V$に分配されるかは系の詳細に依存します。従って、温度$T$における物理量(例えば圧力)の値を知りたければ
- 適当な全エネルギー$E$でシミュレーションをしてみる
- 平衡状態になった時の運動エネルギー$K$を求める
- 運動エネルギー$K$からこの系の温度$T’$を求める
- 温度$T’$と目標温度$T$を比べて、全エネルギーを調整する
- 目標温度$T$に一致するまで1-4を繰り返す
という作業をする必要があります。不可能ではありませんが、極めて面倒です。そこで、「温度を指定してシミュレーションしたら、そのうち指定の温度に緩和して欲しい」という動機が生まれます。これが分子動力学法における温度制御です。
全エネルギーと温度制御
分子動力学シミュレーションにおいて、制御可能なのはエネルギーです。しかし我々は、全エネルギーの温度依存性$E(T)$を知りません。その状態で目標温度$T$になるようにエネルギー$E$を増やしたり減らしたりすることになります。
さて、エネルギーの温度依存性$E(T)$を、温度$T$で微分すると、この系の比熱が得られます。例えば体積一定の条件で微分すると定積比熱が得られます。
\[C_V = \left( \frac{\partial E}{\partial T}\right)_V\]「まともな系」であれば、一般に比熱は正になります。つまり、$E(T)$は$T$に関して増加関数です。従って、
- 温度を上げたければ全エネルギーを上げれば良い
- 温度を下げたければ全エネルギーを下げれば良い
ということになります。全エネルギーは運動エネルギーとポテンシャルエネルギーの和ですから、そのどちらかを増やしたり減らしたりすれば良いことになります。
さて、ポテンシャルエネルギーは位置の関数ですが、例えば相互作用する原子を引き離した時にエネルギーが増えるか減るかは相互作用の詳細に依存します。もし斥力が働いていれば引き離せばエネルギーは減るでしょうし、引力が働いていればエネルギーは増えます。Lennard-Jones原子などは、途中で引力と斥力が切り替わったりするのでとても面倒です。
一方、運動エネルギーの制御は簡単です。速度が速くなれば運動エネルギーは増え、速度が遅くなれば運動エネルギーが減ります。そこで、以下のように運動エネルギーを制御することにします。何か一定の定数$\alpha$を考え、速度をスケールします。
\[\vec{v}_i \rightarrow \alpha \vec{v}_i\]現在の温度を測定し、もし目標温度が低ければ$\alpha > 1$に、温度が高ければ$\alpha < 1$に設定すればそのうち温度が目標温度に近づくことになります。$\alpha$の決め方ですが、「目標温度における運動エネルギーになるように決めてしまう」のが一番楽です。運動エネルギー$K$は$\alpha^2K$に変換されるため、目標温度を$T$、現在の運動エネルギーを$K$として、
\[T= \frac{2\alpha^2 K}{3N}\]が満たされるように$\alpha$を決めてやります。すると、常に運動エネルギーは「指定の温度における等分配則が成立した場合の運動エネルギー」となります。
さて、ある温度$T$において、全エネルギー$E(T)$は、平衡状態において$K(T)$と$V(T)$に分配されます。逆に、今、全エネルギー$E$とポテンシャルエネルギー$V$が、温度$T$における平衡状態における値でない時、上記の方法で「常に無理やり運動エネルギーだけ温度$T$の平衡状態の値$K(T)$」を維持してやると、そのうち$V$や$E$も温度$T$における平衡状態での値になるでしょ、というのが温度制御の基本です。この方法を速度スケーリング法(Velocity Scaling method)と呼びます1。速度スケーリング法は、もっともプリミティブな温度制御法です。
その他の温度制御法
ベレンゼン法(Berendsen Thermostat)
速度スケーリング法は、「とりあえず運動エネルギーを指定温度の平衡状態の値に無理やり設定しておけば、そのうちポテンシャルエネルギーもその温度の値になるよね」という乱暴な方法でした。この方法だと、初期温度が指定温度から外れていた場合、かなり強烈な温度制御がかかることになります。すると、例えば衝撃波が発生したりして、シミュレーション的にうれしくありません。そこで、もう少しゆっくり温度制御しましょう、という発想で生まれたのがベレンゼン法(Berendsen Thermstat)です2。
Berendsen目標温度を$T_0$、現在の温度を$T$とした時、緩和の時定数$\tau$を使って
\[\frac{dT}{dt} = \frac{T_0 - T}{\tau}\]が成立するように温度を制御します(上記が成り立つように運動エネルギーを変化させます)。$\tau$を大きく取ればとるほど、ゆっくり温度を制御することになります。ベレンゼン法は非常に簡単であり、安定しているために広く使われています。
能勢フーバー法(Nosé–Hoover thermostat)
ベレンゼンの方法は簡単ですが、系が小さい場合に正しい統計集団であるカノニカル分布を再現しない、という問題があります。そこで、系が小さい場合でも厳密にカノニカル分布を再現する手法として、能勢フーバー法が提案されました。もともと仮想時間を用いる能勢の方法というものがあり、それをフーバー(W. G. Hoover)が改良して運動方程式を簡単にしたものが能勢フーバー法です3。なお、能勢の英語表記を「Nose」にすると「ノーズ」になってしまうため、「Nosé」と表記します。
能勢フーバー法の運動方程式は以下で与えられます。
\[\begin{aligned} \frac{d \vec{p}_i}{dt} &= -\frac{\partial H}{\partial \vec{r}_i} - \vec{p}_i \zeta\\ \frac{d \vec{r}_i}{dt} &= \frac{\partial H}{\partial \vec{p}_i} \\ \frac{d \zeta}{dt} &= \frac{1}{Q}\left(T - T_0\right) \end{aligned}\]新たに$\zeta$という変数が導入されています。$Q$は熱浴の質量と呼ばれ、緩和の時定数を決めます。ここでは証明しませんが、この運動方程式は目標温度$T_0$におけるカノニカル分布が厳密な定常状態となります。
ランジュバン法(Langevin thermostat)
ベレンゼン法や能勢フーバー法は、決定論的な運動方程式に従っていましたが、確率的な運動方程式に従う方法で温度制御する方法があります。それがランジュバン法(Langevin thermostat)です4。
運動方程式はこんな感じになります。
\[\begin{aligned} \frac{d \vec{p}_i}{dt} &= -\frac{\partial H}{\partial \vec{r}_i} - \gamma \vec{p}_i + \vec{R}\\ \frac{d \vec{r}_i}{dt} &= \frac{\partial H}{\partial \vec{p}_i} \\ \end{aligned}\]ここで、$\gamma$は摩擦力、$\vec{R}$はランダムな力で、例えば$\vec{R}$の$x$成分$R_x(t)$が
\[\left< R_x(t) R_x(t')\right> = 2 D \delta(t-t')\]を満たすように決められます(ホワイトノイズ)。$D$は揺動力の強さであり、$D$と$\gamma$の比が目標温度になるように決められます。
ベレンゼン法や能勢フーバー法は全運動エネルギーだけを見て制御していたのに対し、ランジュバン法は、全ての自由度(例えば$i$原子の速度の$x,y,z$成分)に対して個別に温度制御をするのが特徴です。こちらも、温度$T$におけるカノニカル分布が厳密な定常状態となります。
温度制御法の使い分け
能勢フーバー法やランジュバン法は温度$T$におけるカノニカル分布が厳密な定常状態になる一方、ベレンゼン法はそうなりません。しかし、その差異は極めて小さいため、あまり気にする必要はありません。
一般に、ベレンゼン法や能勢フーバー法の方がランジュバン法よりも緩和が早いため、問題がなければそちらを使えば良いでしょう。ただし、ベレンゼン法や能勢フーバー法は「全運動エネルギー」しか見ないため、例えば系が相分離するなどして一様でない場合、定常状態において温度が一様でなくなることがあります。例えば系の右側が高温、左側が低温のまま定常になっているが、平均温度が指定温度になっている、なんてことが起きたりします。一方、ランジュバン法はすべての自由度に対して作用するため、そのようなことは起きません。不安なら、ランジュバン法と能勢フーバー法の両方で時間発展させ、同じ状態に落ち着くか確認すると良いでしょう。
また、温度の「落ちつき方」も違います。ベレンゼン法やランジュバン法は指定の温度に指数関数的に緩和していくのに対して、能勢フーバー法は振動しながら緩和します。また、定常状態に落ち着いたあとも、手法由来の振動がエネルギーに乗ってしまうため、たとえばエネルギーの時間揺らぎのスペクトルを測定すると、そこに手法由来のピークが現れてしまいます。時間に関してフーリエ変換する場合は注意したほうが良いでしょう。
まとめ
以上、駆け足で分子動力学法における温度制御法をまとめてみました。雑にまとめるとこんな感じです。
- 等分配則から、平衡状態における温度と運動エネルギーの関係がわかる
- $NVE$アンサンブルも$NVT$アンサンブルも対して変わらないので、温度$T$と全エネルギー$E$の関係さえわかっていれば、その温度におけるエネルギー$E(T)$で$NVE$アンサンブルで計算すれば良い。しかし$E(T)$の関数形は事前にわからない。
- 温度制御が必要なのは、その温度での平衡状態において運動エネルギー$K$とポテンシャルエネルギー$V$の比が事前にわからないから
- 運動エネルギーを増減させることで温度を上下させ、最終的に指定温度に緩和するようにする手法が温度制御法
- 温度制御法には決定論的な手法(速度スケーリング法、ベレンゼン法、能勢フーバー法)と、確率的な方法(ランジュバン法)がある
- ベレンゼン法や能勢フーバー法の方がランジュバン法より緩和が早い(ことが多い)
- ベレンゼン法とランジュバン法は温度が指数関数的に緩和するが、能勢フーバー法は振動しながら緩和する
- ベレンゼン法や能勢フーバー法は、温度が一様にならない場合がある
他にも能勢フーバー法でのエルゴード性の破れとか、それに対応する能勢フーバー法チェイン法とかいろいろマニアックな話題はありますが、それは例えば以下の記事参照。
- 調和振動子に作用させた熱浴のエルゴード性 調和振動子系をNose-Hooverで制御すると温度が正しく制御されない理由と回避方法
- 分子動力学法における熱浴の保存量 Nose-Hoover法や多変数熱浴における数値積分の保存量について
-
L. V. Woodcock, Chem. Phys. Lett., vol. 10, p. 257 (1971). ↩
-
H. J. C. Berendsen et al., J. Chem. Phys., vol. 81,p. 3684 (1984). ↩
-
S. Nosé, Mol. Phys. vol. 52 p. 255 (1984)., W. G. Hoover, Phys. Rev. A, vol. 31, p. 1695 (1985). ↩
-
W. G. Hoover, A. J. C. Ladd, and B. Moran, Phys. Rev. Lett. vol. 48, p. 1818 (1982). ↩
A Robot’s Sigh