An input geometry of ethanol in the very common XYZ file format might look something very similar to this, when made in Avogadro[5]
9 ethanol.xyz C 0.00004 0.00001 0.00002 C 0.00035 -0.00106 1.52091 H 0.02794 1.04324 -0.38022 H -0.92039 -0.49540 -0.37524 H 0.88619 -0.55034 -0.38151 H -0.89666 0.55109 1.87908 O 1.16332 0.62487 1.98684 H -0.03205 -1.05436 1.87773 H 1.11207 0.59582 2.97727
Using Open Babel[6] we can quickly make a GAMESS input file using the following command
babel -ixyz ethanol.xyz -ogamin ethanol.inp
resulting in
$CONTRL COORD=CART UNITS=ANGS $END $DATA ethanol.xyz C1 C 6.0 0.0000400000 0.0000100000 0.0000200000 C 6.0 0.0003500000 -0.0010600000 1.5209100000 H 1.0 0.0279400000 1.0432400000 -0.3802200000 H 1.0 -0.9203900000 -0.4954000000 -0.3752400000 H 1.0 0.8861900000 -0.5503400000 -0.3815100000 H 1.0 -0.8966600000 0.5510900000 1.8790800000 O 8.0 1.1633200000 0.6248700000 1.9868400000 H 1.0 -0.0320500000 -1.0543600000 1.8777300000 H 1.0 1.1120700000 0.5958200000 2.9772700000 $END
but we can't run this file right away since it is obviously lacking information about the basis set, the DFT-functional and even the runtype (GAMESS assumes runtyp=energy if nothing is specified).
Ideally what we want is to generate a header for the input file and then insert it into the input file, but this header should be generated automatically for us.
Given a set of parameters (functional and basis set), the following python script (header.py) prints a correct header for GAMESS to the screen
import sys
basissets = {'sto3g' :'STO NGAUSS=3',
'pc0' :'PC0',
'pc1' :'PC1',
'apc0' :'APC0',
'apc1' :'APC1'}
functionals = {'blyp' :'BLYP',
'b3lyp': 'B3LYP'}
basis = basissets[sys.argv[1]]
functional = functionals[sys.argv[2]]
print " $SYSTEM MWORDS=125 $END"
print " $CONTRL RUNTYP=OPTIMIZE DFTTYP=%s ISPHER=1 $END" % (functional)
print " $BASIS GBASIS=%s $END" % (basis)
Notice how we use a dictionary to store the basis set information so it can be easily recovered and printed correctly. The GAMESS basis group can be quite hideous with Pople basis sets[7].
All we require now is a small bash script, which makes loops over the various basis sets and functionals, invoke the python script we just made with the correct arguments and dump that printout information to a file (header.inp) and then use some Open Babel magic (to add a custom header with keywords, use the very secret -xf filename flag when converting to GAMESS input files) to make it work. The following script does exactly that
#!/usr/bin/env bash
for basis in sto3g pc0 pc1 apc0 apc1
do
for functional in blyp b3lyp
do
filename=$basis"_"$functional".inp"
python header.py $basis $functional > header.inp
babel -xf header.inp -ixyz ethanol.xyz -ogamin $filename
done
done
For information on how to use GAMESS, I recommend Professor Jan Jensens blog (http://molecularmodelingbasics.blogspot.com/) as a great resource and for general usage notes of GAMESS and the Google user group (http://groups.google.com/group/gamess) is very helpful if you have any problems or questions related to running GAMESS.
NB! To discover what options the babel file conversion tool supports for your file format (gamin in this case), simply invoke the following command
babel -H gamin
Happy Conversion!
No comments:
Post a Comment