「教育」カテゴリーアーカイブ

Deal-Groveモデル(2)

今回は、Deal-Grove方程式を導出します。ちゃんと勉強するなら、Deal-Groveの原著論文1)や、Grove自身が書いた教科書2)を読んだ方がずっと近道なのですが、この後の記事とのつながりもありますので、簡単に説明しておきます。

導出の方針

Si表面の酸化は、雰囲気中の酸化種分子(O2分子やH2O分子)がSiO2膜に浸透してSi基板に達し、SiO2/Si界面で酸化反応を起こす、という流れで進みます。このことは同位体をマーカーとして使った実験で確認されています。

ただし、Si原子が全く動かないわけではなく、Si基板からSi原子が放出されてSiO2膜中を拡散し、SiO2面膜中やSiO2表面で酸化種分子と出合って酸化反応が起きるという説3)もあります。ドライ酸化に見られる初期の異常な酸化速度は、このSi原子放出が原因だというのです。ただしこの説でも、Si原子の放出量は少量で、SiO2膜の大部分はSiO2/Si界面で形成されると考えられています。よって、おおよその酸化速度は、酸化種分子の輸送プロセスだけ考えれば記述できます。

さて、酸化種分子がSiO2/Si界面に到達してSi基板を酸化するまでには、次の3つの過程を経る必要があります。

  • 第1段階:気相雰囲気中の酸化種分子がSiO2膜表面に到達する過程。
  • 第2段階:酸化種分子が既に存在するSiO2膜中を拡散する過程。
  • 第3段階:SiO2/Si界面に到達した酸化種分子がSi基板を酸化して消費される過程。

以上の3つの段階に対応する酸化種分子の流束(単位時間あたりに単位断面積を通過する酸化種分子数)を\(F_1\)、\( F_2 \)、\(F_3\)と表記し、それぞれを定式化してみましょう。

第1段階:\(F_1\)の定式化

気相中の酸化種分子の流束は、気相中の酸化種の濃度\(C_G\)とSiO2膜表面ごく近傍における酸化種の濃度\(C_S\)の差に比例する線形近似で表すことができます。

$$  F_1=h_G(C_G – C_S) $$

ここで\(h_G\)は気相中の物質輸送係数です。この式の中の、気相の酸化種の濃度\(C_G\)と\(C_S\)を、酸化膜中の酸化種の濃度で置き換えることを考えてみましょう。

一般に、溶液中に溶け込んだ溶質の濃度が薄い場合、溶質の濃度は気体中のその物質の分圧に比例することが知られています。Henryの法則です。今考えている系は固体ですが、SiO2膜中に含まれる酸化種にこのHenryの法則を適用すると、表面近傍の酸化種の濃度\(C_0\)は、定常状態ではSiO2膜表面ごく近傍における酸化種の分圧\(p_S\)に比例すると考えられます。

$$ C_0=H p_S $$

ここで\(H\)はHenryの法則における比例定数です。同様に、SiO2膜中の酸化種の平衡濃度\(C^\ast\)は、気相中の酸化種の分圧\(p_G\)と

$$ C^\ast=H p_G $$

で関係づけられます。

理想気体の状態方程式

$$ p_G=C_G k_B T $$

$$ p_S=C_S k_B T $$

より、気相中の酸化種分子の流束\(F_1\)は、

$$  F_1=\frac{h_G}{Hk_BT}(C^\ast – C_0) \equiv h(C^\ast – C_0)$$

と表されます。\(h\)は言うなれば、SiO2膜中の酸化種濃度で表した場合の気相物質輸送係数、ということになります。

第2段階:\(F_2\)の定式化

SiO2膜中を拡散する酸化種の流束\( F_2 \)は、Fickの第一法則より

$$ F_2=-D_0\frac{dC(x)}{dx}$$

で与えられます。\(D_0\)はSiO2膜中の酸化種分子の拡散係数です。SiO2膜中の酸化種の濃度勾配は

$$ \frac{dC(x)}{dx}=\frac{C_i-C_0}{x_0}$$

で表されるので、

$$ F_2=-D_0\frac{C_i-C_0}{x_0}$$

となります。

第3段階:\(F_3\)の定式化

界面に到達した酸化種分子が酸化反応で消費される速度は、界面の酸化種濃度に比例すると考えられます。よって、界面における酸化反応速度定数を\(k\)と書くと、

$$ F_3=k C_i$$

