Introduction to the Program FULLPROF: Refinement of Crystal and

Magnetic Structures from Powder and Single Crystal Data

Juan Rodríguez-Carvajal

Laboratoire Léon Brillouin (CEA-CNRS), CEA/Saclay, 91191 Gif sur Yvette Cedex,
FRANCE.


In these notes an introduction to the program FullProf is presented. After a brief introduction
summarizing the history of the program we present the main elements of the Rietveld method
and how to use the program in routine work for refining crystal and magnetic structures. The
most specialized topics (microstructure effects, flipping ratio refinements, the use of special
form-factors, time of flight neutron powder diffraction) will not be treated here. A full
example of Simulated Annealing run, for localizing hydrogen atoms using neutron powder
diffraction, is discussed in more detail. These notes have been written taking parts of the
manual and other tutorial documents that are available in the FullProf Web site.

Introduction

The program FullProf has been mainly developed to perform Rietveld analysis [1] of neutron
or X-ray powder diffraction data collected at constant, or variable, step in scattering angle 2θ
or using the technique of neutron time-of-flight (TOF). Single Crystal refinements can also be
performed alone or in combination with powder data. However, the program has some
“structure determination” capabilities by using the Simulated Annealing method for global
optimization.
The first versions of the program FullProf were based on the code of the DBWS program [2],
which was also a major modification of the original Rietveld-Hewat program. The program
FullProf has been re-written using the full capabilities of the new Fortran 95 standard during
1997-1998. It is progressively being transformed in a program based in the Crystallographic
Fortran 95 Modules Library [3]. The program works with some allocatable arrays so the user
can directly control the dimensions of important arrays at run time. In this paper we shall
describe some elementary points concerning the methods implemented in the program and
how to use it. For further details the user should consult the manual and tutorials. The
Windows version of the program and all the suite of programs related to FullProf are now
distributed within the FullProf Suite installer (setup_FullProf_Suite.exe). This installer,
additional documents and tutorials, can be found in the FullProf Web site [4].

The Rietveld Method

A powder diffraction pattern can be recorded in numerical form for a discrete set of scattering
angles, times of flight or energies. We will refer to this scattering variable as T . Then, the
experimental powder diffraction pattern is usually given as two arrays { }
1,...,
,
i i
i n
T y
=
. In the
case of data that have been manipulated or normalized in some way the three arrays
{ }
1,...,
, ,
i i i
i n
T y σ
=
, where
i
σ is the standard deviation of the profile intensity
i
y , are needed in
order to properly weight the residuals in the least squares procedure. The profile can be
modeled using the calculated counts
ci
y at the ith step by summing the contribution from
neighboring Bragg reflections plus the background:


, , ,
h
( )
h h c i i i
y S I T T b
φ φ φ
φ
= Ω − +
∑ ∑
(1)

The vector h (=H, reciprocal lattice vector, or H+k for magnetic structures of propagation
vector k) labels the Bragg reflections, the subscript φ labels the phase and vary from 1 up to
the number of phases existing in the model. In FullProf the term phase is synonymous of a
same procedure for calculating the integrated intensities
,
I
φ h
. This includes the usual
meaning of a phase and also the case of the magnetic contribution to scattering (treated
usually as a different phase) coming from a single crystallographic phase in the sample. The
general expression of the integrated intensity is:


{ }
2
,
,
h
h
I L APC F
φ
φ
= (2)

For simplicity we will drop the φ -index. Sometimes we will refer to the whole arrays
{ }
i
y and { }
ci
y as
obs
y and
calc
y respectively. The meaning of the different terms appearing in
(1) and (2) is the following:
• S
φ
is the scale factor of the phase φ
• L
h
contains the Lorentz, polarization and multiplicity factors
• F
h
is the structure factor (crystal structures) or the modulus of the magnetic
interaction vector (magnetic structures).
• A
h
is the absorption correction
• P
h
is the preferred orientation function
• Ω is the reflection profile function that models both instrumental and sample
effects

h
C includes special corrections (non linearity, efficiencies, special absorption
corrections, extinction, etc)

i
b is the background intensity

In the following sections we discussed the different terms in more detail. The Rietveld
Method consist of refining a crystal (and/or magnetic) structure by minimizing the weighted
squared difference between the observed { }
1,...,
i
i n
y
=
and the calculated (1) pattern
{ }
,
1,...,
( ) α
c i
i n
y
=
against the parameter vector
1 2 3
( , , ,... ) α
p
α α α α = . The function minimized in
the Rietveld Method is:


{ }
2
2
,
1
( ) α
n
i i c i
i
w y y χ
=
= −

(3)

with
2
1
i
i
w
σ
= , being
2
i
σ the variance of the "observation"
i
y . In more complex cases the user
may consider several diffraction patterns, or some chemical constraints. For those cases the
general expression of the function to be minimized is:


