Constraints and internal coordinates (see below) can be linear combinations of bonds, angles etc. The latter, called here primitive internal coordinates, can be specified before the constraints definition, or directly inside. The general definition of a primitive coordinate is:

`PRIMITIVE`,[`NAME=]`*symbolic name*, *explicit definition;*

or

`PRIM`,[`NAME=]`*symbolic name*, *explicit definition;*

Here *symbolic name* is the name given to the primitive coordinate
(if omitted, it will be generated automatically). This name is needed for further reference of this
primitive coordinate.

*explicit definition* has the form:

*type,atoms*

*type* can be one of the following:

`BOND`- Bond length, defined by 2 atoms.
`ANGLE`- Bond angle, defined by 3 atoms (angle 1-2-3).
`DIHEDRAL`- Dihedral angle, defined by 4 atoms (angle between the planes formed by atoms 1,2,3 and 2,3,4, respectively).
`OUTOFPLANE`- Out-of-plane angle, defined by 4 atoms (angle between the plane formed by atoms 2,3,4 and the bond 1-4).
`DISSOC`- A dissociation coordinate, defined by two groups of atoms (Not permitted with constraints).
`CARTESIAN`- Cartesian coordinates of an atom.

For all types except `DISSOC` and `CARTESIAN`, atoms are given as:

`ATOMS=`[*a1,a2,a3,...*]

where the number of atoms required varies with *type* as specified above,
and the atomic names
*a1,a2,a3,...* can be either atomic tag names from the Z-matrix input, or integers
corresponding to Z-matrix rows. Note that the square brackets are required here and do not indicate optional input.

For `DISSOC` the specification is as follows:

`DISSOC,GROUP1=`[*a1,a2,...*],`GROUP2=`[*b1,b2,...*];

The corresponding internal coordinate is the distance between the centres of mass of the two groups.

For `CARTESIAN` the definition is

`CARTESIAN`, *I, atom;*

where *I* can be one of `X,Y,Z` or 1,2,3 and *atom* can be a z-matrix atom name or an integer referring to the z-matrix row.

With this definition, the constraints are defined as

`CONSTRAINT`,[`VALUE=`]*value*,[*unit*],[[`FACTOR=`]*fac*,*prim*,[[`FACTOR=`]*fac*],*prim,...;*

where *value* is the value imposed to the constraint, and
*prim* is either the name of the primitive defined before this constraint, or an explicit definition; and *fac* is a factor
of the corresponding primitive in the constraint. If *fac* is omitted it is taken to be 1.

If *value* is specified in `Angstrom` or `Radian`, *unit* must be given.

Examples for HO in symmetry:

Constraining the bond angle to 100 degrees:

`constraint,100,deg,angle,atoms=[h1,o,h2];`

which is equivalent to

`primitive,a1,angle,atoms=[h1,o,h2];`

`constraint,100,a1;`

Keeping the two OH distances equal:

`constraint,0,bond,atoms=[h1,o],-1.,bond,atoms=[h2,o];`

which is equivalent to

`primitive,b1,bond,atoms=[h1,o];`

`primitive,b2,bond,atoms=[h2,o];`

`constraint,0,b1,-1.,b2;`

molpro@molpro.net 2018-12-13