「分子動力学」カテゴリーアーカイブ

Tersoffポテンシャル

Tersoff ポテンシャルの定義

Tersoffポテンシャルは、Stillinger-Weberポテンシャルと同様、Si結晶が表現できるポテンシャルとして広く用いられている。クラスタ展開に基づくStillinger-Weberポテンシャルと異なり、各原子の局所的な環境に依存して結合の強さが変わる「ボンドオーダーポテンシャル」という思想でデザインされた。

1988年に発表されたTersoffポテンシャルの論文(Physical Review B, Vol.37, 6991)によると、以下のような定義になっている。

$$ V = \frac{1}{2}\sum_i\sum_{j \neq i} f_C(r_{ij})\left [ f_R(r_{ij})+b_{ij}f_A(r_{ij})\right ] $$

ここで\(f_R\)は等方的に働く反発相互作用、\(f_A\)は引力相互作用項で、それぞれ指数関数型の関数で表される。

$$ f_R(r_{ij})=A_{ij} \exp(-\lambda_{1} r_{ij} ) $$

$$ f_A(r_{ij})=-B_{ij} \exp(-\lambda_{2} r_{ij} ) $$

また\(f_C\)は相互作用を有限距離で滑らかに打ち切るカットオフ関数で、Tersoffポテンシャルでは

