Molecular RMC++ with FNC


This page describes the implementation of RMC_POT++ with the molecular move option.

 Moving one molecule instead of one or more atom at each step

 In standard RMC, each step in the random walk of the Metropolis algorithm consists in the move of one or more randomly chosen atom.
This is suitable, if the molecules of the material one is trying to model are flexible enough for such displacements to be physically acceptable.
However there are cases were the geometry of the molecules is known a priori, furthermore, there are also cases were this geometry is not much flexible. As a result,

The solution to get out of this situation is not to move just one atom at a time, but the whole molecule, while keeping its geometry.

Thanks to the fixed-neighbour constraints (FNC) option, individual atoms can be 'linked' to define molecules within a configuration. Furthermore, RMC++ has been implemented in a way that the simultaneous move of several atoms is possible.

Note that it does not make much sense to move randomly several individual atoms at the same time. The result would not be different than making the several individual moves sequentially. Multiple atoms moves only make sense if groups of atoms are moved in some defined way.

It must be noted that in the whole algorithm, the only step that is modified by this 'collective displacement' is the move. Calculation of distances and checking of constraints are not affected.

As a result, the change from 'individual atomic move' to 'molecular' move requires only the modification of a few routines in the whole RMC++ code.

It must be noted however, that these moves are custom made, i.e for different molecules one might define different moves, translations along preferred directions, rotations along preferred axes, etc... Each custom move requires the implementation of the corresponding Move function in the code (and hence a little bit of programming that requires some knowledge of how RMC++ is implemented).

Some example of custom moves are shown below.



C2Cl4 is a rigid, flat molecule for which individual atomic moves are prohibitively small if an acceptable molecular geometry is to be kept. On the other hand, if the whole molecule is to be moved one can define three preferential axes for rotations and translations as shown below.

Note that the definition of specific directions usually requires making a distinction between atoms even of identical atomic species within the molecule. The geometry is defined in the FNC file by setting as many as necessary FNC links between atoms of the same molecule. The FNC settings for C2Cl4 are shown below. Note also that the numbering of constraints defined in the FNC file are completely independent from the atomic types that appear in the main RMC routine for computing the partials and the weighting of the different structure factors.

In this particular case, some FNC constarints are unnecessarily redundant, but the main point in the FNC file is to define the sets of neighbours that make up a molecule. In this particular case, it is essential that each atom has 5 neighbours. Note also that the implementation of the molecular network in the *.cfg and in the *.fnc files must be known in order to program the custom move.


The shape of the CCl4 molecule can be well defined by a set of FNC constraints. Depending on the level of flexibility that one gives to the molecule, individual atomic moves can be acceptable or not. Note that RMCA-type individual atom moves can also be implemented within the custom molecular move (molecules have a defined shape with some flexibility).
In the case of CCl4, one can define many specific directions, or decide that there is no a priori preferred direction for rotations and translations, i.e. they can be performed along random axes.


The shape of the H2O molecule is also well defined by FNC constraints alone. The figure below indicates what kind of flexibility some FNC ranges imply.


Molecular move allows much more rigidity for the molecule, while allowing the configuration to evolve.
Additionally, it is possible to define preferential axis of rotation and translation for the molecular move, or, alternatively to choose randomly these directions.


Finally, CS2 seems to be a particularly good example for applying the molecular option of RMC++.
Indeed, this molecule has the structure of a 'rod': the three atoms are aligned. Defining the alignment with FNC constraints alone would imply either very small individual atomic move amplitudes, or alternatively, a very loose alignment, as seen below.

Molecular move allows both molecular rigidity and large move amplitude so that the configuration evolves.


It is clear, that while moving whole molecules rather than single atoms solves some problems, it also yields additional difficulties. The first obvious problem is space, i.e. space to move whole molecules. Indeed, at the densities of most materials for which RMC is of some use, molecules will 'bump' into each other very easily, and that puts very strong limitations to the move amplitudes. There is no immediate answer to this problem. Getting closer to reality by e.g. moving several molecules at a time, is just a change of scale...

 Example routines

Hereafter you can find a set of custom move routines that have been designed for CCl4, C2Cl4 and H2O.

RMC_POT++ can handle both atomic and molecular moves as well.

The download version on downloads page includes the makemovecus.cpp source file which contains the custom routines for the CCl4 molecular RMC++. See the manual for details.

Additional *.cus input parameter file

The free parameters that may be needed in the implementation of the custom move are stored in a file with file name*.cus, which is read at the start of the run. The content of this file depends on the custom move and the reading procedure is part of the constructor that is implemented in the makemovecus file.

Example files to download

There are a set of custom files for molecular RMC++ available for download:

Top of page

Last modified 30/06/2010 by Orsolya Gereben