RMC++ in short 

The spatial distribution of atoms and
molecules in a disordered material is described by the socalled partial pair
correlation functions ( Fig. 1 ).
Fig 1: Def. of partial pair correlation functions
The structure can be probed by the
diffraction (elastic scattering) of waves (neutrons or Xray) of adequate wavelength
. The structure factors are obtained by sineFourier transform from the partial
pair correlation functions:
and the diffracted intensity
is a linear combination of the structure factors, weighted by the
concentrations c and scattering lengths b:
Direct inversion of this inverse problem needs several measurements
with isotopic substitution to disentangle the different partials. Furthermore,
it is plagued with the usual problems of instability, over and
underdetermination, and the Fourier ripples due to truncated Qrange (Fig 2).
Fig 2: forward and inverse problems
One alternative solution to direct
inversion, is to explore the parameter space and solve the direct problem as
often as required (Fig.3 ).
Fig 3: repeated computation of the forward problem
In MCGR [Monte Carlomodelling
of G(r)], the parameter space consists in the discretised pair correlation
functions. This technique allows to model partials while avoiding some of the
usual pitfalls of direct inversion (still, it does not guarantee that the
partials are physically sound).
Reverse Monte Carlo (RMC) goes one step further and considers the positions
of a set of N atoms (the configuration) as the parameter space, i.e.
it will derive a set of coordinates of the N atoms of the configuration that is
in agreement with the data ( Fig 4).
Systematic or exhaustive exploration of the
parameter space is ruled out by its mere dimension, and therefore a more
efficient way of sampling is needed in order to converge towards one
solution.
Both MCGR and RMC are based on the Metropolis algorithm , i.e. the
parameter space is explored by a `guided' randomwalk. In short, the acceptance
of generated random moves in the parameter space is defined by the agreement of
the corresponding calculated data with the experimental data ( Fig 5).
Fig 5: Flowchart of the metropolis algorithm
In `standard' RMC++ (as in the existing
RMCA) the random move in the parameter space consists in the displacement of one
atom of the configuration. The atom moved, as well as the amplitude and the
direction of the move are defined randomly (within some predefined range).
One essential additional component in RMC is the introduction of constraints.
The Metropolis algorithm indeed produces solutions with the largest amount of
disorder, for a given set of constraints (including the Chi Squared).
Constraints can be introduced at 2 stages in the algorithm:
Individual molecules can
also be mimicked by imposing a distance range between defined atoms in the
configuration (the socalled fixed neighbour constraints  FNC ).
The flowchart of the `standard' RMC algorithm appears in Fig 6.
Fig 6: Flowchart of the RMC algorithm
For more details, look at the references.
RMC implementations 
RMC++ should look very familiar to RMCA users, since it uses the same
input and similar output format.
Look at the examples to see what
can be done with RMC++, and for the performance comparison with RMCA.
Look at the manual
for details concerning input and output.
Last modified 21/06/2010) by Orsolya Gereben
(comments welcome!)