Forcefields exist where individual intramolecular parameter definitions (i.e. those provided by inter blocks) are not necessary. Instead, such parameters are constructed as and when necessary using a set of parameters that depend only on the atomtypes involved. These forcefields are so-called ‘rule-based’, and are often able to describe enormously varied systems from a small set of defining parameters.

Rule-based forcefields are defined in exactly the same way as normal forcefields, save for the lack of blocks that define intramolecular terms. Instead, the per-atomtype parameters must be provided instead, and for all atomtypes defined in the type section(s). This generator data is then used by the equations defined within the code to construct the necessary intramolecular terms when required. One or more blocks should be used to define this data for each atomtype.

Functions

In a rule-based forcefield all the useful function declarations which calculate the correct parameters (usually from values supplied in a block) must be made within a single function] block in the forcefield file. When calling the functions, Aten provides the necessary structure in which the generated parameters should be stores. In the case of the VDW-generating function, the actual atomtype structure which is missing the data is passed (see the FFAtom variable type). In the case of intramolecular interactions, Aten creates and passes a new, empty FFBound container in which the functional form of the interaction and the relevant data values should be set. A number of FFAtom references are also provided, corresponding to the atom types involved in the bound interaction, and from which the necessary data values may be retrieved using the relevant data accessors. For bound interactions it is not necessary to set the equivalent names of the involved atom types since this is done automatically.

The recognised function names and their arguments are as follows:

angleGenerator

Syntax:

int ( FFBound newdata, Atom i, Atom j, Atom k )

Called whenever function data for an unrecognised angle (between the atom types currently assigned to atoms i, j, and k) is needed. Generated parameters are placed in the passed newdata structure


bondgenerator

Syntax:

int ( FFBound newdata, Atom i, Atom j )

Called whenever function data for an unrecognised bond (between the atom types currently assigned to atoms i and j) is needed. Generated parameters are placed in the passed newdata structure


torsiongenerator

Syntax:

int ( FFBound newdata, Atom i, Atom j, Atom k, Atom k )

Called whenever function data for an unrecognised torsion (between the atom types currently assigned to atoms i, j, k, and l) is needed. Generated parameters are placed in the passed newdata structure


vdwgenerator

Syntax:

int ( FFAtom data )

Called whenever descriptive VDW data is missing from an atom type (which is passed into the function and has the resulting calculated data placed in it).