<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://comp.chem.tohoku.ac.jp/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB06%3A%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E5%8A%9B%E3%81%AE%E6%99%82%E9%96%93%E7%9B%B8%E9%96%A2%E9%96%A2%E6%95%B0</id>
	<title>チュートリアル06:ランダム力の時間相関関数 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="http://comp.chem.tohoku.ac.jp/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB06%3A%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E5%8A%9B%E3%81%AE%E6%99%82%E9%96%93%E7%9B%B8%E9%96%A2%E9%96%A2%E6%95%B0"/>
	<link rel="alternate" type="text/html" href="http://comp.chem.tohoku.ac.jp/mediawiki/index.php?title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB06:%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E5%8A%9B%E3%81%AE%E6%99%82%E9%96%93%E7%9B%B8%E9%96%A2%E9%96%A2%E6%95%B0&amp;action=history"/>
	<updated>2026-08-05T23:23:58Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.36.2</generator>
	<entry>
		<id>http://comp.chem.tohoku.ac.jp/mediawiki/index.php?title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB06:%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E5%8A%9B%E3%81%AE%E6%99%82%E9%96%93%E7%9B%B8%E9%96%A2%E9%96%A2%E6%95%B0&amp;diff=1053&amp;oldid=prev</id>
		<title>Hirano: ページの作成:「　本節ではFreeFlexを用いたランダム力の時間相関関数の計算方法を示す。  　今回は、水900 分子、Cl&lt;sup&gt;-&lt;/sup&gt;イオン1分子の系で…」</title>
		<link rel="alternate" type="text/html" href="http://comp.chem.tohoku.ac.jp/mediawiki/index.php?title=%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB06:%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E5%8A%9B%E3%81%AE%E6%99%82%E9%96%93%E7%9B%B8%E9%96%A2%E9%96%A2%E6%95%B0&amp;diff=1053&amp;oldid=prev"/>
		<updated>2026-05-26T02:35:59Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「　本節ではFreeFlexを用いたランダム力の時間相関関数の計算方法を示す。  　今回は、水900 分子、Cl&amp;lt;sup&amp;gt;-&amp;lt;/sup&amp;gt;イオン1分子の系で…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;　本節ではFreeFlexを用いたランダム力の時間相関関数の計算方法を示す。&lt;br /&gt;