と与えられます。

Deal-Grove方程式の導出

定常状態を考えると、上記の3つの段階に対応する酸化種分子の流束\(F_1\)、\( F_2 \)、\(F_3\)はつり合っていると考えられます。よって\(F\equiv F_1=F_2=F_3\)の条件を課すと、定常状態の流束\(F\)は

$$ F=\frac{D_0C^\ast}{D_0(1/k+1/h)+x_0}$$

と与えられます。これが、界面の単位面積で単位時間に消費される酸化種分子の個数となります。SiO2膜の成長速度、すなわち、SiO2膜の厚さ\(x_0\)が増える速度は、この流束\(F\)に比例することになります。

SiO2膜の単位体積当たりに取り込まれる酸化種分子の個数を\(N_1\)とおくと、

$$ \frac{dx_0}{dt}=\frac{F}{N_1}=\frac{D_0C^\ast/N_1}{D_0(1/k+1/h)+x_0}$$

という、SiO2膜厚\(x_0\)の時間に関する微分方程式が得られます。これがDeal-Grove方程式です。

以後、この微分方程式を下記のように簡略化して表記します。

$$ \frac{dx_0}{dt}=\frac{B}{A+2x_0}$$

ここで

$$ A=2D_0(1/k+1/h)$$

$$ B=2D_0C^\ast/N_1$$

です。わざわざ分子と分母を2倍した理由は、こうしておくとこの後で求める微分方程式の解がシンプルに表記できるからです。

  1. B. E. Deal, A. S. Grove, J. Appl. Phys. 36, 3770 (1965).
  2. 垂井康夫 監訳, Andrew. S. Grove著, “グローブ 半導体デバイスの基礎,” オーム社 (1995).
  3. H. Kageshima, K. Shiraishi, M. Uematsu, Jpn. J. Appl. Phys., 38, L971, (1999).

Deal-Groveモデル(1)

シリコンテクノロジーは「熱酸化」という表面不活性化技術の確立により幕を開けました。1965年、当時フェアチャイルド・セミコンダクター社にいたDealとGroveが、Si熱酸化膜の成長速度を記述するユニバーサルな線形‐放物型方程式を導き1)、以後これがSi熱酸化の標準理論として定着しました。

ちなみにGroveは、この有名な理論を発表した3年後に、NoyceとMooreが設立したインテル社に合流しました。Groveがインテル社の社長を務めたとき、稼ぎ頭のDRAM事業からMPU事業への大転換を決断しました。またCEO時代には、CISC対RISCでMPU戦略が混乱する中、あえてCISC一本化を決断し、MPUメーカとして不動の地位を築きました。Groveはインテル社を今日の巨大企業に育て上げた立役者であり、名経営者として有名です。

Deal-Groveモデルの概要

DealとGroveの熱酸化モデルによると、酸化膜(SiO2膜)の厚さが薄い初期の段階では界面反応が律速となり、SiO2膜厚は時間に対して線形に増加します(線形領域)。一方、SiO2膜厚が厚くなると、SiO2膜中を酸化種が拡散する過程が律速となり、SiO2膜厚は時間の平方根に比例して増加するようになります(放物型領域)。

Deal-Groveモデル1)。気相からSiO2膜表面への酸化種の流速F1、SiO2膜中の拡散による流速F2、SiO2/Si界面での反応による消費速度F3が定常状態でつり合うとして導かれたSiO2膜厚x0に関する微分方程式。初期の段階ではx0は時間に比例して増加し(線形領域)、x0が厚くなるとx0の2乗が時間に比例する(放物型領域)。

実験データから抽出した線形領域の比例係数(図中のB/A)の活性化エネルギーは、乾燥酸素雰囲気中の酸化(ドライ酸化)も、水蒸気雰囲気中の酸化(ウェット酸化)も、ともに2.0eV程度でした。これがSi-Si結合のエネルギーに近いことから、酸化種がO2かH2Oかにかかわらず、同様の界面律速過程に支配されているだろうとDealとGroveは推測しました。

一方、放物型領域の速度係数(図中のB)の活性化エネルギーはドライ酸化で1.24eV、ウェット酸化で0.71eVと、かなり異なります。前者は溶融シリカ中のO2分子の拡散障壁に近く、後者はH2O分子の拡散障壁に近いことから、酸化種分子がSiO2膜中を拡散するプロセスが律速となっているとDealとGroveは結論しました。

