去年書いたGAMESSラッパーに手を加えてGitHubにあげた。ヘッダーの生成まわりはもっとやらないといけないんだけど、基底関数とコントロールまわりは動くようにした。といっても一点計算と最適化ぐらいしかしないんだけど。
- エラー終了しているときにはエラーの内容を出力できるようにした
- rungmsのパスの確認
- gamess inputを出力できるようにした
- SCF計算のタイプも指定できる
こんな感じで動かします。例としてEthane。デフォルトはCPUに優しいSTO3Gの一点計算です。
import gamess
g = gamess.Gamess()
obc = ob.OBConversion()
obc.SetInFormat("mol")
mol = ob.OBMol()
next = obc.ReadFile(mol, "examples/ethane.mol")
print g.gamess_input(mol)
try:
newmol = g.run(mol)
except GamessError, gerr:
print gerr.value
print newmol.GetEnergy()
print [(obatom.GetIdx(), obatom.GetType(), obatom.GetPartialCharge()) for \
obatom in ob.OBMolAtomIter(newmol)]
結果はこれ。
$contrl runtyp=energy scftyp=rhf $end
$basis gbasis=sto ngauss=3 $end
$SYSTEM MWORDS=30 $END
$DATA
6324
C1
C 6.0 -0.7560000000 0.0000000000 0.0000000000
C 6.0 0.7560000000 0.0000000000 0.0000000000
H 1.0 -1.1404000000 0.6586000000 0.7845000000
H 1.0 -1.1404000000 0.3501000000 -0.9626000000
H 1.0 -1.1405000000 -1.0087000000 0.1781000000
H 1.0 1.1404000000 -0.3501000000 0.9626000000
H 1.0 1.1405000000 1.0087000000 -0.1781000000
H 1.0 1.1404000000 -0.6586000000 -0.7845000000
$END
-78.30530748
[(1, 'C3', -0.16967199999999999), (2, 'C3', -0.16967199999999999), \
(3, 'HC', 0.056557999999999997), (4, 'HC', 0.056559999999999999), \
(5, 'HC', 0.056554), (6, 'HC', 0.056559999999999999), \
(7, 'HC', 0.056554), (8, 'HC', 0.056557999999999997)]
ラジカルの計算がしたいのでROHFかUHFの設定ができるようにしておいたがスピン多重度の指定が出来ないのでとっととやる。
あと、テスト書かなあかんなぁと思いながらエキスパートPythonを読んでます。二周目か三周目かわからんけど、何回読んでもこの本は楽しい。