バグフィックスしたり基底関数まわりを追加してバージョンをちょっとあげた。
一番大きな変更はデフォルトでrungmsを使わないようにしたことで 直接ddikickを叩くことにしたことか。それでgamessのパスをどうしようかなぁと。
とりあえずコンストラクタで直接指定してない場合は
- 環境変数GAMESS_PATHを調べる
- PATHの中からddikick.xのあるディレクトリを探して、それを選択する
それとは別にrungmsのpathを探したりもしている(僕の場合はrungmsを/usr/local/binに置いている)のでちょっとくどいやり方になってしまった。
それから、コンストラクタにオプションを渡せるようにしたんだけど、これだと、gamessのインプットいじるのと変わらないので、もう少しスマートな指定方法も用意したほうがいいかなぁと思った。
水分子を基底関数を変えながらエネルギーを計算する例。このくらいだったら対話環境でサクッとうごく。
>>> import pybel >>> from pygamess import Gamess >>> g = Gamess() >>> mol = pybel.readstring('smi', 'O') >>> mol.make3D() >>> g.run(mol).energy -74.96450135 >>> g.run_type('optimize') >>> g.run(mol).energy -74.9659012146 >>> g.basis_set('3-21G') >>> g.run(mol).energy -75.585959758 >>> g.basis_set('6-31G') >>> g.run(mol).energy -75.9853591564 >>> g.basis_set('6-311G') >>> g.run(mol).energy -76.0109546389 >>> g.basis_set('6-31G*') >>> g.run(mol).energy -76.0107465155 >>> g.basis_set('6-31G**') >>> g.run(mol).energy -76.0236150193
最近ちょっと困っているのが、構造最適化で収束しないのをどうやって収束させるかという。6-31G*くらいでmopacみたいなノリで計算できるようにしたい。