{ } { }
2
2
2 2 2
2
1 1 1 1
1
( ) ( ) α α
N N n m
T P P G P i i ci j cj
P p i j gj P
w y y c g g χ ω χ χ ω
σ
= = = =
(
= + = − + −
(
¸ ¸
∑ ∑ ∑ ∑
(4)

Where
2
P
χ and
2
G
χ are the chi-square of the pattern P and the chi-square of soft constraints.
The weight factors
p
ω are provided by the user and are internally normalized in order to get
1
1
N
P
P
ω
=
=

, for the N patterns. The quantity
j
g is the prescribed value of a constraint (distance,
angle, valence, magnetic moment, etc) with standard deviation
gj
σ .The smaller the value of
gj
σ the higher is the strength of the constraint. The calculated value of the constraint ( ) α
cj
g
is performed as a function of a subset of components of the vector parameter α.The
normalization constant c is taken as the current value of the global reduced chi-square for all
the diffraction patterns. For simplicity we shall consider the expression (3) to explain some
standard points concerning the least squares optimization. If the optimum set of free
parameters is
opt
α ,the necessary condition for a minimum of (3) is that the gradient of
2
χ should be zero:
2
0
opt
χ | | ∂
=
|

\ .
α=α
α

A Taylor expansion of ( )
ic
y α around an initial guess
0
α allows the application of an iterative
process. The shifts to be applied to the parameters at each cycle for improving
2
χ are
obtained by solving a linear system of equations (normal equations)

0
A b = δ
α
(5)
where the components of the p p × matrix A and vector b in the Gauss-Newton algorithm,
used within FullProf, are given by the expressions:
, 0 , 0
, 0
,
( ) ( )
( )
( )
c i c i
kl i
i k l
c i
k i i c i
i k
y y
A w
y
b w y y
α α
α
∂ ∂
=
∂ ∂

= −



α α
α
(6)
The shifts of the parameters
0
α
δ obtained by solving the normal equations are added to the
starting parameters giving rise to a new set
0
1 0
= +δ
α
α α . The new parameters are considered
as the starting ones in the next cycle and the process is repeated until a convergence criterion
is satisfied. The shifts applied to the current parameters may be pre-multiplied by a user
defined factor that depend on each individual parameter (through the codeword) and a
relaxation factor. The standard deviations of the adjusted parameters are calculated by the
expression:
1 2
( ) ( ) A
k k kk
a
ν
σ α χ

= (7)
Where the reduced chi-square is defined as:
2
2
n - p
ν
χ
χ = (8)
The quantity a
k
is the coefficient of the codeword for the parameter
k
α . The
2
ν
χ quantity used
in the above formula is always calculated for the points in the pattern having Bragg
contributions, thus σ
i
could be greater than the corresponding value calculated with other
programs. In FullProf the quantity
2
ν
χ is also calculated for all points considered in the
refinement, so the user can easily re-calculate the alternative value of the standard deviation.
In normal least square refinements the weighting scheme is based in fixed variances of the
profile intensities. This is appropriate when the statistics is good enough to be considered as
Gaussian. For low counting statistics a maximum likelihood refinement is more appropriate.
This is equivalent to calculate the variance according to the model instead of using
experimental fixed variances that are very bad estimated when low counting rate is dominant.
In such a case the weights of the observations are calculated at each cycle as:
2
,
1
i calc i
w σ = supposing a Poissonian distribution and correcting for eventual normalization
factors used in the input data file to estimate the experimental variances.

Single Crystal, or Integrated Intensity, data

The program FullProf is also able to refine the crystal and magnetic structure using single
crystal data, even if they correspond to a twinned crystal. The method is completely analogue
to the Rietveld method, except that is more simple because all the complexities related with
background and peak shapes are absent. The function optimized when using integrated
intensities is:

2 2 2
, ,
( )
n obs n calc k
n k
M w G G = −
∑ ∑
(9)
The index n runs over the observations (1,..N
obs
). The index k runs over the reflections
contributing to the observation n (in case of twinned crystals or overlapped integrated
intensities coming from powder data).
2
G is the square of the structure factor (intensity
corrected for Lp-factor). In case of powder diffraction
2 2
( )
k k k
G I jLpF = = , so clusters of
integrated intensities are used.


Getting started with the Rietveld method using FullProf

The minimal input for the program FullProf is a file of extension “.pcr”, which called
hereafter a PCR file, containing the structural and peak shape information. The code of the
file (let us call it CODFIL for CODFIL.pcr) serves for naming different output files
distinguished by their extension. The PCR file may just be the unique input when a simulation
is performed. For treating experimental data, at least a file containing the profile intensities,
or the reflection indices and structure factors for single crystals, is needed. The extension of
this file is usually “.dat” but any other extension is admissible. Below we give a description
of the examples contained in the file pcr_dat.zip (this file is accessible in the site given in
[4]). We shall discuss some elementary rules and comments about the problems the user can
experience in running the program. The Commission on Powder Diffraction of the
International Union of Crystallography has published some guidelines for Rietveld refinement
[5] that can be used to complete the rules provided in this paragraph.
Rietveld refinement has nothing to do with structure determination. To start refining a
structure an initial model (even if incomplete) is necessary. This model is supposed to be
obtained from a crystal structure solver program or by any other mean.
For starting a profile refinement from the scratch, the best is to copy one of the PCR files
accompanying the distribution of FullProf, and modify it according to the user’s case: x-ray
or neutron diffraction, crystal or magnetic structure refinement, synchrotron, TOF neutrons,
etc. The provided PCR files in the archive pcr_dat.zip can be used as templates. Of course the
closer to the user’s case is the initial PCR file the easier is to modify it. An important aspect is
the format of the profile intensities data file that must be correctly given before attempting
any kind of refinement.
The user must be aware of the way he(she) can control the refinement procedure: the number
of parameters to be refined, fixing parameters, making constraints, etc. The control of the
refined parameters is achieved by using codewords. These are the numbers
x
C that are entered
for each refined parameter. A zero codeword means that the parameter is not being refined.
For each refined parameter, the codeword is formed as:
( ) (10 )
x
C sign a p a = +
where p specifies the ordinal number of the parameter x and a (multiplier) is the factor by
which the computed shift (see equation 5) will be multiplied before use. The calculated shifts
are also multiplied by a relaxation factor before being applied to the parameters.
Recently, we have developed a Windows GUI, called EdPCR, to control the PCR file, so that
the user can control everything without been concerned with numbering the different
parameters. All this part is automatically performed by EdPCR, by using the mouse and
clicking on the appropriate boxes. To access EdPCR one can use a button existing in the
toolbar of the visualizing program WinPLOTR [6]. The menu item “Templates” in EdPCR
allows to import CIF or SHELX files to create, from the scratch, a PCR file that can be
modified afterward.

A stepwise method for Rietveld refinement

Although the principles behind the Rietveld profile refinement method are rather simple, the
use of the technique requires some expertise. This results merely from the fact that Rietveld
refinement uses a least-squares minimisation technique which, as any local search technique,
gets easily stuck in false minima. Besides, correlation between model parameters, or a bad
starting point, may easily cause divergence in early stages of the refinement. All these
difficulties can actually be readily overcome by following a few simple prescriptions:
• Use the best possible starting model: this can be easily done for background
parameters and lattice constants. In some cases, in particular when the structural
model is very crude, it is advisable to analyze first the pattern with the profile
matching (Le Bail) method in order to determine accurately the profile shape function,
background and cell parameters before running the Rietveld method.
• Do not start by refining all structural parameters at the same time. Some of them affect
strongly the residuals (they must be refined first) while others produce only little
improvement and should be held fixed till the latest stages of the analysis.
• Before you start, collect all the information available both on your sample
(approximate cell parameters and atomic positions) and on the diffractometer and
experimental conditions of the data measurement: zero-shift and resolution function of
the instrument, for instance. Then a sensible sequence of refinement of a crystal
structure is the following:

1. Scale factor.
2. Scale factor, zero point of detector , 1rst background parameter and lattice
constants. In case of very sloppy background, it may be wise to actually refine
at least two background parameters, or better fix the background using linear
interpolation between a set of fixed points provided by user.
3. Add the refinement of atomic positions and (eventually) an overall Debye-
Waller factor, especially for high temperature data.
4. Add the peak shape and asymmetry parameters (or better: use an external
instrumental resolution file adapted to the diffractometer providing the data).
5. Add atom occupancies (if required).
6. Turn the overall temperature factor into individual isotropic thermal
parameters.
7. Include additional background parameters (if background is refined).
8. Refine the individual anisotropic thermal parameters if the quality of the data is
good enough.
9. In case of constant wavelength data, the parameters to correct for instrumental
or physical 2θ aberrations with a COS or SIN angular dependence.
10. Microstructural parameters: size and strain effects.

In all cases, it is essential to plot frequently the observed and experimental patterns. The
examination of the difference pattern is a quick and efficient method to detect blunders in the
model or in the input file controlling the refinement process. I may also provide useful hints
on the best sequence to refine the whole set of model parameters for each particular case.
When large and unrealistic fluctuations of certain parameters occur from one cycle to the
next, examine the correlation matrix: if large values (say larger than 50%) are observed,
refine separately the corresponding parameters, at least in the early stages of the refinement.
Finally it must be remembered that there is a limit to the amount of information that can be
retrieved from a powder diffraction pattern. Indeed structures with up to a hundred or more
structural parameters can be refined from neutron powder data but such refinements must be
performed with great care; for refinements involving a large number of variables the physical
significance of certain parameters must be carefully examined. For instance thermal and
profile parameters can become poorly defined and act as a dumping ground for systematic
errors; then it is preferable to fix their values to a physically reasonable number and exclude
them from the refinement.
When the uncertainty concerns the atomic parameters, it may help to provide some external
information to the program. This can be achieved for instance by using strict constraints. For
instance the displacement (thermal) parameters of chemically similar but crystallographically
distinct atoms may be constrained to be identical, or the occupancy of two distinct and partly
occupied sites of a structure may be compelled by the chemical analysis of the material. For
complex structures it may be necessary to use soft constraints on distances and angles, or
even rigid body constrains.
If there are difficulties from the very beginning (for instance a singular matrix at the first
refinement), start refining the scale factors only and examine the observed versus calculated
pattern using WinPLOTR. These will most of the time reveal a glaring blunder in the input
data (zero-shift, step size, angular limits etc).

Examples. Content of pcr_dat.zip

To test the installation of the program, or for training purposes, a list of complete examples
are provided together with FullProf. The content of the file pcr_dat.zip is now distributed
within the FullProf Suite installer. Anyway it can be obtained as a separate file in the same
area as the program.
The files contained in pcr_dat.zip have been selected in order to illustrate the use of FullProf
in a variety of situations. In no way the proposed models pretend to be the most adequate to
the data. In some cases there is a clear disagreement between the data and the model. The user
may try to improve the models including new parameters that have a clear physical relevance.
Increasing the number of parameters just for getting more nice fits may result in non sense
values. At present the files contained in the archive pcr_dat.zip are given in the following
table:

PCR Code Purpose Data File
Ce1 refinement of a CeO
2
standard ceo2.dat
Ce2 " "
Rutana Conventional X-ray diffraction pattern: Rutile+Anatase Rutana.dat
Tbbaco Conventional X-ray diffraction pattern: Tb
2
BaCoO
5
Tbbaco.dat
Tbba Conventional X-ray diffraction pattern: Profile Matching "
Tb Search for Tb,Ba and Co by Montecarlo with prev. output Tb.int
PbSOx Crystal structure refinement of PbSO
4
with X-rays Pbsox.dat
PbSO Profile matching to obtain an overlapped intensity file "
PbSOm Search for Pb by Montecarlo using previous output pbsom.int
Pb Profile matching test of PbSO4 neutron data Pbso4.dat
PbSO4 Crystal structure refinement of PbSO
4
"
PbSO4a Crystal structure refinement of PbSO
4
(anisotropic b's) "
Pb_ho Artificial multipattern refinement Pbso4.dat,Pbsox.dat,
Hobk.dat
Pb_sing Example of new format of PCR file adapted for multipattern
refinements
Pbso4.dat
Pb_san Example of Simulated Annealing: solves the structure of PbSO
4
Pb_san.int
C60s Compares C
60
x-tal data to form-factor SPHS sin(Qr)/Qr C60.int
C60 Refinement of C
60
x-tal data using symmetry adapted cubic
harmonics. Form-factor type SASH.
C60.int
Dy Four different ways of refining the crystal Dy.dat
Dya and magnetic structure of DyMn
6
Ge
6
"
Dyb "
Dyc "
Hocu Refinement of the magnetic structure of Ho
2
Cu
2
O
5
(D1B data) Hocu.dat
Hobb Refinement with integrated intensities (Nuc+mag) Hobb.int
Hob Montecarlo search for mag. moments in Ho2BaNiO5 "
Hobk1 Three different ways of refining the crystal Hobk.dat
Hobk2 and magnetic structure of Ho2BaNiO5 "
Hobk3 "
Cuf1k Refinement of crystal & magnetic structrure of CuF
2
.
Microstructural effects (D1A data)
Cuf1k.dat
Pb_san Example of Simulated Annealing: solves the structure of PbSO
4
Pb_san.int
La Two ways for strain refinement in La
2
NiO
4
(D1B) La.dat
Lab with low resolution neutron powder data "
Monte Montecarlo test with single crystal data Monte.int
Hmt Rigid body-TLS refinement of published single X-tal data Hmt.int
Urea Test Rigid body with satellites (simulated data) Urea.dat
Pyr Test Rigid body with general TLS refinement (sim. data) Pyr.dat
Ycbacu YBaCuO with Ca. Data from D1A Ycbacu.dat
Arg_si Corrected TOF data of Si from SEPD at Argonne Arg_si.dat
Cecoal TOF data from POLARIS at ISIS Cecoal
Cecua1 TOF data from POLARIS at ISIS Cecua1.dat
Lamn_3t2 Constant wavelenght neutron data from 3T2 (LLB) of LaMnO
3
Lamn_3t2.dat
Lamn_pol TOF data from POLARIS at ISIS on the RT phase of LaMnO
3
Lamn_pol.dat
Si3n4r Quantitative phase analysis. Two polymorphs of Si
3
N
4
. (Studvik) Si3n4r.dat
Sin_3t2 As above but data taken at 3T2 (LLB) Sin_3t2
Pb_san Example of Simulated Annealing: solves the structure of PbSO
4
Pb_san.int
Maghem Refinement of Fe
2
O
3
-Fe
3
O
4
at RT (D1A data) Maghem


In general, the user must first run the program to verify that the provided PCR files behave
correctly. After that, the user should make a copy of the control files for saving them before
running his(her) own options. The best way is to modify the given values for different sets of
parameters and run the program. The beginner must make extensive use of editor-plot cycles.
The plot of the file CODFIL.prf is of absolutely necessity for knowing the behavior of the
program under bad (or inaccurate) input parameters.

To use the above files for training, the inexperienced user must start with the simplest cases,
that is ce1.pcr and ce2.pcr used to process the file ceo2.dat. This file corresponds to a data
collection on cerium oxide with a laboratory X-ray powder diffractometer, using CuK
α

doublets. Other simple examples with conventional X-rays are: the rutile-anatase mixture, that
allow a quantitative analysis of the relative fraction of each component, and the diffraction
pattern of Tb
2
BaCoO
5
presenting micro-absorption effects that produce some negative
temperature factors. The user can modify the input file in order to input the micro-absorption
correction and look for the changes in the results. The next files to be processed are those of
PbSO
4
. The data file correspond to a laboratory X-ray diffraction pattern (pbsox.dat) and to a
neutron powder diffraction pattern (pbso4.dat) obtained on D1A (ILL) that was used in a
Round Robin on Rietveld refinement [7]. For a person working mainly with crystal structures
the next files to be studied are: ycbacu, hmt and urea for powder diffraction.

Some files to be used with single crystal data are also given: c60. The first one uses a
simplistic model (just a spherical shell) for describing the C
60
molecule that gives relatively
good results. The user can try this file as an example of special form factor refinement. The
free parameter is the radius of the C
60
molecule.

If the user is interested in magnetic structures it is worth to read the article [8], and references
therein, for an introduction to the way the formalism of propagation vectors is implemented in
FullProf, taking into account that slightly different conventions (see the mathematical section
of the manual) have finally been adopted concerning the sign of phases. The user can start
practicing with the rest of the files in the following order.

• la, lab: refinement of the low temperature phase crystal and magnetic structure of
La
2
NiO
4
. The data are from a medium-low resolution neutron powder diffractometer
(D1B at ILL). This phase present a microstrain that is refined using two equivalent
methods in the two files. The magnetic structure is very simple. A peak from an
impurity phase is near the first magnetic peak.
• The files hobb, hob, hobk1, hobk2, hobk3 concern the refinement of the crystal and
magnetic structures of Ho
2
BaNiO
5
at 1.5K, using different methods and conditions.
The user can verify that hob.pcr can solve the magnetic structure of Ho
2
BaNiO
5
just
testing random configurations. This is a very favorable case and this method cannot be
applied for general magnetic structure determination. The data are from D1B at ILL.
• Hocu: refinement of the magnetic structure of Ho
2
Cu
2
O
5
. The data have been taken on
D1B diffractometer at the ILL. Magnetic scattering dominates nuclear scattering. The
crystal structure cannot be refined with these data.
• Cuf1k: refinement of the magnetic structure of CuF
2
. The data have been taken on
D1A diffractometer when it was installed provisionally at the LLB. Nuclear scattering
dominates magnetic scattering. The diffraction pattern cannot be refined properly
without taking into account microstructural effects.
• The files dy, dya, dyb, dyc use different methods to refine the incommensurate
magnetic structure of DyMn
6
Ge
6
. This is a conical structure that can be refined using a
real space approach as in dy and dya or using Fourier components of the magnetic
moments, which is the general formalism of FullProf for handling magnetic
structures. This is the case of files dyb and dyc.

The only right way to learn about crystal and magnetic structure refinements is practicing
with real data as those given in the pcr_dat.zip archive, or better, with the data collected by
and of interest to the user.

Solving or completing structures by Simulated Annealing

An option for helping to solve crystal and/or magnetic structures has been implemented in
FullProf. This is a simulated annealing module able to handle two types of algorithms: fixed
and variable steps for generating new configurations. The simulated annealing technique [9]
works, at present, only with integrated intensities. A short report about the technique and the
implementation in FullProf may be found in reference [10], here we show just some examples
of using the method .
To solve a crystal or a magnetic structure a complete list of atoms with all their attributes
(thermal parameters, magnetic moments, etc) should be given as if everything were known.
An example of simulating annealing PCR file is given in Figure 1.
The use of codewords is totally supported so that any usual constraint may be used in the
search. Of course the initial values of the parameters are arbitrary provided the hard
constraints through the codewords are respected. In fact the meaning of the codewords is the
same as in least square refinements, the multipliers and signs are applied to the shifts with
respect to the previous values of the parameters. The scale factor may be treated automatically
so that no codeword should be given to this parameter.



Para-di-Iodo-Benzene (Sim.Annealing)
!
!Nat Dis Ang Pr1 Pr2 Pr3 Jbt Irf Isy Str Furth ATZ Nvk Npr More
6 0 0 1.0 0.0 0.0 4 4 0 0 0 0.00 0 0 0
!
P b c a <--Space group symbol
!Atom Typ x y z B Occ P6 THETA PHI Spc
! d theta phi X0 Y0 Z0 CHI P16:SAT
Pi1 I 0.17439 0.04548 -0.30989 0.00000 1.00000 1.00000 2.05548 0.06590 0
0.00 0.00 0.00 0.00 0.00 0.00 11.00 21.00
3.50000 -0.09100 -0.09100 0.00000 0.00000 0.00000 -2.62905 0.00000
0.00 0.00 0.00 0.00 0.00 0.00 31.00
Pi2 C 0.06946 0.01811 -0.12342 0.00000 1.00000 0
0.00 0.00 0.00 0.00 0.00
1.39400 -0.09100 -0.09100
0.00 0.00 0.00
. . . . . . . . . . . . . . . . . . .

! Limits for selected parameters (+ steps & BoundCond for SA):
1 0.0000 3.1416 0.5000 1 Theta
2 -3.1416 3.1416 0.5000 1 Phi
3 -3.1416 3.1416 0.5000 1 Chi
! T_ini Anneal Accept NumTemps NumThCyc InitConf
8.000 0.900 0.020 80 0 0
! NCyclM Nsolu Num_Ref Nscalef NAlgor
200 1 71 1 1

Figure 1: Part of a PCR file showing the use of the simulated anneling method to determine the
orientation of the molecule of I
2
C
6
D
4
. The center of the molecule is at the origin and only three
angles are needed to fix the position of the molecule in the unit cell.

The program recognizes the use of simulated annealing by putting the variable Nre equal to
the number of parameters to be eventually varied, and Cry =3 at the beginning of the PCR
file (see appendix of the manual for details).
In the example above the three angles (in radians) defining the orientation of the molecule are
selected as parameters 1, 2 and 3. The admissible range of values are given in a list followed
by an indicator telling to the program how to treat the boundaries. The number “1” following
the value of the initial step (0.5 radians) indicates that periodic boundary conditions are
applied.

The flag InitConf is important for selecting the treatment of the initial configuration. If
InitConf = 0 the initial configuration is totally random. If InitConf =1, the initial
configuration is the one given by the values of the parameters in the PCR-file. This last option
is useful when one tries to optimize an already good starting configuration, by controlling the
box limits and the steps.
The other critical point is to select between the two algorithms. This is controlled by the value
of the variable Nalgor. If its value is zero, the Corana [11] algorithm is selected. This
=> **** SIMULATED ANNEALING SEARCH FOR STARTING CONFIGURATION ****
=> Initial configuration cost: 77.53
=> Initial configuration state vector:
=> Theta Phi Chi
=> 1 2 3
=> 1.3807 2.4672 -3.0110
=> NT: 1 Temp: 8.00 (%Acc): 23.50 <Step>: 5.2360 <R-factor>: 44.4302
. . . . . . .
=> NT: 6 Temp: 4.72 (%Acc): 30.50 <Step>: 0.3496 <R-factor>: 23.8774
. . . . . . . .
=> NT: 11 Temp: 2.79 (%Acc): 39.33 <Step>: 0.1440 <R-factor>: 13.4990
. . . . . . . .
=> NT: 21 Temp: 0.97 (%Acc): 38.50 <Step>: 0.0530 <R-factor>: 6.3417
. . . . . . . .
=> NT: 33 Temp: 0.27 (%Acc): 36.17 <Step>: 0.0179 <R-factor>: 4.3854

=>BEST CONFIGURATIONS FOUND BY Simulated Annealing FOR PHASE: 1
=> -> Configuration parameters ( 71 reflections):
=> Sol#: 1 RF2= 3.928 ::
=> Theta Phi Chi
=> 1 2 3
=> 0.9401 0.1464 2.7477

=> CPU Time: 25.177 seconds
=> 0.420 minutes

Figure 2: Simplified screen capture of the FullProf output when running in the
simulating annealing mode for the example of Figure 1. The first picture of the structure
corresponds to the starting configuration. The final result is also displayed.
algorithm does not use fixed steps for moving the parameters defining the configuration,
instead the program starts by using then whole admissible interval as initial step for all
parameters and then adapt progressively their values in order to maintain an approximate rate
of accepted configurations between 40% and 60%. If Nalgor =1 the same algorithm is used
but the starting steps are those given in the file. For Nalgor =2, the normal SA algorithm
(fixed steps) is used. The last method, used with appropriate boundary box for parameters
and InitConf =1, is better when one tries to refine a configuration without destroying the
starting configuration.
Within the distribution of FullProf there is a simple example of simulating annealing work
using neutron diffraction data from D1A on lead sulfate PbSO
4
. The file is Pb_san.pcr, where
the user finds a particular case of how to prepare a PCR file adapted for simulated annealing.
In this example the atoms are treated independently using the correct space group and an
artificial constraint is used: several atoms are constrained to have the same y fractional
coordinate. We know that all these atoms are in a special position of the Pnma space group (y
should be ¼ or ¾), but the file is prepared in such a way as to illustrate the use of constraints.
Starting from a random configuration for all the free parameters (including the special y’s) the
program finds progressively the good atom positions when the appropriate values of the
control parameters are used. The user may play with the different parameters (starting
temperature, number of Monte Carlo cycles per temperature, type of algorithm, number of
reflections to be used, etc) to experience when the method is able to solve the PbSO
4

structure.

Calculated Neutron powder diffraction
pattern without Hydrogen atoms
Where are the hydrogen atoms?
Calculated Neutron powder diffraction
pattern without Hydrogen atoms
Where are the hydrogen atoms?

Figure 3: Comparison of the calculated versus observed neutron powder
diffraction pattern of Sr acid oxalate hydrate, using the represented crystal
structure solved by X-ray powder diffraction [13].
Another interesting case is that of searching hydrogen (deuterium) atoms when the rest of
atoms are already known. We shall take as an example the case of Sr acid oxalate hydrate that
was solved by conventional Fourier synthesis [12, 13].

The non hydrogen atoms structure was solved ab initio from X-ray powder diffraction using
direct methods [13], but the calculated neutron powder diffraction pattern without hydrogen
atoms was very poor (see Fig. 3). A profile matching refinement of the neutron diffraction
!Nat Dis Ang Pr1 Pr2 Pr3 Jbt Irf Isy Str Furth ATZ Nvk Npr More
14 0 0 0.0 0.0 1.0 0 4 0 0 0 966.691 0 5 0
!
P 21/n <--Space group symbol
!Atom Typ X Y Z Biso Occ In Fin N_t Spc /Codes
Sr SR 0.87930 0.41798 0.73560 1.55853 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C1 C 0.63200 0.23920 0.57800 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C2 C 0.58300 0.51640 0.09300 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C3 C 0.64800 0.27780 0.34700 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
O1 O 0.62200 0.22870 0.15700 1.24468 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
. . . . . . . . . .
O7 O 0.69400 0.34880 0.32900 1.24468 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
H1 D 0.17449 0.26512 0.31765 2.00000 1.00000 0 0 0 0
11.00 21.00 31.00 0.00 0.00
H2 D 0.41474 0.05317 0.39374 2.00000 1.00000 0 0 0 0
41.00 51.00 61.00 0.00 0.00
H3 D 0.14942 0.30371 0.01023 2.00000 1.00000 0 0 0 0
71.00 81.00 91.00 0.00 0.00
How to prepare a Simulating Annealing PCR file?
!Nat Dis Ang Pr1 Pr2 Pr3 Jbt Irf Isy Str Furth ATZ Nvk Npr More
14 0 0 0.0 0.0 1.0 0 4 0 0 0 966.691 0 5 0
!
P 21/n <--Space group symbol
!Atom Typ X Y Z Biso Occ In Fin N_t Spc /Codes
Sr SR 0.87930 0.41798 0.73560 1.55853 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C1 C 0.63200 0.23920 0.57800 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C2 C 0.58300 0.51640 0.09300 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C3 C 0.64800 0.27780 0.34700 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
O1 O 0.62200 0.22870 0.15700 1.24468 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
. . . . . . . . . .
O7 O 0.69400 0.34880 0.32900 1.24468 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
H1 D 0.17449 0.26512 0.31765 2.00000 1.00000 0 0 0 0
11.00 21.00 31.00 0.00 0.00
H2 D 0.41474 0.05317 0.39374 2.00000 1.00000 0 0 0 0
41.00 51.00 61.00 0.00 0.00
H3 D 0.14942 0.30371 0.01023 2.00000 1.00000 0 0 0 0
71.00 81.00 91.00 0.00 0.00
!Nat Dis Ang Pr1 Pr2 Pr3 Jbt Irf Isy Str Furth ATZ Nvk Npr More
14 0 0 0.0 0.0 1.0 0 4 0 0 0 966.691 0 5 0
!
P 21/n <--Space group symbol
!Atom Typ X Y Z Biso Occ In Fin N_t Spc /Codes
Sr SR 0.87930 0.41798 0.73560 1.55853 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C1 C 0.63200 0.23920 0.57800 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C2 C 0.58300 0.51640 0.09300 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
C3 C 0.64800 0.27780 0.34700 1.48511 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
O1 O 0.62200 0.22870 0.15700 1.24468 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
. . . . . . . . . .
O7 O 0.69400 0.34880 0.32900 1.24468 1.00000 0 0 0 0
0.00 0.00 0.00 0.00 0.00
H1 D 0.17449 0.26512 0.31765 2.00000 1.00000 0 0 0 0
11.00 21.00 31.00 0.00 0.00
H2 D 0.41474 0.05317 0.39374 2.00000 1.00000 0 0 0 0
41.00 51.00 61.00 0.00 0.00
H3 D 0.14942 0.30371 0.01023 2.00000 1.00000 0 0 0 0
71.00 81.00 91.00 0.00 0.00
How to prepare a Simulating Annealing PCR file?
! Limits for selected parameters (+ steps & BoundCond for SA):
1 0.0000 1.0000 0.0152 1 X_H1
2 0.0000 1.0000 0.0073 1 Y_H1
3 0.0000 1.0000 0.0264 1 Z_H1
4 0.0000 1.0000 0.0279 1 X_H2
5 0.0000 1.0000 0.0080 1 Y_H2
6 0.0000 1.0000 0.0323 1 Z_H2
7 0.0000 1.0000 0.0334 1 X_H3
8 0.0000 1.0000 0.0087 1 Y_H3
9 0.0000 1.0000 0.0346 1 Z_H3
! T_ini Anneal Accept NumTemps NumThCyc InitConf
5.000 0.900 0.020 30 0 0
! NCyclM Nsolu Num_Ref Nscalef NAlgor
80 1 106 1 0
Random initial
configuration
Corana algorithm
Initial step = range
Periodic boundary conditions
Number of reflections
to consider
Automatic treatment
of the scale factor
Ranges and steps
! Limits for selected parameters (+ steps & BoundCond for SA):
1 0.0000 1.0000 0.0152 1 X_H1
2 0.0000 1.0000 0.0073 1 Y_H1
3 0.0000 1.0000 0.0264 1 Z_H1
4 0.0000 1.0000 0.0279 1 X_H2
5 0.0000 1.0000 0.0080 1 Y_H2
6 0.0000 1.0000 0.0323 1 Z_H2
7 0.0000 1.0000 0.0334 1 X_H3
8 0.0000 1.0000 0.0087 1 Y_H3
9 0.0000 1.0000 0.0346 1 Z_H3
! T_ini Anneal Accept NumTemps NumThCyc InitConf
5.000 0.900 0.020 30 0 0
! NCyclM Nsolu Num_Ref Nscalef NAlgor
80 1 106 1 0
Random initial
configuration
Random initial
configuration
Corana algorithm
Initial step = range
Corana algorithm
Initial step = range
Periodic boundary conditions Periodic boundary conditions Periodic boundary conditions
Number of reflections
to consider
Number of reflections
to consider
Automatic treatment
of the scale factor
Automatic treatment
of the scale factor
Ranges and steps Ranges and steps

Figure 4: Example of two different parts of a PCR file adapted to locate three hydrogen
positions in the asymmetric unit in Sr acid oxalate hydrate.
pattern, putting the option to generate a file containing cluster of integrated intensities,
provided the input file (extension “.int”) necessary to run a simulated annealing work. For
searching the hydrogen atoms, it is not necessary to use a large number of reflections. Only
the reflections up to 47(°) in 2θ are sufficient to find the hydrogen positions. The PCR file are
prepared by putting all known atoms in their fixed positions (according to the results obtained
by X-ray diffraction) and three additional hydrogen atoms (according to chemical analysis) in
arbitrary positions. The limits for the free parameters (positions of hydrogen atoms) are put in
the appropriate place (see Figure 4), and the file is ready for run. The final result after running
the simulated annealing job followed by Rietveld refinement of the proposed solution is
displayed in Figure 5. The files corresponding to this case, and a PDF file with more details
about the problem, can be obtained from the Internet [14]

The user should experiment for their own cases in order to select good control parameters.
For instance the appropriate starting temperature depends strongly on the number of free
parameters, the step sizes and the constraints. For solving a structure (crystallographic or
magnetic) from the scratch it is important to select a temperature for which the percentage of
accepted configurations is high (or the order of 80%) in order to let the procedure explore a
large set of configurations. The number of Monte Carlo cycles per temperature should be a
factor (from about 15 to 50) the number of free parameters.
Two types of oxalate groups
The chemical formula is Sr(HC
2
O
4
). ½ (C
2
O
4
) . H
2
O
Where are the hydrogen
atoms?
Chains along c
C
2
O
4
⋅⋅⋅ H⋅⋅⋅C
2
O
4
⋅⋅⋅ H⋅⋅⋅
Isolated C
2
O
4
And water molecules
Two types of oxalate groups
The chemical formula is Sr(HC
2
O
4
). ½ (C
2
O
4
) . H
2
O
Where are the hydrogen
atoms?
Chains along c
C
2
O
4
⋅⋅⋅ H⋅⋅⋅C
2
O
4
⋅⋅⋅ H⋅⋅⋅
Isolated C
2
O
4
And water molecules
Two types of oxalate groups
The chemical formula is Sr(HC
2
O
4
). ½ (C
2
O
4
) . H
2
O
Where are the hydrogen
atoms?
Chains along c
C
2
O
4
⋅⋅⋅ H⋅⋅⋅C
2
O
4
⋅⋅⋅ H⋅⋅⋅
Isolated C
2
O
4
And water molecules
The chemical formula is Sr(HC
2
O
4
). ½ (C
2
O
4
) . H
2
O
Where are the hydrogen
atoms?
Chains along c
C
2
O
4
⋅⋅⋅ H⋅⋅⋅C
2
O
4
⋅⋅⋅ H⋅⋅⋅
Chains along c
C
2
O
4
⋅⋅⋅ H⋅⋅⋅C
2
O
4
⋅⋅⋅ H⋅⋅⋅
Isolated C
2
O
4
Isolated C
2
O
4
And water molecules And water molecules

Figure 6: Results obtained from simulated annealing and further Rietveld refinement of the
crystal structure of Sr acid oxalate hydrate.
There is no guarantee that the optimum solution will be found, however if the final R-factors
are lower than say 25% the structure provided by the program may contain some recognizable
fragment that serves to start normal Rietveld refinement cycles together with Fourier
synthesis. For using the GFourier program [12], distributed in the same site as FullProf, it is
important to use the value Jfou=4 in the PCR-file, to output an appropriate set of structure
factors and an input file (extension inp) for GFourier.

Acknowledgements
It is a pleasure to thank here all my colleagues that have contributed with discussions, writing
pieces of code, or are presently contributing with companion programs to FullProf: Thierry
Roisnel, Javier González-Platas, Aziz Daoud-Aladine, Carlos Frontera, Laurent Chapon and
Vincent Rodriguez. I would like to thank many users for giving me a feedback without which
the program could not be improved.

References:

[1] H.M. Rietveld, Acta Cryst. 22, 151 (1967); H.M. Rietveld, J. Applied Cryst. 2, 65 (1969).
[2] D.B. Wiles & R.A. Young, J. Applied Cryst. 14, 149 (1981); D.B. Wiles & R.A. Young, J.
Applied Cryst. 15, 430 (1982)
[3] J. Rodríguez-Carvajal and J. González-Platas: “Crystallographic Fortran 90 Modules
Library (CrysFML): a simple toolbox for crystallographic computing programs”
Commission on Crystallographic Computing of IUCr, Newsletter 1, January 2003. Available
at http://www.iucr.org/iucr-top/comm/ccom/newsletters/ .
[4] The most recent versions, for different platforms, of the program FullProf can be found at
the ftp-area: ftp://ftp.cea.fr/pub/llb/divers/fullprof.2k. Different mirrors of this site can be
found at http://www.ccp14.ac.uk.
[5] L.B. McCusker et al., J. Appl. Cryst. 32, 36 (1999).
[6] J. Rodríguez-Carvajal and T. Roisnel, “FullProf.98 and WinPLOTR New Windows
Applications for Diffraction”. Commission on Powder Diffraction, IUCr, Newsletter 20, May-
August (1998). J. Rodríguez-Carvajal, “Recent developments of the program FullProf”.
Commission on Powder Diffraction, IUCr, Newsletter 26, December (2001).
J. González-Platas and J. Rodríguez-Carvajal, “EdPCR a GUI for FullProf” (unpublished)
[7] R.J. Hill, J.Appl.Cryst 25, 589 (1992).
[8] J. Rodríguez-Carvajal, Physica B 192, 55 (1993).
[9] S. Kirkpatrick, C.D. Gellat, Jr., M.P. Vecchi. Science 220, Nr. 4598, 671 (1983)
[10] J. Rodríguez-Carvajal, Materials Science Forum 378-381, 268 (2001); see also
Proceedings of the XVIII Conference on Applied Crystallography, Ed. Henryk Morawiec and
Danuta Stróz, World Scientific, London 2001, pp 30-36.
[11] A. Corana, M. Marchesi, C. Martini, S. Ridella, ACM Trans. Math. Softw. 13, 262 (1987)
[12] J. González-Platas and J. Rodríguez-Carvajal, “GFourier: a Windows/Linux program to
calculate and display Fourier maps ”. Program available within the FullProf Suite.
[13] G. Vanhoyland et al. J. Solid State Chem. 157, 283 (2001).
[14] The file sr_oxalate.zip contains the data and PCR files to practice with simulated
anneling. The file ECM-21-Workshop.zip contains a PDF file corresponding to a presentation
on several aspects of FullProf includint a tutorial for the oxalate case. Both files can be found
at ftp://ftp.cea.fr/pub/llb/divers/Rietveld-exercises .