ドライ酸化の初期異常

ただし、ドライ酸化のごく初期、SiO2膜厚約40nmまでの領域は、Deal-Groveの線形-放物型方程式の予測よりも酸化が著しく速く進みます。これに対してウェット酸化では、酸化膜厚ゼロの初期から線形-放物型方程式に忠実に従います。

DealとGroveはこのドライ酸化にみられるズレの原因についても言及しています。彼らは、酸化膜中ではO2分子がO2イオンと正孔に解離しており、酸化膜が薄い初期の段階では、高い移動度を有する正孔がO2イオンを引っ張る効果が顕在化し拡散速度が増加するために、初期の酸化が著しく速く進むと考察しました。

ドライ酸化とウェット酸化における極初期のSiO2膜成長曲線1)。ウェット酸化はSiO2膜厚ゼロからDeal-Grove方程式に従うが、ドライ酸化は膜厚40nm程度まで成長速度がDeal-Grove方程式の解より著しく増大する。

しかし、このDealとGroveの「初期増速拡散」説は、1983年、Fargeixらが行った解析により否定されました2)。ドライ酸化で初期の酸化が著しく速く進む原因は、拡散速度が上がるためではなく、界面における酸化速度が増加していると解釈しなければ、実験事実を説明できないことが判明したのです。

ところが話はこれで終わりではありません。2006年に筆者(渡邉)が発表した新しい線形-放物型方程式3)で、Fargeixらの実験の解釈が180度変わり、DealとGroveの「初期増速拡散」説が復活することがわかりました。

これから数回にわたって、シリコン熱酸化のメカニズムの解釈の変遷の歴史を紹介していきたいと思います。

  1. B. E. Deal, A. S. Grove, J. Appl. Phys. 36, 3770 (1965).
  2. A. Fargeix, G. Ghibaudo, G. Kamarinos, J. Appl. Phys. 54, 2878 (1983).
  3. T. Watanabe, K. Tatsumura, I. Ohdomari, Phys. Rev. Lett., 96, 196102 (2006).

Linuxサーバへのssh接続(3)Linux端末からの接続

学内のLinuxマシンから学外のLinux仮想サーバーへ、公開鍵認証によるssh接続の方法を説明します。公開鍵と秘密鍵のペアを作成し、秘密鍵は手元のPCに置き、公開鍵をサーバー管理者に送って、サーバーにアカウントを用意してもらいます。

1. ssh-keygenコマンドによる鍵の作成

$ ssh-keygen -t rsa

とコマンドを入力すると、鍵ファイルの名前をどうするか聞かれる。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/******/.ssh/id_rsa):

デフォルトのファイル名でよければ何も入力せずにenterキーを押す。すると鍵ファイル使用時に聞かれるパスフレーズの入力を求められる。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/******/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):

2回パスフレーズを入力すると、以下のようなメッセージが出力され、コマンドプロンプトが復帰する。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/******/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/******/.ssh/id_rsa.
Your public key has been saved in /home/******/.ssh/id_rsa.pub.
The key fingerprint is:
**************************************************************
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|        + =      |
|       . X O     |
|        B S o    |
|     o o @ .     |
|      + E o .    |
|       . .       |
|                 |
+-----------------+

2. サーバ管理者へ公開鍵を送付

~/.ssh ディレクトリに公開鍵がテキスト形式で生成される(デフォルトはid_rsa.pub)。このファイルをサーバー管理者に送る。

3. .ssh/configの編集

接続先の情報を.ssh/configファイルに登録しておく。Hostには接続するサーバのエントリー名を適当に指定する。Hostnameには接続先のサーバのipアドレスもしくはURL、Userには接続先のアカウントのユーザIDを記入する。IdentityFileにはたった今作った秘密鍵を指定する。

Host aws
    Hostname ***.***.***.***
    User *******
    IdentityFile ~/.ssh/id_rsa

4. sshサーバへの接続

サーバ管理者から公開鍵登録完了の通知を受けたら、登録したエントリー名を指定してsshコマンドを入力する。

$ssh aws

パスフレーズの入力を求められたら、鍵生成時に決めたパスフレーズを入力すること。
以上で接続完了。

Linuxサーバへのssh接続(2)はじめての接続

1.RLoginを起動する。

「Server Select」ダイアログから該当するエントリーを選択する。

Server Select Dialog

