力場
このファイルでは LAMMPS で用いられる力場の数式を概説します。data_format ファイルと units ファイルと合わせて読んでください。
本ページの構成は以下のとおりです。
非結合 Coulomb
非結合 Lennard-Jones
Lennard-Jones の混合則
結合
角度
二面角
不正規角
クラス II 力場
関連する研究ツールや HPC リソースの広告が表示される場合があります。
** 非結合 Coulomb
入力スクリプトで指定した Coulomb スタイルに関わらず、短距離のクーロン相互作用は以下の式で計算し、smooth、Ewald、PPPM、charmm、debye 各スタイルでは適切な平滑化関数で修正します。
E = C q1 q2 / (epsilon * r)
r = LAMMPS が計算する距離
C = エネルギー単位へ変換するための固定定数
q1,q2 = 原子の電荷(電子単位、陽子なら +1)。データファイルの「Atoms」エントリで指定
epsilon = 誘電率(真空は 1.0)。入力スクリプトでユーザが設定
debye スタイルでは exp(-kappa*r) を平滑化関数として用い、kappa は入力パラメータです。
** 非結合 Lennard-Jones
非結合ポテンシャルのスタイルは入力スクリプトで指定します。
(1) lj/cutoff
E = 4 epsilon [ (sigma/r)^12 - (sigma/r)^6 ]
標準的な Lennard-Jones ポテンシャル
r = LAMMPS が計算する距離
coeff1 = epsilon(エネルギー)
coeff2 = sigma(距離)
係数は 2 つをデータファイルに記述するか入力スクリプトで設定
カットオフは 1 つを入力スクリプトで設定
(2) lj/switch
E = 4 epsilon [ (sigma/r)^12 - (sigma/r)^6 ] (r < r_inner)
= スプライン補間 (r_inner < r < cutoff)
= 0 (r > cutoff)
r_inner から cutoff までの区間でスプラインによるスイッチング関数を適用し、
エネルギーと力が滑らかにゼロへ向かうようにする
スプライン係数は LAMMPS が計算し、
内側のカットオフ r_inner でポテンシャル・力・力の 1 次導関数が連続、
外側のカットオフ cutoff でポテンシャルと力がゼロになるよう設定
r = LAMMPS が計算する距離
coeff1 = epsilon(エネルギー)
coeff2 = sigma(距離)
係数は 2 つをデータファイルに記述するか入力スクリプトで設定
r_inner と cutoff の 2 つのカットオフを入力スクリプトで設定
(3) lj/shift
E = 4 epsilon [ (sigma/(r - delta))^12 - (sigma/(r - delta))^6 ]
lj/cutoff と同じだが r を delta だけシフトする
r = LAMMPS が計算する距離
coeff1 = epsilon(エネルギー)
coeff2 = sigma(距離)
coeff3 = delta(距離)
係数は 3 つをデータファイルに記述するか入力スクリプトで設定
カットオフは 1 つを入力スクリプトで設定
(4) soft
E = A * [ 1 + cos( pi * r / cutoff ) ]
A を時間方向に変化させることで重なり合った原子を引き離す用途に便利
r = LAMMPS が計算する距離
coeff1 = 計算開始時の前係数 A(エネルギー)
coeff2 = 計算終了時の前係数 A(エネルギー)
係数は 2 つをデータファイルに記述するか入力スクリプトで設定
カットオフは 1 つを入力スクリプトで設定
(5) class2/cutoff
E = epsilon [ 2 (sigma/r)^9 - 3 (sigma/r)^6 ]
クラス II 結合力場と併用
r = LAMMPS が計算する距離
coeff1 = epsilon(エネルギー)
coeff2 = sigma(距離)
係数は 2 つをデータファイルに記述するか入力スクリプトで設定
カットオフは 1 つを入力スクリプトで設定
6) lj/charmm
E = 4 epsilon [ (sigma/r)^12 - (sigma/r)^6 ] (r < r_inner)
= switch * E (r_inner < r < cutoff)
= 0 (r > cutoff)
ここで
switch = [(cutoff^2 - r^2)^2 * (cutoff^2 + 2*r^2 - 3*r_inner)] /
[(cutoff^2 - r_inner^2)^3]
LJ ポテンシャルにスイッチング関数を適用し、
r_inner から cutoff の領域でエネルギーと力を滑らかにゼロへ向かわせる
r_inner ではポテンシャルと力が連続、
cutoff ではポテンシャルと力がゼロになる
r = LAMMPS が計算する距離
coeff1 = epsilon(エネルギー)
coeff2 = sigma(距離)
coeff3 = 1-4 相互作用用の epsilon(エネルギー)
coeff4 = 1-4 相互作用用の sigma(距離)
係数は 4 つをデータファイルに記述するか入力スクリプトで設定
r_inner と cutoff の 2 つのカットオフを入力スクリプトで設定
** Lennard-Jones の混合則
非結合ポテンシャル各スタイルの係数は、データファイルの「read data」コマンドから、または入力スクリプトで「nonbond coeff」コマンドを用いて入力します。前者の場合、原子タイプごとに 1 組のみ係数を与え、型が異なる組み合わせの係数は以下のいずれかの混合則によって求めます。
geometric: epsilon_ij = sqrt(epsilon_i * epsilon_j)
sigma_ij = sqrt(sigma_i * sigma_j)
arithmetic: epsilon_ij = sqrt(epsilon_i * epsilon_j)
sigma_ij = (sigma_i + sigma_j) / 2
sixthpower: epsilon_ij =
(2 * sqrt(epsilon_i*epsilon_j) * sigma_i^3 * sigma_j^3) /
(sigma_i^6 + sigma_j^6)
sigma_ij= ((sigma_i^6 + sigma_j^6) / 2) ^ (1/6)
非結合スタイル lj/cutoff、lj/switch、lj/shift、soft のデフォルト混合則は「geometric」です。非結合スタイル class2/cutoff のデフォルトは「sixthpower」です。
デフォルトは「mixing style」コマンドで変更できます。例外として、soft スタイルは epsilon の前係数のみを入力しますが、常に幾何平均で混合します。また lj/shift スタイルの delta 係数は常に
delta_ij = (delta_i + delta_j) / 2
で混合します。
** 結合
結合ポテンシャルのスタイルは入力スクリプトで指定します。
(1) harmonic
E = K (r - r0)^2
標準的な調和バネ
r = LAMMPS が計算する距離
coeff1 = K(エネルギー/距離^2)。通常の 1/2 は K に含まれる
coeff2 = r0(距離)
係数は 2 つをデータファイルに記述するか入力スクリプトで設定
(2) FENE/standard
E = -0.5 K R0^2 * ln[1 - (r/R0)^2] +
4 epsilon [(sigma/r)^12 - (sigma/r)^6] + epsilon
高分子ビーズ・スプリングモデル向けの有限伸張非線形弾性(FENE)ポテンシャル
Kremer, Grest, J Chem Phys, 92, 5057 (1990) を参照
r = LAMMPS が計算する距離
coeff1 = K(エネルギー/距離^2)
coeff2 = R0(距離)
coeff3 = epsilon(エネルギー)
coeff4 = sigma(距離)
第 1 項は引力、第 2 項は(シフトした LJ による)斥力
第 1 項の有効範囲は R0 まで
第 2 項の範囲は LJ ポテンシャルの最小値までで、
LAMMPS が計算するカットオフ距離(2^(1/6) * sigma)
係数は 4 つをデータファイルに記述するか入力スクリプトで設定
(3) FENE/shift
E = -0.5 K R0^2 * ln[1 - ((r - delta)/R0)^2] +
4 epsilon [(sigma/(r - delta))^12 - (sigma/(r - delta))^6] + epsilon
FENE/standard と同じだが r を delta だけシフトする
r = LAMMPS が計算する距離
coeff1 = K(エネルギー/距離^2)
coeff2 = R0(距離)
coeff3 = epsilon(エネルギー)
coeff4 = sigma(距離)
coeff5 = delta(距離)
第 1 項は引力、第 2 項は(シフトした LJ による)斥力
第 1 項の有効範囲は R0 まで
第 2 項の範囲は LJ ポテンシャルの最小値までで、
LAMMPS が計算するカットオフ距離(2^(1/6) * sigma + delta)
係数は 5 つをデータファイルに記述するか入力スクリプトで設定
(4) nonlinear
E = epsilon (r - r0)^2 / [ lamda^2 - (r - r0)^2 ]
平衡長 r0 を持つ非調和バネで、有限伸張 longda を持つ
Rector, Van Swol, Henderson, Molecular Physics, 82, 1009 (1994) を参照
r = LAMMPS が計算する距離
coeff1 = epsilon(エネルギー)
coeff2 = r0(距離)
coeff3 = lamda(距離)
係数は 3 つをデータファイルに記述するか入力スクリプトで設定
(5) class2
E = K2 (r - r0)^2 + K3 (r - r0)^3 + K4 (r - r0)^4
r = LAMMPS が計算する距離
coeff1 = r0(距離)
coeff2 = K2(エネルギー/距離^2)
coeff3 = K3(エネルギー/距離^3)
coeff4 = K4(エネルギー/距離^4)
係数は 4 つをデータファイルに記述(入力スクリプトでは設定不可)
** 角度
角度ポテンシャルのスタイルは入力スクリプトで指定します。
(1) harmonic
E = K (theta - theta0)^2
theta = LAMMPS が計算する角度(ラジアン)
coeff1 = K(エネルギー/ラジアン^2)。通常の 1/2 は K に含まれる
coeff2 = theta0(度。LAMMPS 内でラジアンに変換)
係数は 2 つをデータファイルに記述するか入力スクリプトで設定
(2) class2
E = K2 (theta - theta0)^2 + K3 (theta - theta0)^3 +
K4 (theta - theta0)^4
theta = LAMMPS が計算する角度(ラジアン)
coeff1 = theta0(度。LAMMPS 内でラジアンに変換)
coeff2 = K2(エネルギー/ラジアン^2)
coeff3 = K3(エネルギー/ラジアン^3)
coeff4 = K4(エネルギー/ラジアン^4)
係数は 4 つをデータファイルに記述(入力スクリプトでは設定不可)
(3) charmm
E = K (theta - theta0)^2 + K_UB (r_13 - r_UB)^2
theta = LAMMPS が計算する角度(ラジアン)
r_13 = LAMMPS が計算する距離
coeff1 = K(エネルギー/ラジアン^2)。通常の 1/2 は K に含まれる
coeff2 = theta0(度。LAMMPS 内でラジアンに変換)
coeff3 = K_UB(エネルギー/距離^2)
coeff4 = r_UB(距離)
係数は 4 つをデータファイルに記述するか入力スクリプトで設定
(4) cosine
E = K (1 + cos(theta))
theta = LAMMPS が計算する角度(ラジアン)
coeff1 = K(エネルギー)
係数は 1 つをデータファイルに記述するか入力スクリプトで設定
** 二面角
二面角ポテンシャルのスタイルは入力スクリプトで指定します。すべての二面角スタイルに共通する重要な注意点として、LAMMPS の力場ではトランス配置を 180 度と定義していますが、力場によっては 0 度とするものがあります。
(1) harmonic
E = K [1 + d * cos (n*phi) ]
phi = LAMMPS が計算する角度(ラジアン)
coeff1 = K(エネルギー)
coeff2 = d(+1 または -1)
coeff3 = n(1,2,3,4,6)
他の力場と比較する際の注意点:
・いくつかの力場では d の符号が逆になり E = K [1 - d * cos(n*phi)]
・i-j-k-l のねじれで j-k 結合を共有する複数のねじれに対し、
K を分割または乗算する力場がある
・n を正負いずれにも設定できる力場があり、その場合 d = 1,-1 に対応
係数は 3 つをデータファイルに記述するか入力スクリプトで設定
(2) class2
E = SUM(n=1,3) { K_n [ 1 - cos( n*Phi - Phi0_n ) ] }
phi = LAMMPS が計算する角度(ラジアン)
coeff1 = K_1(エネルギー)
coeff2 = Phi0_1(度。LAMMPS 内でラジアンに変換)
coeff3 = K_2(エネルギー)
coeff4 = Phi0_2(度。LAMMPS 内でラジアンに変換)
coeff5 = K_3(エネルギー)
coeff6 = Phi0_3(度。LAMMPS 内でラジアンに変換)
係数は 6 つをデータファイルに記述(入力スクリプトでは設定不可)
(3) multiharmonic
E = SUM(n=1,5) { A_n * cos(Phi)^(n-1) }
phi = LAMMPS が計算する角度(ラジアン)
coeff1 = A_1
coeff2 = A_2
coeff3 = A_3
coeff4 = A_4
coeff5 = A_5
係数は 5 つをデータファイルに記述するか入力スクリプトで設定
(4) charmm
(harmonic + 1-4 相互作用)
E = K [1 + cos (n*phi + d) ]
phi = LAMMPS が計算する角度(ラジアン)
coeff1 = K(エネルギー)
coeff2 = n(1,2,3,4,6)
coeff3 = d(0 または 180 度。LAMMPS 内でラジアンに変換)
coeff4 = 1-4 近接原子間の非結合相互作用をオン・オフする重み
coeff4 の重みは 0.0~1.0 でエネルギー・力(クーロンおよび LJ)を乗じます。
重み 0.0 で相互作用なし、1.0 で完全な相互作用となります。
special bonds charmm コマンド(例:「special bonds 0 0 0」)と併用し、
一様な special bonds を無効化して 1-4 相互作用用のペア別 special bonds を
データファイルで指定できるようにします。
LAMMPS は、1-4 相互作用距離(通常 6 Å 未満)が、LJ とクーロン相互作用の
内側カットオフの最小値(通常 8 Å 以上)より短いと仮定します。
係数は 4 つをデータファイルに記述するか入力スクリプトで設定
** 不正規角
不正規角ポテンシャルのスタイルは入力スクリプトで指定します。
(1) harmonic
E = K (chi - chi0)^2
chi = LAMMPS が計算する角度(ラジアン)
coeff1 = K(エネルギー/ラジアン^2)。通常の 1/2 は K に含まれる
coeff2 = chi0(度。LAMMPS 内でラジアンに変換)
係数は 2 つをデータファイルに記述するか入力スクリプトで設定
(2) cvff
E = K [1 + d * cos (n*chi) ]
chi = LAMMPS が計算する角度(ラジアン)
coeff1 = K(エネルギー)
coeff2 = d(+1 または -1)
coeff3 = n(0,1,2,3,4,6)
係数は 3 つをデータファイルに記述するか入力スクリプトで設定
(3) class2
数式・係数・意味は harmonic と同じですが、
LAMMPS は 3 つの角度寄与の平均を取ります
クラス II では Wilson の面外振動相互作用と呼ばれます
係数は 2 つをデータファイルに記述(入力スクリプトでは設定不可)
** クラス II 力場
入力スクリプトでクラス II 力場を選択すると、力場の一部として追加の交差項を計算します。クラス II の係数はすべてデータファイルで指定する必要があり、入力スクリプトでは設定できません。
Bond-Bond(クラス II 角度内で計算)
E = K (r - r0) * (r' - r0')
r,r' = LAMMPS が計算する距離
coeff1 = K(エネルギー/距離^2)
coeff2 = r0(距離)
coeff3 = r0'(距離)
係数は 3 つをデータファイルで入力
Bond-Angle(クラス II 角度内で、2 本の結合それぞれに対して計算)
E = K_n (r - r0_n) * (theta - theta0)
r = LAMMPS が計算する距離
theta = LAMMPS が計算する角度(ラジアン)
coeff1 = K_1(エネルギー/距離・ラジアン)
coeff2 = K_2(エネルギー/距離・ラジアン)
coeff3 = r0_1(距離)
coeff4 = r0_2(距離)
注:theta0 は角度係数から既知なのでここでは指定不要
係数は 4 つをデータファイルに記述
Middle-Bond-Torsion(クラス II 二面角内で計算)
E = (r - r0) * [ F1*cos(phi) + F2*cos(2*phi) + F3*cos(3*phi) ]
r = LAMMPS が計算する距離
phi = LAMMPS が計算する角度(ラジアン)
coeff1 = F1(エネルギー/距離)
coeff2 = F2(エネルギー/距離)
coeff3 = F3(エネルギー/距離)
coeff4 = r0(距離)
係数は 4 つをデータファイルに記述
End-Bond-Torsion(クラス II 二面角内で、2 本の結合それぞれに対して計算)
E = (r - r0_n) * [ F1_n*cos(phi) + F2_n*cos(2*phi) + F3_n*cos(3*phi) ]
r = LAMMPS が計算する距離
phi = LAMMPS が計算する角度(ラジアン)
coeff1 = F1_1(エネルギー/距離)
coeff2 = F2_1(エネルギー/距離)
coeff3 = F3_1(エネルギー/距離)
coeff4 = F1_2(エネルギー/距離)
coeff5 = F2_3(エネルギー/距離)
coeff6 = F3_3(エネルギー/距離)
coeff7 = r0_1(距離)
coeff8 = r0_2(距離)
係数は 8 つをデータファイルに記述
Angle-Torsion(クラス II 二面角内で、2 つの角度それぞれに対して計算)
E = (theta - theta0) * [ F1_n*cos(phi) + F2_n*cos(2*phi) + F3_n*cos(3*phi) ]
theta = LAMMPS が計算する角度(ラジアン)
phi = LAMMPS が計算する角度(ラジアン)
coeff1 = F1_1(エネルギー/ラジアン)
coeff2 = F2_1(エネルギー/ラジアン)
coeff3 = F3_1(エネルギー/ラジアン)
coeff4 = F1_2(エネルギー/ラジアン)
coeff5 = F2_3(エネルギー/ラジアン)
coeff6 = F3_3(エネルギー/ラジアン)
coeff7 = theta0_1(度。LAMMPS 内でラジアンに変換)
coeff8 = theta0_2(度。LAMMPS 内でラジアンに変換)
係数は 8 つをデータファイルに記述
Angle-Angle-Torsion(クラス II 二面角内で計算)
E = K (theta - theta0) * (theta' - theta0') * (phi - phi0)
theta,theta' = LAMMPS が計算する角度(ラジアン)
phi = LAMMPS が計算する角度(ラジアン)
coeff1 = K(エネルギー/ラジアン^3)
coeff2 = theta0(度。LAMMPS 内でラジアンに変換)
coeff3 = theta0'(度。LAMMPS 内でラジアンに変換)
注:phi0 は二面角の係数から既知なのでここでは指定不要
係数は 3 つをデータファイルに記述
Bond-Bond-13-Torsion(クラス II 二面角内で計算)
E = K * (r1 - r10)*(r3 - r30)
r1,r3 = 結合 1 と 3 の結合長(LAMMPS が計算)
coeff1 = K(エネルギー/距離^2)
coeff2 = r10(距離)= 結合 1 の平衡結合長
coeff3 = r30(距離)= 結合 3 の平衡結合長
K が非ゼロになるのは芳香族環のみ
係数は 3 つをデータファイルに記述
Angle-Angle(クラス II 不正規角内で、3 組の角度それぞれに対して計算)
E = K_n (theta - theta0_n) * (theta' - theta0_n')
theta,theta' = LAMMPS が計算する角度(ラジアン)
coeff1 = K_1(エネルギー/ラジアン^2)
coeff2 = K_2(エネルギー/ラジアン^2)
coeff3 = K_3(エネルギー/ラジアン^2)
coeff4 = theta0_1(度。LAMMPS 内でラジアンに変換)
coeff5 = theta0_2(度。LAMMPS 内でラジアンに変換)
coeff6 = theta0_3(度。LAMMPS 内でラジアンに変換)
係数は 6 つをデータファイルに記述