GAMESSでさくっと構造最適化をしたい
forcefieldを用いた構造最適化の限界は、特に芳香環での部分電荷なんかに顕著に現れます。
そのため、必要最低限の量子化学計算のスキルはケミストには必須だと思います。しかし、量子化学計算ソフトウェアは歴史的経緯からか、ライトユーザーにとってはどうでもいい中間ファイルを出力したり、インプット自体が複雑怪奇だったりしますね?
そこで、そこら辺をまとめて面倒見つつ、必要最低限の作業をサクっとするようなものを書いてみました。
これを使うと、段々基底関数の精度をあげつつ最適化をするというルーチンがこんなかんじで書けます
import openbabel as ob from gamess import Gamess g = Gamess() obc = ob.OBConversion() obc.SetInFormat("mol") methane = ob.OBMol() next = obc.ReadFile(methane,"methane.mol") # STO-3Gで構造最適化 methane_sto3g = g.optimize(methane, basis="sto3g") # STO-3Gで最適化された構造を初期値にして、さらに6-31Gで最適化 methane_631g = g.optimize(methane_sto3g, basis="631g") for a in ob.OBMolAtomIter(methane_631g): print "%s x: %1.3f, y: %1.3f, z: %1.3f charge: %1.3f" % \ (a.GetType(), a.x(), a.y(), a.z(), a.GetPartialCharge())
実行結果
C3 x: 0.937, y: 0.067, z: 0.028 charge: -0.660 HC x: 2.019, y: 0.101, z: 0.086 charge: 0.165 HC x: 0.522, y: 0.935, z: 0.527 charge: 0.165 HC x: 0.578, y: -0.834, z: 0.512 charge: 0.165 HC x: 0.630, y: 0.066, z: -1.011 charge: 0.165
実際にユーザーが使いやすいようにするのはCGIのようなWEBから実行出来るようにしたほうがいいかもしれませんね。