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 [2025/11/20 03:29] (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> | ||