以下の情報で不足しているものがある場合は、「編集」を押下して「Server Edit Entry」ダイアログを呼び出し、追加情報を入力する。

  • 「エントリー」適当な名称を記入。下図の例ではAWS EC2。
  • 「プロトコル」ラジオボタンで「ssh」を選択。
  • 「Server Address」に、サーバー管理者から聞いたサーバーのアドレスを記入する。
  • 「Socket Port」sshを選択。
  • 「user name」サーバー管理者から割り当てられたユーザー名を記入する。
  • 早稲田大学学内から接続する場合は「Proxy Server」に汎用プロキシの設定を入力する必要があります。

完了したら「OK」ボタンを押下し、「Server Select」ダイアログに戻る。

図13

2.エントリーを選択して接続開始

「Server Select」ダイアログで該当するエントリーを選択した状態で「OK」ボタンを押下。

注意)早稲田大学内から学外のサーバに接続する際は、汎用プロキシサービスを開始しておくこと。

Server Select Dialog

鍵認証方式のサーバへの接続の場合は「Password」を空欄にしたまま「OK」ボタンを押す。

ssh connection

鍵を作成時に設定したパスフレーズを入力し、「OK」ボタンを押下。

pass phrase

コマンドプロンプトが現れれば成功!

Linuxサーバへのssh接続(1)認証キーの作成

学外のLinux仮想サーバーに接続する際は、公開鍵認証によるssh接続を行います。公開鍵と秘密鍵のペアを作成し、秘密鍵は手元のPCに置き、公開鍵をサーバー管理者に送って、サーバーにアカウントを用意してもらいます。

ここでは、OpenSSHの認証キーをRLoginで作成する手順を説明します。

1. RLoginを起動する。

「新規(N)」ボタンを押下。

Server Select Dialog

2. 「Server New Entry」ダイアログ左側のメニューの「サーバー」-「プロトコル」を選択

Server New Entry Dialog

3. 「認証キー(K)」ボタンを押下。

Server New Entry

4. 認証キーの新規作成

「任意の名前が指定できます」の右にあるテキストボックスに新しく生成する認証キーの名前を適当に記入し、「作成」ボタンを押下。

認証キー Dialog

5. 【重要】SSH鍵の作成

「SSH鍵の作成」ダイアログで適当なパスフレーズを2回入力し、「OK」を押下する。このパスフレーズはssh接続の際に必要となるので必ず覚えておくこと

SSH鍵の作成

6. 公開鍵の表示

「公開鍵」ボタンを押下。

公開鍵の作成

「Public Keyダイアアログ」で「OK」ボタンを押下すると、クリップボードに公開鍵がコピーされる。

Public Key Dialog

7. 公開鍵をサーバー管理者に送付

クリップボードにコピーした公開鍵のテキストデータをテキストエディタなどに貼り付け、テキストデータをメールでサーバ管理者に送付する。

8. サーバーの接続情報をわかる範囲で入力する

「Server Edit Entryダイアログ」の左上の「サーバー」をクリックし、現時点で分かっている接続情報を入力する

  • 「エントリー」適当な名称を記入。下図の例ではAWS EC2としています。
  • 「プロトコル」ラジオボタンで「ssh」を選択。
  • 「Server Address」に、サーバー管理者から聞いたサーバーのアドレスを記入する。まだ知らされていない場合は空欄のままでも可。
  • 「Socket Port」sshを選択。
  • 「user name」サーバー管理者から割り当てられたユーザー名を記入する。まだ決まっていなければ空欄のままで可。

記入が終わったら「OK」ボタンを押下。

Server Edit Entry

9.  一時終了

サーバー管理者から公開鍵登録完了の通知が来るまで一旦終了。「キャンセル」ボタンを押してダイアログを閉じ、RLoginを終了する。

RLoginのインストール

Windows用マシンからLinux仮想サーバー等へ接続するためのターミナルエミュレータ「RLogin」のインストール手順を説明します。

1. RLogin作者のWebサイトに行く。

http://nanno.dip.jp/softlib/man/rlogin/

2. トップページの「1. プログラム概要」の下の「2. インストールおよびアンインストール」をクリック。

RLogin HP

3. 自分のPCにあった実行プログラムをダウンロード

図2

3. 圧縮ファイルの中に実行プログラムがあるので、デスクトップなど適当な場所に置く。

図3

以上。

 

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は長さの次元を持った量なので、本来パラメータとして扱うべきものである。