[Ifeffit] theoretical EXAFS spectra

Matt Newville newville at cars.uchicago.edu
Fri Feb 22 11:41:44 CST 2008


Mustafa,

If you have or can extract  atomic positions  (coordinates x, y, z in
Angstroms with an arbitrary origin and atomic number Z), then
simulating the EXAFS spectra is not too difficult with FEFF and
IFEFFIT.    There is a graphical user interface program Artemis that
can help with this, but much of the process is essentially editing
text files, so if you're comfortable with it, it may end up being
faster to skip the GUI.

The process goes like this:
  1. create a file called feff.inp  that contains a list of x,y,z
coordinates for a cluster of atoms and also a little bit of
information such as what the absorbing atom is, and what other atoms
are in the cluster (more on this below).

  2. run feff to generate a list of theoretical XAFS contributions
from each of the scattering paths found for the cluster and the chosen
absorbing atom.
  3. use Ifeffit or Artemis to sum a set of these paths together.
These programs can apply overall factors (to model disorder, for
example) and either limit the number of paths used or use paths from
different calculations.

One thing to emphasize here is that a single Feff calculation uses
exactly one absorbing atom.  To average over multiple sites, you'll
need to re-run the calculation to generate paths with the selected
absorbing atom.

So, how to proceed.  Creating the first feff.inp is by far the most
daunting task.  You could pick a crystal structure that is sort of
close to your system from this database:
          http://cars9.uchicago.edu/~newville/adb/search.html
and click 'Run WebAtoms', and from there make sure you have the
correct absorbing atom chosen from the list of atoms, and hit 'Run
Atoms'.   The result is a feff.inp that will run (usually!).

You could also just write a feff.inp that looks like this:

-----feff.inp -----
*  The * is the comment character!
TITLE  My cluster ....

* this means K edge:
HOLE   1   1.0

* now give a list of atom types to calculate for  (I'm assuming it's
Mn oxide here)
POTENTIALS
  *  ipot     Z     symbol
      0       25    Mn           * ipot=0 is ALWAYS the absorbing atom
      1       25    Mn           * a potential for Mn scattering atoms
      2         8     O

***
***  you can have up to 7 different potentials / atom types.  If you
need more, ask for help
***
* The list of atomic coordnates

ATOMS      ** units are Angstroms!!!
*     x               y               z          ipot  symbol
    0.00000    0.00000    0.00000  0 Mn      * The absorbing atom does
NOT have to be at  0,0,0
   -1.32759    1.32759    0.00000  2 O
    1.32759   -1.32759    0.00000  2 O
    0.87041    0.87041    1.43550  2 O
   -0.87041   -0.87041    1.43550  2 O
    0.87041    0.87041   -1.43550  2 O
   -0.87041   -0.87041   -1.43550  2 O
    0.00000    0.00000    2.87100  1 Mn
 ....
---------

Generally, feff.inp needs no more than a few hundred atoms (once you
get 6Ang from the absorbing atom, you're losing EXAFS signal).

With a feff.inp file, run feff, to create a pile of paths for each
scattering path: feff0001.dat, feff0002.data,.....  If you want to
average over multiple absorbing atoms in your cluster, you should make
separate subdirectories for each calculation.

These can be added together with Ifeffit or the Artemis GUI.   For
Ifeffit, you could write a script that looks like this:

# Ifeffit script (# is the comment character!)

# define Paths from feff.dat files -- you can add paths from different
calculations here
path(1, file=feff0001.dat)
path(2, file=feff0002.dat)
path(3, file=feff0003.dat)

ff2chi(1-3, group=mycalc)    #  adds the paths 1-3 together to create
arrays mycalc.k for wavenumber, mycalc.chi for chi.

plot mycalc.k, mycalc.chi     # plot chi(R) v. k

fftf(mycalc.chi,  kmin=2, kmax=15, dk=4, kwiindow='hanning')    #
Fourier transform data to chi(R)

plot mycalc.r, mycalc.chir_mag   #  plot  |chi(R)| v. R

##########

Hope that's a good start.  Again, this can all be done with the
Artemis GUI, and there are lots of bells-and-whistles (say, adjusting
parameters to best match experimental spectra) that I've left out.

--Matt



More information about the Ifeffit mailing list