初めに
QM/MMをやってみたかったので、NWChemを触ってみた。
が、ドキュメントを読んでも全体像がよく分からなかったので
今回は水分子のHF/6-31Gでの構造最適化だけ試してみた。
バージョン
- NWChem 7.0.2
- Windows 10
- WSL 1 / Ubuntu 18.04.4
ダウンロードとインストール
releaseページを参考に次のようにインストール。
$ sudo apt-get update
$ sudo apt -y install python3-dev gfortran mpi-default-bin mpi-default-dev ssh
$ curl -LJO https://github.com/nwchemgit/nwchem/releases/download/v7.0.2-release/nwchem-data_7.0.2-1_all.ubuntu_bionic.deb
$ curl -LJO https://github.com/nwchemgit/nwchem/releases/download/v7.0.2-release/nwchem_7.0.2-1_amd64.ubuntu_bionic.deb
$ sudo dpkg -i nwchem*7.0.2*bionic*.deb
これをするとnwchem
のパスが通っているハズ。(通っていなければシェルを再起動)
nwchem
は/usr/bin/nwchem
にインストールされている。
インストールされたものは実行ファイルのnwchem
のみ。
(ソースコードとかは無さげ……コンパイル済みのものをインストールしたのかな)
$ which nwchem
/usr/bin/nwchem
(インストール場所って変えられないのかな…)
環境変数の設定
しなくても実行はできたので割愛。
mpirunとかの処理の最適化をするなら必要なのか?
サンプル
start h2o
title "Water in 6-31g basis set"
geometry units au
O 0.00 0.00 0.00
H 0.00 1.43 -1.11
H 0.00 -1.43 -1.11
end
basis
H library 6-31g
O library 6-31g
end
task scf optimize
公式ドキュメントにもあるサンプルをとりあえず適当なディレクトリに作り、
これを実行する。
$ nwchem h2o.nw
もしくは
$ mpirun -np 4 nwchem h2o.nw
するとGaussianのlogファイルみたいなものが標準出力される。
最適化過程における座標値やエネルギー値を出力している様子。
また、同時にファイルが生成される。
$ ls
'h2o.b^-1' h2o.cfock h2o.drv.hess h2o.nw h2o.p
h2o.b h2o.c h2o.db h2o.movecs h2o.zmat
.nw
(インプット)を除いてどれもバイナリなので直接読むことはできない。
標準出力はシェルのリダイレクトを使うことでファイルに保存できる
$ nwchem h2o.nw > h2o.nwout
可視化
GaussianはGaussViewがあるが、NWChemは?となり調べてみたところ
Gaussianのcube形式に出力することができる。(dplot)
その場合は次の通りにインプットにdplot
とtask
を追加する。
start h2o
title "Water in 6-31g basis set"
geometry units au
O 0.00 0.00 0.00
H 0.00 1.43 -1.11
H 0.00 -1.43 -1.11
end
basis
H library 6-31g
O library 6-31g
end
task scf optimize
dplot
gaussian
limitxyz; -3.0 3.0 100; -3.0 3.0 100; -3.0 3.0 100
output chargedensity.cube
end
task dplot
これで回すと、chargedensity.cubeファイルが生成される。
中には格子点(limitxyz
で指定)上の電子密度の値が並んでいる。
加えて7行目から最適化構造の座標値も出力されている。
(cubeファイルの解釈はこのページで)
Cube file generated by NWChem
Unknown Title
3 -5.669180 -5.669180 -5.669180
101 0.113384 0.000000 0.000000
101 0.000000 0.113384 0.000000
101 0.000000 0.000000 0.113384
8 8.000000 0.000000 0.000000 0.154929
1 1.000000 -1.483748 0.000000 -0.854464
1 1.000000 1.483748 0.000000 -0.854464
0.77530E-13 0.10980E-12 0.15423E-12 0.21483E-12 0.29679E-12 0.40662E-12
0.55250E-12 0.74450E-12 0.99496E-12 0.13187E-11 0.17333E-11 0.22595E-11
0.29211E-11 0.37452E-11 0.47622E-11 0.60053E-11 0.75104E-11 0.93152E-11
....
あとはこれをGaussViewに読ませるなり、自分で解読するなり()すればOK
他にもMOとかスピン密度とかも出力できるらしいが、今回は興味がないので割愛