no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


forum:data:2020:mismatches_of_self-calculated_mno_xas_and_that_in_the_paper_prb_85_165113_2012 [2020/07/19 16:13] (current) – Created from the form at forum:start Yaqian Guo
Line 1: Line 1:
 +====== Mismatches of self-calculated MnO XAS and that in the paper PRB 85, 165113 (2012) ======
 +;;#
 +asked by [[mailto:yaqian.guo@tmm.tu-darmstadt.de|Yaqian Guo]] (2020/07/19 16:13)
 +;;#
 +== ==
 +<WRAP center box 100%>
 +Hello,
 +
 +I tried to reproduce the XAS calculation for MnO by referring to the tutorial of NiO Ligand field calculation of XAS and the paper PRB 85, 165113 (2012). However there are mismatches between the MnO XAS calculated by me and the MnO XAS in the paper. I would like to ask the reasons for that. Below is the details of the code I used to calculate MnO XAS:
 +--------
 +Verbosity(0)
 +
 +NF=26
 +NB=0
 +IndexDn_2p={ 0, 2, 4}
 +IndexUp_2p={ 1, 3, 5}
 +IndexDn_3d={ 6, 8,10,12,14}
 +IndexUp_3d={ 7, 9,11,13,15}
 +IndexDn_Ld={16,18,20,22,24}
 +IndexUp_Ld={17,19,21,23,25}
 +
 +Oppldots_3d=NewOperator("ldots",NF, IndexUp_3d, IndexDn_3d)
 +OppSz_3d   =NewOperator("Sz"   ,NF, IndexUp_3d, IndexDn_3d)
 +OppLz_3d   =NewOperator("Lz"   ,NF, IndexUp_3d, IndexDn_3d)
 +OppNUp_2p = NewOperator("Number", NF, IndexUp_2p, IndexUp_2p, {1,1,1})
 +OppNDn_2p = NewOperator("Number", NF, IndexDn_2p, IndexDn_2p, {1,1,1})
 +OppN_2p = OppNUp_2p + OppNDn_2p
 +OppNUp_3d = NewOperator("Number", NF, IndexUp_3d, IndexUp_3d, {1,1,1,1,1})
 +OppNDn_3d = NewOperator("Number", NF, IndexDn_3d, IndexDn_3d, {1,1,1,1,1})
 +OppN_3d = OppNUp_3d + OppNDn_3d
 +OppNUp_Ld = NewOperator("Number", NF, IndexUp_Ld, IndexUp_Ld, {1,1,1,1,1})
 +OppNDn_Ld = NewOperator("Number", NF, IndexDn_Ld, IndexDn_Ld, {1,1,1,1,1})
 +OppN_Ld = OppNUp_Ld + OppNDn_Ld
 +
 +OppF0_3d =NewOperator("U", NF, IndexUp_3d, IndexDn_3d, {1,0,0})
 +OppF2_3d =NewOperator("U", NF, IndexUp_3d, IndexDn_3d, {0,1,0})
 +OppF4_3d =NewOperator("U", NF, IndexUp_3d, IndexDn_3d, {0,0,1})
 +
 +Akm = PotentialExpandedOnClm("Oh", 2, {0.6,-0.4})
 +OpptenDq_3d = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, Akm)
 +OpptenDq_Ld = NewOperator("CF", NF, IndexUp_Ld, IndexDn_Ld, Akm)
 +
 +Akm = PotentialExpandedOnClm("Oh", 2, {1,0})
 +OppVeg  = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, IndexUp_Ld, IndexDn_Ld,Akm) +  NewOperator("CF", NF, IndexUp_Ld, IndexDn_Ld, IndexUp_3d, IndexDn_3d, Akm)
 +Akm = PotentialExpandedOnClm("Oh", 2, {0,1})
 +OppVt2g = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, IndexUp_Ld, IndexDn_Ld,Akm) +  NewOperator("CF", NF, IndexUp_Ld, IndexDn_Ld, IndexUp_3d, IndexDn_3d, Akm)
 +
 +Oppcldots= NewOperator("ldots", NF, IndexUp_2p, IndexDn_2p)
 +OppUpdF0 = NewOperator("U", NF, IndexUp_2p, IndexDn_2p, IndexUp_3d, IndexDn_3d, {1,0}, {0,0})
 +OppUpdF2 = NewOperator("U", NF, IndexUp_2p, IndexDn_2p, IndexUp_3d, IndexDn_3d, {0,1}, {0,0})
 +OppUpdG1 = NewOperator("U", NF, IndexUp_2p, IndexDn_2p, IndexUp_3d, IndexDn_3d, {0,0}, {1,0})
 +OppUpdG3 = NewOperator("U", NF, IndexUp_2p, IndexDn_2p, IndexUp_3d, IndexDn_3d, {0,0}, {0,1})
 +
 +t=math.sqrt(1/2)
 +
 +Akm = {{1,-1,t},{1, 1,-t}}
 +TXASx = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, IndexUp_2p, IndexDn_2p, Akm)
 +Akm = {{1,-1,t*I},{1, 1,t*I}}
 +TXASy = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, IndexUp_2p, IndexDn_2p, Akm)
 +Akm = {{1,0,1}}
 +TXASz = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, IndexUp_2p, IndexDn_2p, Akm)
 +
 +TXASr = t*(TXASx - I * TXASy)
 +TXASl =-t*(TXASx + I * TXASy)
 +
 +nd = 5
 +Udd      5.5
 +Upd      7.2
 +Delta    8.0
 +
 +F2dd    = 9.35
 +F4dd    =  5.78
 +F2pd    =  5.29
 +G1pd    =  3.77
 +G3pd    =  2.14
 +tenDq    0.67
 +tenDqL  =  1.44
 +Veg      1.92
 +Vt2g    =  1.15
 +zeta_3d =  0.04
 +zeta_2p = 6.85
 +Bz      =  0.000001
 +Hz      =  0.120
 +
 +ed      = (10*Delta-nd*(19+nd)*Udd/2)/(10+nd)
 +eL      = nd*((1+nd)*Udd/2-Delta)/(10+nd)
 +
 +epfinal = (10*Delta + (1+nd)*(nd*Udd/2-(10+nd)*Upd)) / (16+nd)
 +edfinal = (10*Delta - nd*(31+nd)*Udd/2-90*Upd) / (16+nd)
 +eLfinal = ((1+nd)*(nd*Udd/2+6*Upd) - (6+nd)*Delta) / (16+nd)
 +
 +F0dd    = Udd + (F2dd+F4dd) * 2/63
 +F0pd    = Upd + (1/15)*G1pd + (3/70)*G3pd
 +
 +Hamiltonian =  F0dd*OppF0_3d + F2dd*OppF2_3d + F4dd*OppF4_3d + zeta_3d*Oppldots_3d + Bz*(2*OppSz_3d + OppLz_3d) + Hz * OppSz_3d + tenDq*OpptenDq_3d + tenDqL*OpptenDq_Ld + Veg * OppVeg + Vt2g * OppVt2g + ed * OppN_3d + eL * OppN_Ld
 +
 +XASHamiltonian =  F0dd*OppF0_3d + F2dd*OppF2_3d + F4dd*OppF4_3d + zeta_3d*Oppldots_3d + Bz*(2*OppSz_3d + OppLz_3d)+ Hz * OppSz_3d + tenDq*OpptenDq_3d + tenDqL*OpptenDq_Ld + Veg * OppVeg + Vt2g * OppVt2g + edfinal * OppN_3d + eLfinal * OppN_Ld + epfinal * OppN_2p + zeta_2p * Oppcldots + F0pd * OppUpdF0 + F2pd * OppUpdF2 + G1pd * OppUpdG1 + G3pd * OppUpdG3
 +
 +Npsi=3
 +StartRestrictions = {NF, NB, {"000000 1111111111 0000000000",5,5}, {"111111 0000000000 1111111111",16,16}}
 +psiList = Eigensystem(Hamiltonian, StartRestrictions, Npsi)
 +
 +XASSpectra = CreateSpectra(XASHamiltonian, {TXASz, TXASr, TXASl}, psiList, {{"Emin",-15}, {"Emax",25}, {"NE",2000}, {"Gamma",0.1}})
 +
 +XASSpectra.Broaden(0.4, {{-3.7, 0.45}, {-2.2, 0.65}, { 0.0, 0.65}, { 1.0, 2.00}, { 6  , 2.00}, { 8  , 0.80}, {13.2, 0.80}, {14.0, 0.90}, {16.0, 0.90}, {17.0, 2.00}})
 +
 +XASIsoSpectra = Spectra.Sum(XASSpectra,{1,0,0, 1,0,0, 1,0,0})
 +
 +XASSpectra.Print({{"file","XASSpec.dat"}})
 +XASIsoSpectra.Print({{"file","XASIsoSpec.dat"}})
 +
 +gnuplotInput = [[
 +set autoscale
 +set xtic auto
 +set ytic auto
 +set style line  1 lt 1 lw 1 lc rgb "#000000"
 +set style line  2 lt 1 lw 1 lc rgb "#FF0000"
 +set style line  3 lt 1 lw 3 lc rgb "#000000"
 +
 +set xlabel "E (eV)" font "Times,12"
 +set ylabel "Intensity (arb. units)" font "Times,12"
 +
 +set out 'XASSpec.ps'
 +set size 1.0, 1.0
 +set terminal postscript portrait enhanced color  "Times" 12
 +
 +set multiplot layout 3, 3
 +
 +plot "XASSpec.dat"  u 1:(- ) title 'z-polarized Sz=-1' with lines ls  1
 +plot "XASSpec.dat"  u 1:(- ) title 'z-polarized Sz= 0' with lines ls  1
 +plot "XASSpec.dat"  u 1:(- ) title 'z-polarized Sz= 1' with lines ls  1
 +plot "XASSpec.dat"  u 1:(- ) title 'r-polarized Sz=-1' with lines ls  1
 +plot "XASSpec.dat"  u 1:(-) title 'r-polarized Sz= 0' with lines ls  1
 +plot "XASSpec.dat"  u 1:(-) title 'r-polarized Sz= 1' with lines ls  1
 +plot "XASSpec.dat"  u 1:(-) title 'l-polarized Sz=-1' with lines ls  1
 +plot "XASSpec.dat"  u 1:(-) title 'l-polarized Sz= 0' with lines ls  1
 +plot "XASSpec.dat"  u 1:(-) title 'l-polarized Sz= 1' with lines ls  1
 +
 +unset multiplot
 +
 +energyshift=857.6
 +intensityscale=64
 +
 +plot "XASSpec.dat" using (@@+energyshift):((---) * intensityscale) title 'isotropic theory' with lines ls 1,\
 +     "../../NiO Experiment/XAS_L23_PRB_57_11623_1998" using 1:2 title 'isotropic experiment' with lines ls 2
 +
 +
 +set size 1.0, 0.6
 +intensityscale=48
 +set out 'XASIsoSpec.ps'
 +set xrange [847:877]
 +
 +plot "../../NiO Experiment/XAS_L23_PRB_57_11623_1998" using 1:2 title 'isotropic experiment' with filledcurves y1=0,\
 +     "XASIsoSpec.dat" using (@@+energyshift):((-) * intensityscale) title 'isotropic theory' with lines ls 3
 +
 +]]
 +
 +file = io.open("XASSpec.gnuplot", "w")
 +file:write(gnuplotInput)
 +file:close()
 +
 +os.execute("gnuplot XASSpec.gnuplot")
 +
 +os.execute(" ps2pdf XASSpec.ps ; ps2pdf XASIsoSpec.ps")
 +
 +------
 +
 +By this code I could get the isotropic XAS of MnO. However it does not match with the MnO XAS in paper PRB 85, 165113 (2012). The main difference is that the positions of L2 and L3 edge of MnO XAS I calculated are around 867eV and 857 eV. In paper PRB 85, 165113 (2012) positions of L2 and L3 edge of MnO XAS are about 641eV and 650eV. Another difference is that the XAS I calculated does not have many satellite peaks as in the paper.
 +
 +Could you please kindly tell me why is that? Is it because of the parameters I set are not good? Or I missed some steps in the code?
 +
 +Thank you so much for the help.
 +
 +Yaqian
 +
 +
 +
 +</WRAP>
 +
 +~~DISCUSSION|Answers~~
  
Print/export