&lt;br /&gt;
　今回は、水900 分子、Cl&amp;lt;sup&amp;gt;-&amp;lt;/sup&amp;gt;イオン1分子の系で、16個の初期構造を使用し、Cl&amp;lt;sup&amp;gt;-&amp;lt;/sup&amp;gt; の拡散係数を得ることを考える。初期構造の作成は、シェルのfor文を利用して、&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; for (( i=0; i&amp;lt;=15; i++ )) do ii=`printf “%04d” $i`; ./add.exe add.nml $ii/system.ms; ./unlap.exe $ii/system.ms $ii/system2.ms; done&lt;br /&gt;
&lt;br /&gt;
のようなコマンドを実行すればよい（add.nml や各分子のmsファイルはチュートリアルのディレクトリ内参照）。 これで0000/ ~ 0015/ にunlap.exe による緩和後のmsファイルが得られる。&lt;br /&gt;
&lt;br /&gt;
　初期構造が作成されたら実際のMDを走らせる。 ここで注意したいのは、ランダム力の時間相関関数の計算では、注目分子の速度を固定する必要があることである。 なぜなら、MDシミュレーションから得られる情報は注目分子に働く力であり、ランダム力とは一般化ランジュバン方程式を通じて&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(t)=-\frac{\partial U(x)}{\partial x}-\int \limits_{0}^{\infty}\eta(\tau)v(t-\tau)d\tau +R(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
の関係があるためである。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \langle R(t)R \rangle = \langle F(t)F \rangle - \langle F \rangle^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
が成り立つには、v=0 に固定し、v の時間依存性をなくさなければならない。 このような計算をFreeFlex上で行うには、FreeFlex のネームリストに&lt;br /&gt;
&lt;br /&gt;
 === input.nml =================================================================================&lt;br /&gt;
   .	&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
 &amp;amp;addconstr&lt;br /&gt;
   condition = &amp;quot;FREEZE 901&amp;quot;&lt;br /&gt;
 /&lt;br /&gt;
 &amp;amp;monitor&lt;br /&gt;
   file = “monitor.dat”&lt;br /&gt;
   condition = “GROUP_F 901”&lt;br /&gt;
 /&lt;br /&gt;
 ================================================================================================&lt;br /&gt;
&lt;br /&gt;
のような指示を加える必要がある。 &amp;amp;addconstr ネームリストでは、分子を固定する命令、&amp;amp;monitor ネームリストでは分子に働く力を出力する命令をしている。 詳しくは各ネームリストの説明を見ること。&lt;br /&gt;
&lt;br /&gt;
　計算を実行すると、ディレクトリ内に monitor3.dat が作成される。 ファイルの中身は、&lt;br /&gt;
&lt;br /&gt;
 === monitor3.dat ================================================================================&lt;br /&gt;
 &amp;amp;MONITOR&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
 /&lt;br /&gt;
   Fx(901), Fy(901), Fz(901)&lt;br /&gt;
      0.9573944741E-09    0.4891307747E-08    0.4926594522E-08&lt;br /&gt;
     -0.7770599862E-09    0.1329902147E-09    0.1808071790E-08&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
 ================================================================================================&lt;br /&gt;
&lt;br /&gt;
のようになっており、数字の羅列が x, y, z 方向に働く力を表わしている。 このデータから tools/analysis.exe により時間相関関数を得ることができる。 具体的は、&lt;br /&gt;
&lt;br /&gt;
 === analysis.nml ================================================================================&lt;br /&gt;
 &amp;amp;analysis&lt;br /&gt;
   skip = 5000&lt;br /&gt;
   method = &amp;quot;TCF&amp;quot;&lt;br /&gt;
 /&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;tcf&lt;br /&gt;
   Acolumn = 1&lt;br /&gt;
   Bcolumn = 1&lt;br /&gt;
   maxdata = 5000&lt;br /&gt;
   file = &amp;quot;tcf_xx.dat&amp;quot;&lt;br /&gt;
 /&lt;br /&gt;
 ================================================================================================&lt;br /&gt;
&lt;br /&gt;
のようなネームリストで解析手法を指定し、&lt;br /&gt;
 ./analysis.exe  analysis.nml  0*/monitor3.dat &amp;amp;&lt;br /&gt;
を実行することを実行することにより、cf_xx.dat に&amp;lt;F&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;(t)F&amp;lt;sub&amp;gt;X&amp;lt;/sub&amp;gt;&amp;gt;のグラフを得ることができる。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 拡散係数の計算について ==&lt;br /&gt;
拡散係数&amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;はボルツマン定数&amp;lt;math&amp;gt;k_B&amp;lt;/math&amp;gt;、温度&amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;を使って以下のように表すことができる。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; D=(k_BT)^2/ \int^{T_{\rm corr}}_{0}\langle R(t)R \rangle dt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;T_{\rm corr}&amp;lt;/math&amp;gt;は時間相関関数の周期である。&lt;br /&gt;
ただし、&amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;の大きいところでも相関が0に収束しないことがあり、それが誤差をもたらす要因にもなり得るので、実用的には以下のようにダンピングをかけて計算する方がよい。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; D=(k_BT)^2/ \int^{T_{\rm corr}}_{0}\langle R(t)R \rangle \exp(-\alpha t^2/t_0^2) dt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kikkawa(2016)では、&amp;lt;math&amp;gt;\alpha=0.5&amp;lt;/math&amp;gt;、&amp;lt;math&amp;gt;t_0 = T_{\rm corr}*0.5&amp;lt;/math&amp;gt;としている。&lt;br /&gt;
以上の計算は例えば次に示すようなpythonスクリプトによって計算できる。&lt;br /&gt;
ここでは&amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;方向の力を配列に格納した後に、(1)&amp;lt;math&amp;gt;N(T_{\rm corr}=N\Delta t)&amp;lt;/math&amp;gt;で指定される周期分だけ時間相関関数を計算し、(2)時間相関関数にダンピングをかけたものを積分している。&lt;br /&gt;
&lt;br /&gt;
 === tcf.py ================================================================================&lt;br /&gt;
 import numpy as np&lt;br /&gt;
 import matplotlib.pyplot as plt&lt;br /&gt;
 from scipy import integrate&lt;br /&gt;
 file_force = &amp;quot;force.dat&amp;quot;&lt;br /&gt;
 dt = 1.0e-15&lt;br /&gt;
 N = 10000                 # T_corr = N * dt&lt;br /&gt;
 n_skip = 0                # skip the n_skip lines&lt;br /&gt;
 alpha = 0.5               # damping factor&lt;br /&gt;
 KB = 1.3806485279e-23&lt;br /&gt;
 T0 = 298.15&lt;br /&gt;
 # Reading forces along z-axis&lt;br /&gt;
 _, _, fz = np.loadtxt(fname=file_force, unpack=True, skiprows=14+n_skip)&lt;br /&gt;
 # Calculating TCF&lt;br /&gt;
 def calc_tcf(data, N):&lt;br /&gt;
     tcf = np.zeros(N)&lt;br /&gt;
     for j in range(N):&lt;br /&gt;
         s = 0&lt;br /&gt;
         for i in range(N):&lt;br /&gt;
             s += data[i]*data[i+j]&lt;br /&gt;
         tcf[j] = s&lt;br /&gt;
     return tcf&lt;br /&gt;
 tcf = calc_tcf(fz, N)/N&lt;br /&gt;
 time = np.linspace(0, dt*(N-1), N)&lt;br /&gt;
 damp = np.exp(-time**2/(N*dt*0.5)**2*alpha)&lt;br /&gt;
 zeta = integrate.simps(tcf*damp, time)/KB/T0&lt;br /&gt;
 D = KB*T0/zeta&lt;br /&gt;
 print(&amp;quot;Diffusion coefficient: &amp;quot;, D)&lt;br /&gt;
 # for plot&lt;br /&gt;
 fig = plt.figure()&lt;br /&gt;
 ax = fig.add_subplot(1,1,1)&lt;br /&gt;
 ax.plot(time, tcf*damp)&lt;br /&gt;
 plt.show()&lt;br /&gt;
 ================================================================================================&lt;/div&gt;</summary>
		<author><name>Hirano</name></author>
	</entry>
</feed>