$$ f_C(r_{ij})=\left \{
\begin{array}[ll] \displaystyle 1, & r_{ij}<R – D\\
\frac{1}{2}-\frac{1}{2}\sin\left (\frac{\pi}{2} \frac{r_{ij}-R}{D} \right ), & R – D <r_{ij}<R+D \\
0, & r_{ij} >R+D
\end{array}
\right . $$

が用いられている。

ボンドオーダーポテンシャルの特徴は、局所的な環境に依存する係数\(b_{ij}\)に詰まっている。

$$ b_{ij} = {(1+\beta_i^{n} \zeta_{ij}^{n})}^{-1/2n} $$

ここで\(\zeta_{ij}\)は

$$ \zeta_{ij} = \sum_{k \neq j} f_C(r_{ik}) g(\theta_{jik}) \exp [ \lambda^3_3 {(r_{ij}-r_{ik})}^3 ]$$

と定義され、さらに\(g(\theta_{jik})\)は

$$ g(\theta_{jik}) = 1 + \frac{c^2}{d^2} – \frac{c^2}{d^2 + {(h-\cos\theta_{jik})}^2} $$

と定義されている。なお、\(\theta_{jik}\)は\(i\)を頂点とする\(j\)-\(i\)-\(k\)結合角を表す。

このように、原子\(i\)と\(j\)の引力相互作用は\(r_{ij}\)だけでは単純に決まらず、\(i\)と\(j\)を取り巻く周辺の原子たち(ここでは\(k\)でラベル付けされている)の配置にも依存して変化することになる。

Stillinger-Weberポテンシャル

Stillinger-Weberポテンシャルの定義

$$ V = \varepsilon \sum_{i}\sum_{j>i} f_2(r_{ij}) + \varepsilon \sum_i\sum_{j>i}\sum_{k>j>i} f_3(\boldsymbol{r}_i,  \boldsymbol{r}_j, \boldsymbol{r}_k) $$

ここで\(f_2\)は2体項で

$$ f_2(r) = \left \{
\begin{array}[ll]
\displaystyle A(Br^{-p} – r^{-q}) \exp \left ( \frac{1}{r-a} \right ), & r < a \\ 0, & r \geq a \end{array} \right . $$

と定義される。\(f_3\)は3体項で

$$ \begin{eqnarray} f_3(\boldsymbol{r}_i,  \boldsymbol{r}_j, \boldsymbol{r}_k) & = & h(r_{ij}, r_{ik}, \theta_{jik}) + h(r_{ji}, r_{jk}, \theta_{ijk})\\ &&+ h(r_{ki}, r_{kj}, \theta_{ikj}) \end{eqnarray} $$
$$ h(r_{ij}, r_{ik}, \theta_{jik}) = \lambda \exp \left [\left (\frac{\gamma}{r_{ij}-a}\right ) + \left (\frac{\gamma}{r_{ik}-a}\right) \right ] {\left (\cos \theta_{jik} + \frac{1}{3} \right )} ^2 $$

のように定義されている。

力の計算ルーチンのターム指向記述

繰り返し手続きを表す記法の導入

forループのプログラム

for(i=0; i<N; i++){
  a[i] += f();
}

を次のように記述してみよう。

$$ \mathop{\large \Lambda}_{i=0}^{N-1} \Bigl\{a_i \;+\!\!=\; f() \Bigr\}$$

ここで\(\Lambda\)は本稿オリジナルの記法で、右に書かれている代入操作を\(i=0\)から\(i=N-1\)まで\(i\)を1つずつ増やしながら繰り返し実行することを表す。操作の結果が繰り返しの順序によらない場合は交換則

$$ \mathop{\large \Lambda}_{i}\mathop{\large \Lambda}_{j}\bigl\{{\it operation}\bigr\} = \mathop{\large \Lambda}_{j}\mathop{\large \Lambda}_{i}\bigl\{{\it operation}\bigr\} $$

が成り立つ。等号は「計算で扱っている変数の値が、一連の計算終了後に全て同じになる」ことを意味する。

また、原子間ポテンシャルや力の計算でよく現れる和\(\sum\)は、繰り返しの足し算操作であるから

$$ \mathop{\large \Lambda}_{i}\left\{a_i\;+\!\!=\;\sum_j f_j\right\} = \mathop{\large \Lambda}_{i}\mathop{\large \Lambda}_{j}\Biggl\{a_i\;+\!\!=\;\ f_j\Biggr\} $$

のように\(\Lambda\)を使って書き直すことができる。

 アトム指向記述とターム指向記述

アトム指向記述とターム指向記述のイメージ図。アトム指向では1つの原子に注目し、その原子が関わる全てのポテンシャル項(ターム)を列挙して力を計算する。一方、ターム指向では、1つのポテンシャル項に注目し、その項に関わる全ての原子を列挙して、そのポテンシャル項から生じる力を各原子に配分していく。ターム指向で記述した方が数え落としの恐れが少なく、計算速度も上げやすい。

forループによる繰り返し操作を表す\(\Lambda\)を使って、Lennard-Jonesポテンシャル

$$ V = \sum _i \sum_{j>i} v_2^{\rm LJ}(r_{ij}) = \sum _i \sum_{j>i} 4 \varepsilon \left \{ \left ( \frac{\sigma}{r_{ij}} \right )^{12} – \left ( \frac{\sigma}{r_{ij}} \right )^6 \right \} $$

とその力

$$ \boldsymbol{F}_i = -\sum_{j\neq i} 4 \varepsilon \left ( -12 \frac{\sigma^{12}}{r_{ij}
^{13}} + 6 \frac{\sigma^6}{r_{ij}^7} \right)\frac{\boldsymbol{r}_i-\boldsymbol{r}_j}{r_{ij}}
$$

の計算ルーチンを記述してみよう。

ポテンシャルエネルギーの計算ルーチンは

$$ \mathop{\large \Lambda}_{i} \mathop{\large \Lambda}_{j>i} \Biggl\{ V \;+\!\!=\; 4 \varepsilon \left \{ \left ( \frac{\sigma}{r_{ij}} \right )^{12} – \left ( \frac{\sigma}{r_{ij}} \right )^6 \right \} \Biggr\}$$

でよい。これは問題ないだろう。

力については、系の全ての原子にかかる力を計算するのだから、

$$ \begin{eqnarray}
&&\mathop{\large \Lambda}_{i} \Biggl\{ \boldsymbol{F}_i \;+\!\!=\; -\sum_{j\neq i} 4 \varepsilon \left ( -12 \frac{\sigma^{12}}{r_{ij}^{13}} + 6 \frac{\sigma^6}{r_{ij}^7} \right)\frac{\boldsymbol{r}_i-\boldsymbol{r}_j}{r_{ij}} \Biggr\}\\
&=& \mathop{\large \Lambda}_{i} \mathop{\large \Lambda}_{j\neq i} \Biggl\{ \boldsymbol{F}_i \;+\!\!=\; – 4 \varepsilon \left ( -12 \frac{\sigma^{12}}{r_{ij}
^{13}} + 6 \frac{\sigma^6}{r_{ij}^7} \right)\frac{\boldsymbol{r}_i-\boldsymbol{r}_j}{r_{ij}} \Biggr\}
\end{eqnarray}
$$

となる。これをアトム指向記述と筆者は呼んでいる。ポテンシャルの計算も一緒に行うなら、

$$ \begin{eqnarray}
&\mathop{\large \Lambda}_{i} \mathop{\large \Lambda}_{j \neq i} \bigl\{ \bigr .&\\
&& {\rm if}(j>i) \;\;\; V \;+\!\!=\; 4 \varepsilon \left \{ \left ( \frac{\sigma}{r_{ij}} \right )^{12} – \left ( \frac{\sigma}{r_{ij}} \right )^6 \right \} ;\\
&& \boldsymbol{F}_i \;+\!\!=\; – 4 \varepsilon \left ( -12 \frac{\sigma^{12}}{r_{ij}
^{13}} + 6 \frac{\sigma^6}{r_{ij}^7} \right)\frac{\boldsymbol{r}_i-\boldsymbol{r}_j}{r_{ij}}\\
&\bigl . \bigr \}&
\end{eqnarray}$$

と記述すればよい。\(j\)についての\(\Lambda\)ループの範囲が\(j > i\)に限定されていないので、\( {\rm if}(j>i)\)の制限がないとポテンシャルエネルギーを足し合わせすぎることになる。Lennard-Jonesポテンシャルは単純だから問題ないかもしれないが、3体項など複雑な項を含むポテンシャルの場合は、どのような制限を設けたらよいか分かりにくくなり、ミスの原因になりやすい。

これに対しターム指向記述では、ポテンシャルの計算ルーチンをベースに力の計算手続きを加えていく。

$$ \begin{eqnarray}
&\mathop{\large \Lambda}_{i} \mathop{\large \Lambda}_{j>i} \bigl\{ \bigr .&\\
&& V \;+\!\!=\; 4 \varepsilon \left \{ \left ( \frac{\sigma}{r_{ij}} \right )^{12} – \left ( \frac{\sigma}{r_{ij}} \right )^6 \right \} ;\\
&& \boldsymbol{F}_i \;+\!\!=\; – 4 \varepsilon \left ( -12 \frac{\sigma^{12}}{r_{ij}^{13}} + 6 \frac{\sigma^6}{r_{ij}^7} \right)\frac{\boldsymbol{r}_i-\boldsymbol{r}_j}{r_{ij}};\\
&& \boldsymbol{F}_j \;+\!\!=\; – 4 \varepsilon \left ( -12 \frac{\sigma^{12}}{r_{ij}^{13}} + 6 \frac{\sigma^6}{r_{ij}^7} \right)\frac{\boldsymbol{r}_j-\boldsymbol{r}_i}{r_{ij}}\\
&\bigl . \bigr \}&
\end{eqnarray}$$

ターム指向記述のポイントは、\(\Lambda\)ループの中の各ポテンシャルエネルギー項に注目し、その項に関与する全ての原子(ここでは\(i\)と\(j\)の2個)に掛かる力を計算して足し合わせている点にある。まず系の全ポテンシャルエネルギーを計算するルーチンを記述しておき、このフレームワークの中で、力の計算式を追記するだけでよい。

ここで取り上げたLennard-Jonesポテンシャルは非常に単純なので、ターム指向記述の良さは伝わりにくいかもしれない。ターム指向記述の良さは、より複雑なポテンシャルでも、同じ手順で機械的にポテンシャルエネルギーと力の計算ルーチンを作成できる点にある。作用-反作用の法則より原子\(i\)と原子\(j\)の間には逆向きに同じ大きさの力が働くから、うまく書けばアトム指向記述に比べて計算量を大幅に減らすことができる。

力の計算ルーチンをインプリメントする際は、ターム指向記述を心がけよう!

ポテンシャルの単位変換

Stillinger-Weberポテンシャルでは、長さの単位が\(\sigma\)=2.0951Å、エネルギーの単位が\(\varepsilon\)=50kcal/molと指定されており、含まれるポテンシャルパラメータの数値もこの単位系を前提にして決められている。しかしプログラムによっては、Å-eV単位系を使いたいときもあるだろうし、原子単位系を使いたい場合もあるだろう。

単位変換の一般的な指針

ある単位系で定義されたポテンシャル関数\(\phi(r)\)を、別の単位系のポテンシャル関数\(\phi^\prime(r^\prime)\)に変換するにはどうしたらよいだろうか? ここで\(r^\prime\)は、 \(r^\prime= \sigma r\)によって長さの単位が変えられた新しい変数を表す。元の単位系のエネルギーの単位が、新しいエネルギー単位の\(\varepsilon\)倍であるとすると、単位系の変換の前と後でポテンシャルエネルギーは同一でなければならないから

$$\phi^\prime(r^\prime) = \varepsilon \phi(r) $$

が成立するはずである。ポテンシャルの単位系を変換するには、この条件を満たすようにパラメータの数値を変換すればよい。

単位変換の具体例

次式で与えられるStillinger-Weberポテンシャルの2体項を例にとって単位の変換法を見てみよう。

$$\phi_2(r) = A (Br^{-p} –  r^{-q})\exp{\left ( \frac{1}{r-a} \right )} $$

ただしここで\(r < a\)である。\(a\)はカットオフ距離と呼ばれ、2つの原子間距離\(r\)がカットオフ距離以上では、上式を用いずにポテンシャルエネルギーをゼロとする(こうしても\(r=a\)で不連続にならず、\(C^\infty\)級の連続関数になっているところがこの関数の良いところだ)。Si用のStillinger-Weberポテンシャルでは、長さの単位が\(\sigma\)=2.0951Å、エネルギーの単位が\(\varepsilon\)=50kcal/molとして各パラメータ\(A,B,p,q,a\)の値が決められている。

ここで、\(r^\prime= \sigma r\)で\(r\)を置き換えると

$$\begin{eqnarray}\phi_2(r^\prime/\sigma)& =& A (B(r^\prime/\sigma)^{-p} – (r^\prime/\sigma)^{-q})\exp{\left ( \frac{1}{(r^\prime/\sigma)-a} \right )}\\&=& A \sigma^q(B\sigma^{p-q}r^{\prime-p} –  r^{\prime-q})\exp{\left ( \frac{\sigma}{r^\prime-a\sigma} \right )}\end{eqnarray}$$

となり、新しい単位系におけるポテンシャル\(\phi_2^\prime(r^\prime)\)は

$$\begin{eqnarray}\phi_2^\prime(r^\prime)& =&\varepsilon  \phi_2(r)\\&=&\varepsilon A \sigma^q(B\sigma^{p-q}r^{\prime-p} –  r^{\prime-q})\exp{\left ( \frac{\sigma}{r^\prime-a\sigma} \right )}\end{eqnarray}$$

となる。したがって、下の表のように新しい単位系のパラメータを定義すれば、元の関数形をほぼ維持しながら新しい単位系に移行できる。

単位変換前 単位変換後
\(A\) \(A^\prime = \varepsilon A \sigma^q\)
\(B\) \(B^\prime = B\sigma^{p-q}\)
\(p\) \(p^\prime = p\)
\(q\) \(q^\prime = q\)
\(a\) \(a^\prime = \sigma a\)

$$\phi_2^\prime(r^\prime)= A^\prime (B^\prime r^{\prime-p^\prime} –  r^{\prime-q^\prime})\exp{\left ( \frac{\sigma}{r^\prime-a^\prime} \right )}$$

指数関数の中の分子の1が\(\sigma\)に変わってしまうところが玉にキズだが、この1は長さの次元を持った量なので、本来パラメータとして扱うべきものである。

Lennard-Jonesポテンシャルを用いたMDシミュレーション

原子間ポテンシャル

\(N\)個の粒子からなる系の全ポテンシャルエネルギー\(V(\boldsymbol{r}_1,\boldsymbol{r}_2,\cdots,\boldsymbol{r}_N)\)は、1体項、2体項、3体項、・・・の和に展開して表すことができる。これをクラスター展開と呼ぶ。

$$\begin{eqnarray} V(\boldsymbol{r}_1,\boldsymbol{r}_2,\cdots,\boldsymbol{r}_N) & = & \sum_i v_1(\boldsymbol{r}_i) +  \sum_i \sum_{j>i}v_2(\boldsymbol{r}_i,\boldsymbol{r}_j)\\
&&+\sum_i \sum_{j>i} \sum_{k>j>i} v_3(\boldsymbol{r}_i,\boldsymbol{r}_j,\boldsymbol{r}_k)+\cdots
\end{eqnarray}$$

\(v_1(\boldsymbol{r}_i)\)は1体項と呼ばれ、外力の効果を表す。第2項以降が原子間相互作用のポテンシャルである。\(v_2(\boldsymbol{r}_i,\boldsymbol{r}_j)\)は2体項、あるいはペアポテンシャルと呼ばれる。2原子間の距離\(r_{ij}=|\boldsymbol{r}_i-\boldsymbol{r}_j |\)のみに依存する場合は、\(v_2(r_{ij})\)と書ける。\(v_3(\boldsymbol{r}_i,\boldsymbol{r}_j,\boldsymbol{r}_k)\)は3体項と呼ばれ、共有結合の結合角に依存したエネルギーを表すためによく用いられる。

上の式には示されていないが、分子鎖のねじれ角の歪エネルギーを表すために4体項が用いられることもある。5体項以上は少なくとも筆者は見たことがない。ただし、配位数に応じて2体項や3体項が変化するように拡張した、いわゆる多体効果を取り入れた2体、3体ポテンシャルは無数に存在する。

有効ペアポテンシャル

共有結合のように異方性の強い相互作用がなければ、3体項以上の多体項の効果を2体項に繰り込んでしまう近似法が取られることが多い。これを有効ペアポテンシャルと呼ぶ。

$$ V \simeq \sum_i v_2^{\rm eff} (r_{ij}) $$

有効ペアポテンシャルの代表的な例が、Lennard-Jones 12-6 ポテンシャルである。

$$ v_2^{\rm LJ}(r) = 4 \varepsilon \left \{ \left ( \frac{\sigma}{r} \right )^{12} – \left ( \frac{\sigma}{r} \right )^6 \right \} $$

ちなみに\(1/r^6\)に比例する項がロンドン力、すなわち誘起双極子間に働く引力で、いわゆるファン・デル・ワールス力の主成分である。\(1/r^{12}\)に比例する項は近接反発項で、12乗という数字に特に理論的根拠はない。6乗に反比例する項より速やかにゼロに収束させるためには6乗より大きくする必要があるが、12という数が用いられるのは、単に6の2倍で、計算に便利だからであろう。

Verlet法による調和振動子のMD計算

調和振動子の運動をVerlet法を用いて再現してみよう。

1.調和振動子

まずは復習を兼ねて1次元の調和振動子の運動方程式を解析的に解いてみよう。

調和振動子の位置を\(x\)と書くと、調和振動子のテンシャルエネルギーは

$$ \phi(x) = \frac{1}{2}C x^2 $$

で与えられる。\(C\)は定数である。位置\(x\)において調和振動子に加わる力は

$$ f(x) = -\frac{d}{dx}\phi(x) = -C x$$

となる。したがって調和振動子の運動方程式は

$$ \frac{d^2 x(t)}{dt^2} = -\frac{C}{m} x(t)$$

となる。この微分方程式の一般解は

$$x(t) = A \sin \sqrt{\frac{C}{m}}t+B\cos  \sqrt{\frac{C}{m}}t$$

である。例として初期条件\(x(0)=1\)、\(\dot x (0) = 0\)のときの特解を求めると

$$x(t) =  \sin \sqrt{\frac{C}{m}}t$$

すなわち、角周波数\(\omega = \sqrt{C/m}\)、周期\(T=2\pi \sqrt{m/C}\)の単振動(正弦波)となる。

Newton方程式の数値解法 (Verlet法)


Newtonの運動方程式を有限差分近似で解く方法を説明する。

1. 有限差分法とは

有限差分法 (finite difference method)とは、導関数を有限差分を使った代数式で近似して微分方程式を解く方法である。

$$\frac{df(t)}{dt} = \frac{f(t+h)-f(t)}{h}+O(h)$$

これは、\( t \)から\( h\)だけ先に進んだ地点(時点)の値を使って傾きを計算しているので、前進差分近似と呼ばれる。逆に後ろの地点(時点)の値を使って

$$\frac{df(t)}{dt} = \frac{f(t)-f(t-h)}{h}+O(h)$$

と近似することもできる。これを後退差分近似と呼ぶ。

\( t +h\)の値と\( t-h\)の値の両方を使って近似する方法を、中央差分近似と呼ぶ。

$$\frac{df(t)}{dt} = \frac{f(t+h)-f(t-h)}{2h}+O(h^2)$$

中央差分近似は、前進差分や後退差分と比べて誤差が\(h^2\)のオーダーとなり、近似精度が良い。

2階の導関数は次のように有限差分で近似できる。

$$\frac{d^2f(t)}{dt^2} = \frac{f(t+h)-2f(t)+f(t-h)}{h^2}+O(h^2)$$

2. Verlet法

Verlet法は、Newton方程式の数値解法としてシンプルかつ実用的な方法として広く用いられている方法である。

時刻\(t\)における粒子の位置ベクトルを\(\boldsymbol{r}(t)\)としたとき、時刻\(t+\Delta t\)の位置ベクトル\(\boldsymbol{r}(t+\Delta t)\)を、次式で決定する。

$$ \boldsymbol{r}(t+\Delta t) =2   \boldsymbol{r}(t)  – \boldsymbol{r}(t-\Delta t)+\Delta t^2   \frac{\boldsymbol{f}(t)}{m}$$

ここで\(\boldsymbol{a}(t)\)は時刻\(t\)において粒子に加わる力を表す。\(m\)は粒子の質量である。

最初に\(\boldsymbol{r}(0)\)と\(\boldsymbol{r}(\Delta t)\)を与えれば、上の式を繰り返し適用することで\(\boldsymbol{r}(\Delta t), \boldsymbol{r}(2\Delta t), \boldsymbol{r}(3\Delta t), \boldsymbol{r}(4\Delta t)\cdots\)と時間間隔\(\Delta t\)で次々と位置座標の時系列データが生成される。

グラフェンの原子模型

グラフェンシートの構造を生成するプログラムを作成し、VMDで表示させてみよう。

グラフェンとは、C(炭素)が下図のような2次元6角形格子をなしたものである。a は格子定数 でa=2.461Åである。単位格子には2つのC原子(A,B)が含まれる。それぞれの原子の座標はA: (0, 0), B: (2/3, 2/3)である。

図1のコピー
グラフェンの構造

 1. VC++で以下のプログラムを作成する。

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
  double a = 2.461;     // lattice constant
  double a1[2], a2[2];  // basis vectors
  double A[2], B[2];    // atom positions;
  int L1, L2;           // number of repitition
  double b[2], c[2];    // temporal memory
  int i,j;
  FILE *fp;

  a1[0] = a * 0.5 * 1.7320508;
  a1[1] = a * 0.5;
  a2[0] = a * 0.5 * 1.7320508;
  a2[1] = a * (-0.5);
  A[0] = 0.0; A[1] = 0.0;
  B[0] = 2.0/3.0; B[1] = 2.0/3.0;
  L1 = 10; L2 = 10;

  fopen_s(&amp;amp;fp,"graphen.xyz","wt");
  fprintf(fp,"%d\n", 2*L1*L2);
  fprintf(fp,"graphen sheet\n");

  for(i=0; i&amp;lt;L1; ++i){
    for(j=0; j&amp;lt;L2; ++j){
    // put atom A
    b[0] = (double)i + A[0];
    b[1] = (double)j + A[1];
    c[0] = a1[0] * b[0] + a2[0] * b[1];
    c[1] = a1[1] * b[0] + a2[1] * b[1];
    fprintf(fp,"C %f %f 0.0\n", c[0], c[1]);
    // put atom B
    b[0] = (double)i + B[0];
    b[1] = (double)j + B[1];
    c[0] = a1[0] * b[0] + a2[0] * b[1];
    c[1] = a1[1] * b[0] + a2[1] * b[1];
    fprintf(fp,"C %f %f 0.0\n", c[0], c[1]);
  }
}

fclose(fp);
return 0;
}

2. プログラムをビルド、実行

 

3. グラフェンの表示

  • プロジェクト・ディレクトリの中の、プロジェクト名と同じディレクトリの中に “graphen.xyz”というファイルが生成されている。
  • VMDでこの”graphen.xyz”を読み込み、分子構造を表示する。
  • 下図のような構造が表示されたら成功。
vmd4
VMDで表示したグラフェン

 

VMDによる分子の表示

1. 構造ファイルの準備

適当なテキストエディタ(メモ張、ワードパッド、秀丸など)で、次のファイルを作成する。これは水分子のxyz座標を記述したファイルである。

ファイル名:water.xyz

3
Water molecule
O  5.00  5.00 5.00
H  5.76  4.41 5.00
H  4.24  4.41 5.00
水分子の構造

 

 

2.VMDを起動

プログラムを起動すると、下図のように「VMD 1.9.* OpenGL Display」、「VMD Main」「VMD1.9.*」の3つのウィンドウが現れる。

vmd1
VMD起動時の画面

3. 分子構造ファイルの読み込み

  • 「VMD Main」ウィンドウの「File」→「New Molecule」を選択。「Molecule File Browser」ダイアログの「Filename」テキストフィールドに入力ファイルへのパスを入力。あるいは、テキストフィールド脇の「Browse…」ボタンを押して、エクスプローラを起動し、ファイルを指定する。
    ※ファイルのパスに日本語のディレクトリが含まれているとエラーになるので要注意。
  • 「Molecule File Browser」ダイアログの「Load」を押すと、ファイルが読み込まれる。
vmd2
water.xyzを読み込み直後の画面

 3. 見栄えの調整

  • 「VMD Main」ウィンドウの「Graphics」→「Representations」を選択。「Graphical Representations」ダイアログの「Drawing Method」で、たとえば「CPK」を選択すると、「VMD 1.9.* OpenGL Display」の原子が球体で表示される。
  • 「Graphical Representations」ダイアログの「Sphere Radius」を調節すると、原子を表わす多面体の細かさが変化する。
vmd3
Representation調整後の表示例

 4. VMDの終了

「VMD Main」ウィンドウの「File」→「Quit」を選択。ダイアログで「Yes」を押して終了。

Hello World!

プログラムの開発環境を導入した後、誰もが最初にするのは、”Hello World!”と文字列を出力するプログラムの動作テストでしょう。ここでは、Visual Studioでコンソールウィンドウに文字列を出力するテストプログラムの作成法を説明します。

1. Visual Studioを起動する。

2.  新規プロジェクトの作成

  • メニューから「ファイル」→「新規作成」→「プロジェクト」を選択
  • 「新しいプロジェクト」ダイアログボックスがオープンする。「Visual C++」の「Win32」を選択して「Win32 コンソール アプリケーション」を選ぶ。
  • 下部に「プロジェクト名」を入力し、さらにその下の「場所」でプロジェクトの保存先を指定する。
  • Win32アプリケーション・ウィザード 「完了」

 

3.  プログラムの作成

  • 最初から下記のフレームワークが用意される。
#include “stdafx.h”

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
  • フレームワークに文字列を出力するコードを追記する。
#include “stdafx.h”

int _tmain(int argc, _TCHAR* argv[])
{
 printf(“Hello World!\n”);
  return 0;
}

3.  プログラムの実行

  • メニューから「ビルド」→「ソリューションのビルド」を選択
  • メニューから「デバッグ」→「デバッグなしで開始」を選択
  • コンソールウィンドウが開いて、「Hello World!」と表示されれば成功。

 

4.  Visual Studioの終了

  • メニューから「ファイル」→「終了」を選択