Differences
This shows you the differences between two versions of the page.
documentation:tutorials:nio_ligand_field:energy_level_diagram [2016/10/09 15:23] – created Maurits W. Haverkort | documentation:tutorials:nio_ligand_field:energy_level_diagram [2016/10/10 09:41] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | {{indexmenu_n> | ||
+ | ====== Energy level diagram ====== | ||
+ | ### | ||
+ | In order to do temperature averaging it is important to understand the number of excited states that are important. One can learn a lot by looking at the energy level diagram. Here we plot one for Ni$^{2+}$. | ||
+ | ### | ||
+ | |||
+ | ### | ||
+ | The input file is: | ||
+ | <code Quanty Energy_level_diagram.Quanty> | ||
+ | Verbosity(0) | ||
+ | |||
+ | -- In order to understand the physics / chemistry of a system it is often good | ||
+ | -- to make energy level diagrams. i.e. plot the eigen-state energy as a function | ||
+ | -- of some parameter one varies. | ||
+ | |||
+ | -- Here we create the energy level diagram of all 190 states of NiO in the ligand | ||
+ | -- field approximation as a function of the Ni onsite crystal-field strenght | ||
+ | |||
+ | NF=20 | ||
+ | NB=0 | ||
+ | IndexDn_3d={ 0, 2, 4, 6, 8} | ||
+ | IndexUp_3d={ 1, 3, 5, 7, 9} | ||
+ | IndexDn_Ld={10, | ||
+ | IndexUp_Ld={11, | ||
+ | |||
+ | -- angular momentum operators on the d-shell | ||
+ | |||
+ | OppSx_3d | ||
+ | OppSy_3d | ||
+ | OppSz_3d | ||
+ | OppSsqr_3d =NewOperator(" | ||
+ | OppSplus_3d=NewOperator(" | ||
+ | OppSmin_3d =NewOperator(" | ||
+ | |||
+ | OppLx_3d | ||
+ | OppLy_3d | ||
+ | OppLz_3d | ||
+ | OppLsqr_3d =NewOperator(" | ||
+ | OppLplus_3d=NewOperator(" | ||
+ | OppLmin_3d =NewOperator(" | ||
+ | |||
+ | OppJx_3d | ||
+ | OppJy_3d | ||
+ | OppJz_3d | ||
+ | OppJsqr_3d =NewOperator(" | ||
+ | OppJplus_3d=NewOperator(" | ||
+ | OppJmin_3d =NewOperator(" | ||
+ | |||
+ | Oppldots_3d=NewOperator(" | ||
+ | |||
+ | -- Angular momentum operators on the Ligand shell | ||
+ | |||
+ | OppSx_Ld | ||
+ | OppSy_Ld | ||
+ | OppSz_Ld | ||
+ | OppSsqr_Ld =NewOperator(" | ||
+ | OppSplus_Ld=NewOperator(" | ||
+ | OppSmin_Ld =NewOperator(" | ||
+ | |||
+ | OppLx_Ld | ||
+ | OppLy_Ld | ||
+ | OppLz_Ld | ||
+ | OppLsqr_Ld =NewOperator(" | ||
+ | OppLplus_Ld=NewOperator(" | ||
+ | OppLmin_Ld =NewOperator(" | ||
+ | |||
+ | OppJx_Ld | ||
+ | OppJy_Ld | ||
+ | OppJz_Ld | ||
+ | OppJsqr_Ld =NewOperator(" | ||
+ | OppJplus_Ld=NewOperator(" | ||
+ | OppJmin_Ld =NewOperator(" | ||
+ | |||
+ | -- total angular momentum | ||
+ | |||
+ | OppSx = OppSx_3d + OppSx_Ld | ||
+ | OppSy = OppSy_3d + OppSy_Ld | ||
+ | OppSz = OppSz_3d + OppSz_Ld | ||
+ | OppSsqr = OppSx * OppSx + OppSy * OppSy + OppSz * OppSz | ||
+ | OppLx = OppLx_3d + OppLx_Ld | ||
+ | OppLy = OppLy_3d + OppLy_Ld | ||
+ | OppLz = OppLz_3d + OppLz_Ld | ||
+ | OppLsqr = OppLx * OppLx + OppLy * OppLy + OppLz * OppLz | ||
+ | OppJx = OppJx_3d + OppJx_Ld | ||
+ | OppJy = OppJy_3d + OppJy_Ld | ||
+ | OppJz = OppJz_3d + OppJz_Ld | ||
+ | OppJsqr = OppJx * OppJx + OppJy * OppJy + OppJz * OppJz | ||
+ | |||
+ | -- define the coulomb operator | ||
+ | -- we here define the part depending on F0 seperately from the part depending on F2 | ||
+ | -- when summing we can put in the numerical values of the slater integrals | ||
+ | |||
+ | OppF0_3d =NewOperator(" | ||
+ | OppF2_3d =NewOperator(" | ||
+ | OppF4_3d =NewOperator(" | ||
+ | |||
+ | -- define onsite energies - crystal field | ||
+ | -- Akm = {{k1, | ||
+ | |||
+ | Akm = PotentialExpandedOnClm(" | ||
+ | OpptenDq_3d = NewOperator(" | ||
+ | OpptenDq_Ld = NewOperator(" | ||
+ | |||
+ | Akm = PotentialExpandedOnClm(" | ||
+ | OppNeg_3d = NewOperator(" | ||
+ | OppNeg_Ld = NewOperator(" | ||
+ | Akm = PotentialExpandedOnClm(" | ||
+ | OppNt2g_3d = NewOperator(" | ||
+ | OppNt2g_Ld = NewOperator(" | ||
+ | |||
+ | OppNUp_3d = NewOperator(" | ||
+ | OppNDn_3d = NewOperator(" | ||
+ | OppN_3d = OppNUp_3d + OppNDn_3d | ||
+ | OppNUp_Ld = NewOperator(" | ||
+ | OppNDn_Ld = NewOperator(" | ||
+ | OppN_Ld = OppNUp_Ld + OppNDn_Ld | ||
+ | |||
+ | -- define L-d interaction | ||
+ | Akm = PotentialExpandedOnClm(" | ||
+ | OppVeg | ||
+ | Akm = PotentialExpandedOnClm(" | ||
+ | OppVt2g = NewOperator(" | ||
+ | |||
+ | -- We follow the energy definitions as introduced in the group of G.A. Sawatzky (Groningen) | ||
+ | -- J. Zaanen, G.A. Sawatzky, and J.W. Allen PRL 55, 418 (1985) | ||
+ | -- for parameters of specific materials see | ||
+ | -- A.E. Bockquet et al. PRB 55, 1161 (1996) | ||
+ | -- After some initial discussion the energies U and Delta refer to the center of a configuration | ||
+ | -- The L^10 d^n | ||
+ | -- The L^9 d^n+1 configuration has an energy Delta | ||
+ | -- The L^8 d^n+2 configuration has an energy 2*Delta+U | ||
+ | -- | ||
+ | -- If we relate this to the onsite energy of the p and d orbitals we find | ||
+ | -- 10 eL + n ed + n(n-1) | ||
+ | -- 9 eL + (n+1) ed + (n+1)n | ||
+ | -- 8 eL + (n+2) ed + (n+1)(n+2) U/2 == 2*Delta+U | ||
+ | -- 3 equations with 2 unknowns, but with interdependence yield: | ||
+ | -- ed = (10*Delta-nd*(19+nd)*U/ | ||
+ | -- ep = nd*((1+nd)*U/ | ||
+ | -- | ||
+ | -- note that ed-ep = Delta - nd * U and not Delta | ||
+ | -- note furthermore that ep and ed here are defined for the onsite energy if the system had | ||
+ | -- locally nd electrons in the d-shell. In DFT or Hartree Fock the d occupation is in the end not | ||
+ | -- nd and thus the onsite energy of the Kohn-Sham orbitals is not equal to ep and ed in model | ||
+ | -- calculations. | ||
+ | -- | ||
+ | -- note furthermore that ep and eL actually should be different for most systems. We happily ignore this fact | ||
+ | -- | ||
+ | -- We normally take U and Delta as experimentally determined parameters | ||
+ | |||
+ | -- number of electrons (formal valence) | ||
+ | nd = 8 | ||
+ | -- parameters from experiment (core level PES) | ||
+ | U | ||
+ | Delta | ||
+ | -- parameters obtained from DFT (PRB 85, 165113 (2012)) | ||
+ | F2dd = 11.142 | ||
+ | F4dd = 6.874 | ||
+ | tenDq | ||
+ | tenDqL | ||
+ | Veg | ||
+ | Vt2g = 1.21 | ||
+ | zeta_3d = 0.081 | ||
+ | Bz = 0.000001 | ||
+ | |||
+ | ed = (10*Delta-nd*(19+nd)*U/ | ||
+ | eL = nd*((1+nd)*U/ | ||
+ | F0dd = U+(F2dd+F4dd)*2/ | ||
+ | |||
+ | Hamiltonian0 = F0dd*OppF0_3d + F2dd*OppF2_3d + F4dd*OppF4_3d + zeta_3d*Oppldots_3d + Bz*(2*OppSz_3d + OppLz_3d) | ||
+ | + tenDqL*OpptenDq_Ld + Veg * OppVeg + Vt2g * OppVt2g | ||
+ | + ed * OppN_3d + eL * OppN_Ld | ||
+ | | ||
+ | Npsi=190 | ||
+ | StartRestrictions = {NF, NB, {" | ||
+ | psiList = Eigensystem(Hamiltonian0, | ||
+ | |||
+ | file = assert( io.open(" | ||
+ | |||
+ | for i=0, 30 do | ||
+ | tenDq = 0.1*i | ||
+ | file: | ||
+ | Hamiltonian=Hamiltonian0 + tenDq * OpptenDq_3d | ||
+ | Eigensystem(Hamiltonian, | ||
+ | for key,value in pairs(psiList) do | ||
+ | energy = value * Hamiltonian * value | ||
+ | file: | ||
+ | end | ||
+ | file: | ||
+ | end | ||
+ | |||
+ | file: | ||
+ | |||
+ | gnuplotInput = [[ | ||
+ | set autoscale | ||
+ | set xtic auto | ||
+ | set ytic auto | ||
+ | set style line 1 lt 1 lw 1 lc rgb "# | ||
+ | |||
+ | set xlabel "10Dq (eV)" font " | ||
+ | set ylabel " | ||
+ | |||
+ | set out ' | ||
+ | set size 1.0, 1.0 | ||
+ | set terminal postscript portrait enhanced color " | ||
+ | |||
+ | plot for [i=2:191] " | ||
+ | ]] | ||
+ | |||
+ | -- write the gnuplot script to a file | ||
+ | file = io.open(" | ||
+ | file: | ||
+ | file: | ||
+ | |||
+ | -- call gnuplot to execute the script | ||
+ | os.execute(" | ||
+ | -- change the postscript file to pdf or eps | ||
+ | os.execute(" | ||
+ | </ | ||
+ | ### | ||
+ | |||
+ | As in example 4 Quanty returns a nice plot. Note that one can add labeling. For this have a look at example 4. | ||
+ | | {{: | ||
+ | ^Energy level diagram showing the energies of the different multiplets as a function of $10Dq$ ^ | ||
+ | |||
+ | |||
+ | ### | ||
+ | The script does not write to standard output. | ||
+ | ### | ||
+ | |||
+ | |||
+ | ===== Table of contents ===== | ||
+ | {{indexmenu> |