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:
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.
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.
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.