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から実行出来るようにしたほうがいいかもしれませんね。