Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
documentation:tutorials:nio_crystal_field:xas_l23_partial_excitations [2016/10/08 21:29] – created Maurits W. Haverkort | documentation:tutorials:nio_crystal_field:xas_l23_partial_excitations [2018/03/21 10:20] (current) – Stefano Agrestini | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | {{indexmenu_n> | ||
+ | ====== XAS $L_{2,3}$ partial excitations ====== | ||
+ | ### | ||
+ | In order to understand where a particular peak originates from one can look at the character of the excited state. Quanty works with Green' | ||
+ | ### | ||
+ | |||
+ | ### | ||
+ | The input file is: | ||
+ | <code Quanty XAS_partial.Quanty> | ||
+ | -- In order to understand the different peaks in an absorption experiment one can look | ||
+ | -- at the character of the states one excites into. | ||
+ | |||
+ | -- Here we show the example of XAS making excitations from 2p to 3d. | ||
+ | |||
+ | -- Quanty works with Green' | ||
+ | -- determine the character. We can however modify the transition operator such that it only excites | ||
+ | -- into, for example only t2g, or only eg electrons. Or we we can modify the transition operator | ||
+ | -- such that it only takes electrons from the 2p-j=1/2 or 2p-j=3/2 states. In the former one would | ||
+ | -- see which peaks arrise from the eg or t2g orbitals, in the later one would see the L2 and L3 | ||
+ | -- edge separately in the case where j2p is a good quantum number. In the case where coulomb | ||
+ | -- repulsion mixes j2p=1/2 and j2p=3/2 states one sees this mixing. | ||
+ | |||
+ | -- In order to define the restricted transition operators we first rotate the orbital | ||
+ | -- basis of the operator to the orbital basis on which we want to select a subset of | ||
+ | -- orbitals. If we modify the rotation matrix to only keep a subset of the eigen-orbitals | ||
+ | -- we have the modification we want. Next we rotate the transition operator back to the | ||
+ | -- original basis we use throughout the calculation (l lz s sz) for the orbitals and ready | ||
+ | -- we are. | ||
+ | |||
+ | -- We copy tutorial 21 for the most part | ||
+ | |||
+ | -- In order to do crystal-field theory for NiO we need to define a Ni d-shell. | ||
+ | -- A d-shell has 10 elements and we label again the even spin-orbitals to be spin down | ||
+ | -- and the odd spin-orbitals to be spin up. In order to calculate 2p to 3d excitations we | ||
+ | -- also need a Ni 2p shell. We thus have a total of 10+6=16 fermions, 6 Ni-2p and 10 Ni-3d | ||
+ | -- spin-orbitals | ||
+ | NF=16 | ||
+ | NB=0 | ||
+ | IndexDn_2p={0, | ||
+ | IndexUp_2p={1, | ||
+ | IndexDn_3d={6, | ||
+ | IndexUp_3d={7, | ||
+ | |||
+ | -- just like in the previous example we define several operators acting on the Ni -3d shell | ||
+ | |||
+ | OppSx | ||
+ | OppSy | ||
+ | OppSz | ||
+ | OppSsqr =NewOperator(" | ||
+ | OppSplus=NewOperator(" | ||
+ | OppSmin =NewOperator(" | ||
+ | |||
+ | OppLx | ||
+ | OppLy | ||
+ | OppLz | ||
+ | OppLsqr =NewOperator(" | ||
+ | OppLplus=NewOperator(" | ||
+ | OppLmin =NewOperator(" | ||
+ | |||
+ | OppJx | ||
+ | OppJy | ||
+ | OppJz | ||
+ | OppJsqr =NewOperator(" | ||
+ | OppJplus=NewOperator(" | ||
+ | OppJmin =NewOperator(" | ||
+ | |||
+ | Oppldots=NewOperator(" | ||
+ | |||
+ | -- as in the previous example we define the Coulomb interaction | ||
+ | |||
+ | OppF0 =NewOperator(" | ||
+ | OppF2 =NewOperator(" | ||
+ | OppF4 =NewOperator(" | ||
+ | |||
+ | -- as in the previous example we define the crystal-field operator | ||
+ | |||
+ | Akm = PotentialExpandedOnClm(" | ||
+ | OpptenDq = NewOperator(" | ||
+ | |||
+ | -- and as in the previous example we define operators that count the number of eg and t2g | ||
+ | -- electrons | ||
+ | |||
+ | Akm = PotentialExpandedOnClm(" | ||
+ | OppNeg = NewOperator(" | ||
+ | Akm = PotentialExpandedOnClm(" | ||
+ | OppNt2g = NewOperator(" | ||
+ | |||
+ | -- new for core level spectroscopy are operators that define the interaction acting on the | ||
+ | -- Ni-2p shell. There is actually only one of these interactions, | ||
+ | -- spin-orbit interaction | ||
+ | |||
+ | Oppcldots= NewOperator(" | ||
+ | |||
+ | -- we also need to define the Coulomb interaction between the Ni 2p- and Ni 3d-shell | ||
+ | -- Again the interaction (e^2/ | ||
+ | -- between two shells we need to consider two cases. For the direct interaction a 2p electron | ||
+ | -- scatters of a 3d electron into a 2p and 3d electron. The radial integrals involve | ||
+ | -- the square of a 2p radial wave function at coordinate 1 and the square of a 3d radial | ||
+ | -- wave function at coordinate 2. The transfer of angular momentum can either be 0 or 2. | ||
+ | -- These processes are called direct and the resulting Slater integrals are F[0] and F[2]. | ||
+ | -- The second proces involves a 2p electron scattering of a 3d electron into the 3d shell | ||
+ | -- and at the same time the 3d electron scattering into a 2p shell. These exchange processes | ||
+ | -- involve radial integrals over the product of a 2p and 3d radial wave function. The transfer | ||
+ | -- of angular momentum in this case can be 1 or 3 and the Slater integrals are called G1 and G3. | ||
+ | |||
+ | -- In Quanty you can enter these processes by labeling 4 indices for the orbitals, once | ||
+ | -- the 2p shell with spin up, 2p shell with spin down, 3d shell with spin up and 3d shell with | ||
+ | -- spin down. Followed by the direct Slater integrals (F0 and F2) and the exchange Slater | ||
+ | -- integrals (G1 and G3) | ||
+ | |||
+ | -- Here we define the operators separately and later sum them with appropriate prefactors | ||
+ | |||
+ | OppUpdF0 = NewOperator(" | ||
+ | OppUpdF2 = NewOperator(" | ||
+ | OppUpdG1 = NewOperator(" | ||
+ | OppUpdG3 = NewOperator(" | ||
+ | |||
+ | -- next we define the dipole operator. The dipole operator is given as epsilon.r | ||
+ | -- with epsilon the polarization vector of the light and r the unit position vector | ||
+ | -- We can expand the position vector on (renormalized) spherical harmonics and use | ||
+ | -- the crystal-field operator to create the dipole operator. | ||
+ | |||
+ | -- x polarized light is defined as x = Cos[phi]Sin[theta] = sqrt(1/2) ( C_1^{(-1)} - C_1^{(1)}) | ||
+ | Akm = {{1, | ||
+ | TXASx = NewOperator(" | ||
+ | -- y polarized light is defined as y = Sin[phi]Sin[theta] = sqrt(1/2) I ( C_1^{(-1)} + C_1^{(1)}) | ||
+ | Akm = {{1, | ||
+ | TXASy = NewOperator(" | ||
+ | -- z polarized light is defined as z = Cos[theta] = C_1^{(0)} | ||
+ | Akm = {{1,0,1}} | ||
+ | TXASz = NewOperator(" | ||
+ | |||
+ | -- we now define rotation matrices that rotate the basis of (l lz s sz) to a basis of | ||
+ | -- (k tau s sz) for the d-shell or (j jz) for the p-shell. The function rotate calculates | ||
+ | -- R^* Opp R^T and the rotation matrix is thus equal to the eigen-functions of the | ||
+ | -- crystal-field operator and the spin-orbit coupling operator respectively. | ||
+ | |||
+ | -- the total matrix is a 16 by 16 matrix | ||
+ | |||
+ | t=sqrt(1/2) | ||
+ | u=I*sqrt(1/ | ||
+ | d=sqrt(1/3) | ||
+ | e=sqrt(2/3) | ||
+ | |||
+ | -- rotating the 2p states to a (j jz) basis | ||
+ | |||
+ | rotmatjjzp = {{ 0,-e, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0,-d, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, d, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, e, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | | ||
+ | { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}} | ||
+ | | ||
+ | -- rotating the 3d states to a (k tau s sz) basis | ||
+ | | ||
+ | rotmatKd | ||
+ | { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | | ||
+ | { 0, 0, 0, 0, 0, 0, t, 0, 0, 0, 0, 0, 0, 0, t, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, t, 0, 0, 0, 0, 0, 0, 0, t}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, u, 0, 0, 0, u, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 0, 0, 0, u, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, t, 0, 0, 0,-t, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, t, 0, 0, 0,-t, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, u, 0, 0, 0, 0, 0, 0, 0,-u, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, u, 0, 0, 0, 0, 0, 0, 0,-u}} | ||
+ | | ||
+ | -- We can modify the rotation of the 2p orbitals such that we only | ||
+ | -- keep the j=1/2 sub-shell | ||
+ | |||
+ | rotmatjjzp12 = {{ 0,-e, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0,-d, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | | ||
+ | { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}} | ||
+ | | ||
+ | -- or modify it such that we only keep the j=3/2 sub-shell | ||
+ | | ||
+ | rotmatjjzp32 = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, d, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, e, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | | ||
+ | { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}} | ||
+ | | ||
+ | -- We can modify the rotation of the 3d orbitals such that we only keep | ||
+ | -- the orbitals belonging to the eg irreducible representation. | ||
+ | | ||
+ | rotmatKdeg | ||
+ | { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | | ||
+ | { 0, 0, 0, 0, 0, 0, t, 0, 0, 0, 0, 0, 0, 0, t, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, t, 0, 0, 0, 0, 0, 0, 0, t}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} | ||
+ | | ||
+ | -- or such that we only keep the orbitals belonging to the t2g irreducible representation | ||
+ | | ||
+ | rotmatKdt2g | ||
+ | { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, u, 0, 0, 0, u, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 0, 0, 0, u, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, t, 0, 0, 0,-t, 0, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, 0, 0, t, 0, 0, 0,-t, 0, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, u, 0, 0, 0, 0, 0, 0, 0,-u, 0}, | ||
+ | { 0, 0, 0, 0, 0, 0, 0, u, 0, 0, 0, 0, 0, 0, 0,-u}} | ||
+ | | ||
+ | -- The transition operator restricted to a subset of orbitals is then given as: | ||
+ | -- Tnew = R2^* . R1^* . Told . R1^T . R2^T | ||
+ | -- with R1 the restricted rotation matrix | ||
+ | -- and R2 the full rotation matrix conjugate transposed (R^+) | ||
+ | |||
+ | TXASxj12 = Chop(Rotate(Chop(Rotate(TXASx, | ||
+ | TXASyj12 = Chop(Rotate(Chop(Rotate(TXASy, | ||
+ | TXASzj12 = Chop(Rotate(Chop(Rotate(TXASz, | ||
+ | TXASxj32 = Chop(Rotate(Chop(Rotate(TXASx, | ||
+ | TXASyj32 = Chop(Rotate(Chop(Rotate(TXASy, | ||
+ | TXASzj32 = Chop(Rotate(Chop(Rotate(TXASz, | ||
+ | TXASxeg | ||
+ | TXASyeg | ||
+ | TXASzeg | ||
+ | TXASxt2g = Chop(Rotate(Chop(Rotate(TXASx, | ||
+ | TXASyt2g = Chop(Rotate(Chop(Rotate(TXASy, | ||
+ | TXASzt2g = Chop(Rotate(Chop(Rotate(TXASz, | ||
+ | |||
+ | -- once all operators are defined we can set some parameter values. | ||
+ | |||
+ | -- the value of U drops out of a crystal-field calculation as the total number of electrons | ||
+ | -- is always the same | ||
+ | U | ||
+ | -- F2 and F4 are often referred to in the literature as J_{Hund}. They represent the energy | ||
+ | -- differences between different multiplets. Numerical values can be found in the back of | ||
+ | -- my PhD. thesis for example. http:// | ||
+ | F2dd = 11.142 | ||
+ | F4dd = 6.874 | ||
+ | -- F0 is not the same as U, although they are related. Unimportant in crystal-field theory | ||
+ | -- the difference between U and F0 is so important that I do include it here. (U=0 so F0 is not) | ||
+ | F0dd = U+(F2dd+F4dd)*2/ | ||
+ | -- in crystal field theory U drops out of the equation, also true for the interaction between the | ||
+ | -- Ni 2p and Ni 3d electrons | ||
+ | Upd | ||
+ | -- The Slater integrals between the 2p and 3d shell, again the numerical values can be found | ||
+ | -- in the back of my PhD. thesis. (http:// | ||
+ | F2pd = 6.667 | ||
+ | G1pd = 4.922 | ||
+ | G3pd = 2.796 | ||
+ | -- F0 is not the same as U, although they are related. Unimportant in crystal-field theory | ||
+ | -- the difference between U and F0 is so important that I do include it here. (U=0 so F0 is not) | ||
+ | F0pd = Upd + G1pd*1/15 + G3pd*3/70 | ||
+ | -- tenDq in NiO is 1.1 eV as can be seen in optics or using IXS to measure d-d excitations | ||
+ | tenDq | ||
+ | -- the Ni 3d spin-orbit is small but finite | ||
+ | zeta_3d = 0.081 | ||
+ | -- the Ni 2p spin-orbit is very large and should not be scaled as theory is quite accurate here | ||
+ | zeta_2p = 11.498 | ||
+ | -- we can add a small magnetic field, just to get nice expectation values. (units in eV... ) | ||
+ | Bz = 0.000001 | ||
+ | -- In mean field theory the neighboring Ni sites give an effective potential acting on the | ||
+ | -- spin only when magnetically ordered. This exchange field in NiO is 6 J with J=27 meV. | ||
+ | Hex = 6*0.027 -- see Europhys. Lett., 32 259 (1995) [ and Phys. Rev. B 82, 094403 (2010) ] | ||
+ | |||
+ | -- the total Hamiltonian is the sum of the different operators multiplied with their prefactor | ||
+ | Hamiltonian = F0dd*OppF0 + F2dd*OppF2 + F4dd*OppF4 + tenDq*OpptenDq + zeta_3d*Oppldots + Bz*(2*OppSz+OppLz) + Hex*sqrt(1/ | ||
+ | |||
+ | -- We normally do not include core-valence interactions between filed and partially filled | ||
+ | -- shells as it drops out anyhow. For the XAS we thus need to define a " | ||
+ | -- (more complete) Hamiltonian. | ||
+ | XASHamiltonian = Hamiltonian + zeta_2p * Oppcldots + F0pd * OppUpdF0 + F2pd * OppUpdF2 + G1pd * OppUpdG1 + G3pd * OppUpdG3 | ||
+ | |||
+ | -- We saw in the previous example that NiO has a ground-state doublet with occupation | ||
+ | -- t2g^6 eg^2 and S=1 (S^2=S(S+1)=2). The next state is 1.1 eV higher in energy and thus | ||
+ | -- unimportant for the ground-state upto temperatures of 10 000 Kelvin. We thus restrict | ||
+ | -- the calculation to the lowest 3 eigenstates. | ||
+ | Npsi=3 | ||
+ | -- in order to make sure we have a filling of 8 | ||
+ | -- electrons we need to define some restrictions | ||
+ | -- We need to restrict the occupation of the Ni-2p shell to 6 for the ground state and for | ||
+ | -- the Ni 3d-shell to 8. | ||
+ | StartRestrictions = {NF, NB, {" | ||
+ | |||
+ | -- And calculate the lowest 3 eigenfunctions | ||
+ | psiList = Eigensystem(Hamiltonian, | ||
+ | |||
+ | -- In order to get some information on these eigenstates it is good to plot expectation values | ||
+ | -- We first define a list of all the operators we would like to calculate the expectation value of | ||
+ | oppList={Hamiltonian, | ||
+ | |||
+ | -- next we loop over all operators and all states and print the expectation value | ||
+ | print(" | ||
+ | for i = 1,#psiList do | ||
+ | for j = 1,#oppList do | ||
+ | expectationvalue = Chop(psiList[i]*oppList[j]*psiList[i]) | ||
+ | io.write(string.format(" | ||
+ | end | ||
+ | io.write(" | ||
+ | end | ||
+ | |||
+ | -- calculating the spectra is simple and single line once all operators and wave-functions | ||
+ | -- are defined. | ||
+ | |||
+ | -- we here calculate the spectra for x polarized light and seperate the excitations into the t2g or eg sub-shell. | ||
+ | -- We also calculate the spectra separately coming form j=1/2 or j=3/2 orbitals. | ||
+ | |||
+ | XASSpectra = CreateSpectra(XASHamiltonian, | ||
+ | |||
+ | XASSpectra.Broaden(0.4, | ||
+ | |||
+ | -- in order to plot the spectra we write them to file in ASCII format | ||
+ | -- note that the calculated object, i.e. <psi | T^dag 1/ | ||
+ | -- is complex. Minus the imaginary part is the absorption. | ||
+ | XASSpectra.Print({{" | ||
+ | |||
+ | -- in order to plot we use gnuplot. You can use any program, but gnuplot is nice as it can | ||
+ | -- be called from within Quanty. We first define the gnuplot script as a string inside Quanty | ||
+ | gnuplotInput = [[ | ||
+ | set autoscale | ||
+ | set xtic auto | ||
+ | set ytic auto | ||
+ | set style line 1 lt 1 lw 1 lc rgb "# | ||
+ | set style line 2 lt 1 lw 1 lc rgb "# | ||
+ | set style line 3 lt 1 lw 1 lc rgb "# | ||
+ | |||
+ | set xlabel "E (eV)" font " | ||
+ | set ylabel " | ||
+ | |||
+ | set out " | ||
+ | set size 1.0, 1.0 | ||
+ | set terminal postscript portrait enhanced color " | ||
+ | |||
+ | set multiplot layout 5, 1 | ||
+ | |||
+ | plot " | ||
+ | " | ||
+ | " | ||
+ | |||
+ | plot " | ||
+ | " | ||
+ | " | ||
+ | |||
+ | ]] | ||
+ | |||
+ | -- next we save this string to a file | ||
+ | file = io.open(" | ||
+ | file: | ||
+ | file: | ||
+ | |||
+ | -- and finally call gnuplot to execute the script | ||
+ | os.execute(" | ||
+ | -- as I like pdf to view and eps to include in the manuel I transform the format | ||
+ | os.execute(" | ||
+ | </ | ||
+ | ### | ||
+ | |||
+ | ### | ||
+ | The resulting spectra are: | ||
+ | ### | ||
+ | |{{: | ||
+ | ^ $2p$ to $3d$ XAS Spectra. Top pannel decomposed into excitations into the $e_g$ or $t_{2g}$ orbitals. Bottom panel decomposed to excitations from the $2p_{j=1/ | ||
+ | |||
+ | ### | ||
+ | The output of the script is: | ||
+ | <file Quanty_Output XAS_partial.out> | ||
+ | Start of BlockGroundState. Converge 3 states to an energy with relative variance smaller than 1.490116119384766E-06 | ||
+ | |||
+ | Start of BlockOperatorPsiSerialRestricted | ||
+ | Outer loop 1, Number of Determinants: | ||
+ | Start of BlockOperatorPsiSerialRestricted | ||
+ | Start of BlockGroundState. Converge 3 states to an energy with relative variance smaller than 1.490116119384766E-06 | ||
+ | |||
+ | Start of BlockOperatorPsiSerial | ||
+ | < | ||
+ | -2.882 | ||
+ | -2.721 | ||
+ | -2.560 | ||
+ | Start of LanczosTriDiagonalizeMC | ||
+ | Start of LanczosTriDiagonalizeMC | ||
+ | Start of LanczosTriDiagonalizeMC | ||
+ | Start of LanczosTriDiagonalizeMC | ||
+ | Start of LanczosTriDiagonalizeMC | ||
+ | Spectra printed to file: XASSpec.dat | ||
+ | </ | ||
+ | ### | ||
+ | |||
+ | ===== Table of contents ===== | ||
+ | {{indexmenu> |