next up previous contents
Next: XMCD Up: Spin dependent calculations Previous: Spin dependent calculations

General description


 

These calculations are not currently automated and can be done only with atomic overlap potentials. Thus results in XANES may be questionable, but are often better than those obtained with other codes. Thus this code gave the best result to date for XMCD at Fe K edge, both in XANES and EXAFS, when compared to other calculations and experiment.

One can easily make mistakes in spin-dependent calculations with our code. It is probably best to ask Alexei Ankudinov for assistance. However, if you want to do them on your own, the spin-dependent calculations are described below.

To accommodate spin dependent calculations, the SPIN card is added to FEFF. The values of of the ispin argument correspond to:

  table3114
Table G.1: Allowed values of the ispin argument of the SPIN card.

To get the XMCD signal you have to combine data from two 'xmu.dat' files. A simple program to do this, 'spin.f' is available on the FEFF web site, and also printed below.


These subroutines have to be modified by the user:
scfdat

now also gives atomic density magnetization ( density-up minus density-down), which currently requires some care from the user. It has to be changed for every new element, but usually it is clear from the Hund's rule, how to construct density magnetization, and this process may be automated later. The atomic source of magnetism is assumed on every atom. To construct spin-dependent density for each free atom, you have to edit subroutine scfdat (examples for Fe, Mn and Gd are there). You have to specify by hand the total spin on atom and the number of corresponding d or f orbital.
ovrlp

overlaps atomic densities and construct the total density magnetization, relative to the central atom. Here the SPIN card is used to define the sign of central atom density magnetization. This subroutine also requires user's attention, since here the procedure is different for ferromagnets and antiferromagnets. Now, there are examples for both, however in the later versions the relative spin orientation should be specified in 'feff.inp' (add 5-th column in ATOMS card). Currently it does not overlap magnetization, thus in interstitial region it is zero. It should be fine for antiferromagnets and f-element ferromagnets, but can lead to important corrections for d-element ferromagnets. The relative spin arrangement is set in subroutine overlap. Again several examples for ferro-, ferri- and antiferromagnets are inside the subroutine. This is a tricky part and it is easy to screw up your calculations here.

The spin-dependent potentials are calculated from the spin-dependent densities, using von Barth-Hedin results for the uniform electron gas.

We use the rough prescription to construct the spin-dependent muffin-tin potential. It should be fine for EXAFS where small details of the potential are irrelevant, but may be not good enough in the XANES region, where the self-consistent spin-dependent muffin-tin potential can lead to better results.

In order to use this spin dependent program you have to: 1) Check the construction of atomic density magnetization in the subroutine SCFDAT (examples for Mn, Fe, Gd are there); 2) Check the construction of spin-dependent potential by OVRLP (examples for ferromagnets and antiferromagnets are there). 3) Be especially careful with antiferromagnets, since you may want to use the parity of iph to specify the relative directions of spin. 4) Now you can simply use the SPIN card to calculate SPXAS and XMCD. An additional simple program 'spin.f' is needed to take care of the different normalizations and give the finite results. If this experimental version will work, then later versions of FEFF will be automated to work with the SPIN card and the 5-th column of ATOMS to specify the relative spin directions on atoms.


An auxiliary program 'spin.f' can be used to get XMCD or SPXAS
      implicit double precision (a-h,o-z)
c     This program read two xmu.dat files for spin -up and -down,
c     calculated with Feff7s for the SAME paths list.
c     spin-up file is fort.1, spin-down file is fort.2
c     Both have to be edited: All lines should be deleted except
c       1) line: xsedge+100, used to normalize mu           1.3953E-04
c          leave only on this line:  1.3953E-04
c       2) 6-column data lines
c     The output will be written in fort.3 and have the following structure
c     1 line: overall normalization factor
c     the rest is 6 column data
c     E+shift1  E(edge)+shift2  xk cmd cmd+background  xafs

c     There are 3 possibilities
c     case 1) you want XMCD signal and used SPIN \pm 1
c     case 2) you want XMCD signal and used SPIN \pm 2, in order
c       to use nonrelativistic formula for XMCD
c       factor li/2j+1 which was not convenient to do in a program
c     case 3) you want SPXAFS and used  SPIN \pm 2
c     ENTER your case here
      icase = 1
c     if icase=2 ENTER factor fac=(-1)**(L+1/2-J) * L/(2*J+1)
c     where L,J are for your edge (ex. for L3 L=1 J=3/2, for L2 L=1 J=1/2)
      fac = -0.5
c     ENTER the energy shift you want for columns 1 and 2 in xmu.dat
      shift1 = 0
      shift2 = 14
c     ENTER normalization factors for icase=2,3
c     typically take value in 5-th column of xmu.dat for k=12.000
      ap = 7.57707
      am = 7.63672

c     everything below is automated further
   5  format ( 6e13.5)
      if (icase.eq.1) then
         read (1,*,end=10) ap
         read (2,*,end=10) am
      endif
      xnorm = 0.5 *(ap+am)
c     write(3,5)    xnorm
c     read the data
   3     read(1,*,end=10)   x1, x2, ek, y1, y2, y3
         read(2,*,end=10)  x1, x2, ek, z1, z2, z3
         if (icase.eq.1) then
            cmd = (y3*y2*ap + z3*z2*am)/xnorm
            cmdb = (y1*ap + z1*am)/xnorm
c           no xafs in this case
            xfs = cmdb -cmd
         elseif (icase.eq.2) then
            cmd = (y3*y2/ap - z3*z2/am)*fac *xnorm
            cmdb = -0.5* (y1/ap - z1/am)*fac *xnorm
            xfs = (y3*y2/ap + z3*z2/am)/2.0*xnorm
c           xmu = (y1/ap + z1/am)/2.0*xnorm
         elseif (icase.eq.3) then
c           fac=0.5 always for SPXAFS
            cmd = (y3*y2*ap - z3*z2*am)/2.0/xnorm
            cmdb = (y1*ap - z1*am)/2.0/xnorm
            xfs = (y3*y2*ap + z3*z2*am)/2.0/xnorm
c           xmu = (y1*ap + z1*am)/2.0/xnorm
         endif
         x1 =x1 + shift1
         x2 =x2 + shift2
         write(3,5)    x1, x2, ek, cmd,cmdb,xfs
      goto 3
  10  continue
      stop
      end

You really want to have the same paths used for spin up and down calculation, otherwise the difference between 2 calculations may be due to different paths used. Typically the paths list in 'path00.dat' should be generated by running the usual EXAFS calculations and comparing with experiment (to make sure that all important paths included). Then when running with SPIN turn off the pathfinder module using CONTROL card. This is probably the only place when you have to skip the pathfinder module. There is no rule without exception.


next up previous contents
Next: XMCD Up: Spin dependent calculations Previous: Spin dependent calculations
John J. Rehr
Thu Jul 1 14:31:17 PDT 1999