Any combination of linear constraints can be specified in the cell file.
We assign the index to run over all species present in the cell, the index to run over the ions in each species, and the index to run over the three spatial co-ordinates of an ion. The co-ordinate of the 2nd ion in the 3rd species is then . Associated with each of these degrees of freedom is a co-efficient . The n linear constraint can then be specified as
where the constant is determined by the initial conditions. Specification of the n linear constraint therefore reduces to specification of the co-efficients . These are input into the cell file in the following fashion.
%BLOCK IONIC_CONSTRAINTS
1 S j
1 S j
2 O j
2 O j
2 O j
%ENDBLOCK IONIC_CONSTRAINTS
For two constraints, one involving two sulfur ions, and another involving three oxygen ions. All coefficients not specified are assumed to be zero.
The first column in the block gives a unique number to the constraint specified. The second specifies the species by either atomic symbol (S or O in the above example) or atomic number. The third column is the index within a species . The co-efficients of the three spatial co-ordinates for this ion under the current constraint are then specified.
As an example, let us consider the case of restricting a single ion to move along along a plane parallel to . The normal to this plane is and our constraint is that the dot product of this normal with the position vector of the ion in question is zero. If this is the second ion in the fourth species then
In this trivial example, we can see that we need (if the fourth species is say, sulfur)
%BLOCK IONIC_CONSTRAINTS 1 S 2 -1 1 0 %ENDBLOCK IONIC_CONSTRAINTS
to satisfy the above equation.
A variety of constraints can be specified in this fashion. For simplicity, a special cell file keyword is provided to fix the centre of mass in the calculation.
fix_com = true
It is possible to fix the positions of all ions and hence only conduct dynamics for the cell degrees of freedom using the following.
fix_all_ions = true
Similarly, it is possible to specify that all cell degrees of freedom remain fixed.
fix_all_cell = true
Fixing both the cell and ionic degrees of freedom in this way will eliminate all motions and will hence return an error.
Non-linear constraints, such as those used to fix the distance between two ions, are not yet supported. Constraints on individual cell degrees of freedom are also not yet supported.