Skip to main content
`Ctrl`+`K`

# GAMESS-US

GAMESS-US is a computational chemistry software package based on gaussian basis functions.

## Setup

Ask your systems administrator to install GAMESS-US for you, or obtain it yourself from the GAMESS-US download page. Note that while GAMESS-US is available at no cost (including its source code), it is not distributed under an open source license, thus you are not permitted to redistribute copies of GAMESS-US or its source code.

GAMESS-US is distributed with a `rungms` script to run calculations. This script must be customized for your computer or cluster. ASE expects that a properly customized version of this `rungms` script will be present in your `$PATH`. The default argument to run GAMESS-US in ASE is:

    rungms PREFIX.inp > PREFIX.log 2> PREFIX.err

The default `rungms` script can be instructed to run across a number of CPU cores through the following syntax:

    rungms PREFIX.inp <VERSION> <NUMBER_OF_CORES> <CORES_PER_NODE> [<NUMBER_OF_NODES>]

For example, if you want to run a calculation on 8 cores, you might set the `ASE_GAMESSUS_COMMAND` environment variable to the following:

    rungms PREFIX.inp 00 8 > PREFIX.log 2> PREFIX.err

Alternatively, this command can be passed as a string directly to the `GAMESSUS` Calculator with the `command` keyword argument.

## Examples

Here is a command line example of how to optimize the geometry of a water molecule using the PBE density functional:

    $ ase build H2O | ase run gamess_us -p xc=PBE -f 0.02
    $ ase gui stdin.traj@-1 -tg "a(1,0,2),d(0,1)"
    102.59049267228833 1.0079388022627982

An example of creating a GAMESS-US calculator using the python interface is:

    from ase.calculators.gamess_us import GAMESSUS

    calc = GAMESSUS(contrl=dict(scftyp='rhf', dfttyp='b3lyp', ispher=1),
                    dft=dict(dc=True, idcver=3),
                    basis=dict(gbasis='ccd'))

This will run a B3LYP/cc-pVDZ calculation with Stefan Grimme’s DFT-D3 empirical dispersion correction.

## Parameters

GAMESS-US organized keywords into blocks delimited by `$<BLOCKNAME>` and `$END`. The `GAMESSUS` calculator represents these blocks as dictionaries. For example, consider the following block of input:

    $CONTRL SCFTYP=RHF DFTTYP=M06 $END
    $SYSTEM MWORDS=4 $END
    $BASIS
      GBASIS=N31
      NGAUSS=6
      NDFUNC=1
    $END
    $DFT NRAD=96 NLEB=1202 $END

Note that keywords within a block can be on the same or different lines. Equivalent input will be generated by invoking the `GAMESSUS` calculator with the following arguments:

    calc = GAMESSUS(contrl=dict(scftyp='rhf', dfttyp='m06'),
                    system=dict(mwords=4),
                    basis=dict(gbasis='n31', ngauss=6, ndfunc=1),
                    dft=dict(nrad=96, nleb=1202))

Note that though GAMESS-US is case insensitive, Python is case sensitive. The `GAMESSUS` calculator expects lowercase keywords.

Most input files can be constructed in this way. The `GAMESSUS` calculator also has several special keywords, which are described in the table below

keyword | type | default value | description
--- | --- | --- | ---
`label` | `str` | `'gamess_us'` | Used to name input and output files.
`userscr` | `str` | `None` | The `USERSCR` directory defined in `rungms`. If not provided, ASE will attempt to automatically determine the correct value from your `rungms` script. This is not guaranteed to work, in which case you will need to manually provide the proper location.
`basis` | `dict` | See description | Specifies the arguments that go into the `$BASIS` block in the GAMESS-US input file. Defaults to `{'gbasis': 'n21', 'ngauss': 3}`, i.e. 3-21G. Alternately, `basis` accepts a dictionary of literal basis set definitions where the keys correspond to element type or atom index.
`ecp` | `dict` | `None` | A dictionary of literal ECP definitions. Keys should be either an element symbol or an atom index.

class ase.calculators.gamess_us.GAMESSUS(restart=None, ignore_bad_restart_file=<object object>, label='gamess_us', atoms=None, command=None, userscr=None, **kwargs)

  GAMESS-US keywords are specified using dictionaries of keywords. For example, to run a CCSD(T)/cc-pVDZ calculation, you might use the following arguments:

      >>> calc = GAMESSUS(contrl={'scftyp': 'rhf', 'cctyp': 'ccsd(t)',
      >>>                         'ispher': 1, 'runtyp': 'energy'},
      >>>                 basis={'gbasis': 'CCD'})

  This will create an input file that looks like the following:

      >>>  $CONTRL
      >>>   SCFTYP=RHF
      >>>   CCTYP=CCSD(T)
      >>>   ISPHER=1
      >>>   RUNTYP=ENERGY
      >>>  $END
      >>>
      >>>  $BASIS
      >>>   GBASIS=CCSD
      >>>  $END

  See the INPUT.DOC file provided by GAMESS-US for more information.

  If \(runtyp\) is not specified, it will be set automatically.

  If no basis is specified, 3-21G will be used by default. A dictionary containing literal per-index or per-element basis sets can be passed to the \(basis\) keyword. This will result in the basis set being printed in the $DATA block, alongside the geometry specification. Otherwise, \(basis\) is assumed to contain keywords for the $BASIS block, such as GBASIS and NGAUSS.

  If a multiplicity is not set in contrl[‘mult’], the multiplicity will be guessed based on the Atoms object’s initial magnetic moments.

  The GAMESSUS calculator has some special keyword:

  xc: str

    The exchange-correlation functional to use for DFT calculations. In most circumstances, setting xc is equivalent to setting contrl[‘dfttyp’]. xc will be ignored if a value has also been provided to contrl[‘dfttyp’].

  userscr: str

    The location of the USERSCR directory specified in your \(rungms\) script. If not provided, an attempt will be made to automatically determine the location of this directory. If this fails, you will need to manually specify the path to this directory to the calculator using this keyword.

  ecp: dict

    A per-index or per-element dictionary of ECP specifications.