LAMMPS+Packmol+Moltemplate+OPLS-AAで溶液のMD

提供: Akionux-wiki
Share/Save/Bookmark
移動先: 案内検索

概要

フリーソフトウェアで溶液のMDを行う一つの方法をまとめる。

Packmolで分子を詰め、Moltemplateで力場OPLS-AAを割り当て、LAMMPSでMDを実行するという手順になる。

テスト環境

  • Slackware Linux x86_64
  • LAMMPS stable_11Aug2017

ここでの手順は、LAMMPS同梱のmoltemplateの例 tools/moltemplate/examples/force_field_OPLSAA/ethylene+benzene_PACKMOLをベースにしている。

Packmol

Packmolは溶媒 (必ずしも溶媒ではない)の初期状態を作るためのツールである。

packmolを使うためには、溶媒分子の座標ファイルと、Packmol用の入力ファイルを用意する必要がある。 例題にあるような簡単な入力ファイルは次のようになる

tolerance 2.0
filetype xyz
output system.xyz

structure solvent.xyz
  number 10000
  inside box 0. 0. 0. 80. 80. 80.
end structure
tolerance 2.0

toleranceは異なる分子の原子間の最小距離 (Å単位、またはLAMMPSのunitsで指定する距離単位)である。分子間にtoleranceだけの距離は取って、箱の中に分子を詰めるというわけである。常温常圧なら2.0Åで良い[1]

次は分子を詰めた座標の出力ファイルの設定である。

filetype xyz

filetypeは出力座標ファイル形式を指定する。pdb, tinker, xyzまたはmoldy形式が指定可能で、デフォルトはpdbである。

output system.xyz

outputは出力座標ファイル名を指定する。

structure ... end structureセクションで、分子種ごとの設定を行う。

structure solvent.xyz
  number 10000
  inside box 0. 0. 0. 80. 80. 80.
end structure

上記の例のsolvent.xyzの部分は、溶媒分子の座標ファイル名である。繰り返すが「溶媒分子」ととりあえず呼んでいるのは溶媒でなくても溶質でもタンパク質でも良く、とにかくある領域に詰める分子のことを指している。

number 10000は溶媒分子の数で、続くinside box 0. 0. 0. 80. 80. 80.は溶媒分子を詰める領域を、x,y,z方向に[0,80]の領域の立方体内部と指定している。

他にもいろいろな領域の指定方法や、原子ごとの細かい指定ができ、詳しくは公式ユーザガイドを参照。

packmolを実行するには、次のようにコマンドを実行する

packmol < system.inp

ここで、system.inpは作成したPackmol用の入力ファイルである。 うまく行けば、outputで指定した座標ファイルが生成される。領域に分子を入れすぎると、toleranceの距離を取れず、うまく行かないと思われる。

Moltemplate

Moltemplateはテキストベースの分子ビルダーだが、全原子シミュレーションの力場設定ツールとして威力を発揮する。

moltemplate.shを実行するには、LTファイルと呼ばれる専用形式のファイルを準備する必要がある。

分子種ごとのLTファイルと、系のLTファイルを作る。 Moltemplateはいくつかの力場に対応しているが、ここでは、OPLS-AA[2][3]を力場として使うことにする。

分子種のLTファイルの内容の例は、次のようになる:

import "oplsaa.lt"

H2O inherits OPLSAA {
  # atomID   molID  atomTyle  charge     X        Y          Z
  write('Data Atoms') {
    $atom:O  $mol:. @atom:65   0.0   0.000000   0.000000   0.000000
    $atom:H1 $mol:. @atom:66   0.0   0.000000   0.000000   0.000000
    $atom:H2 $mol:. @atom:66   0.0   0.000000   0.000000   0.000000
  }

  write('Data Bond List') {
    $bond:OH1 $atom:O $atom:H1
    $bond:OH2 $atom:O $atom:H2
  }
}

#で始まる行はコメントである。

この節を書こうとした人は途中で投げ出してしまいました。今後場合によっては加筆されるかもしれません。


References

  1. Packmol - Initial configurations for Molecular Dynamics https://www.ime.unicamp.br/~martinez/packmol/tolerance-note.shtml
  2. Ponder, J. W., & Richards, F. M. (1987). "An efficient newton‐like method for molecular mechanics energy minimization of large molecules. Journal of Computational Chemistry", 8(7), 1016-1024.
  3. Ponder, J. W, (2004) "TINKER: Software tools for molecular design", http://dasher.wustl.edu/tinker/