Differences
This shows you the differences between two versions of the page.
| documentation:tutorials:nio_crystal_field:groundstate [2016/10/08 18:07] – created Maurits W. Haverkort | documentation:tutorials:nio_crystal_field:groundstate [2025/11/20 03:29] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | {{indexmenu_n> | ||
| + | ====== Groundstate ====== | ||
| + | ### | ||
| + | The first example looks at the ground-state of NiO. Ni in NiO is $2+$ and thus has locally $8$ electrons in the Ni $d$-shell. The lowest state has two holes in the $e_g$ orbitals with $S=1$ ($\langle S^2\rangle=1(2+1)=2$). The output of this example shows several expectation values of the $45$ multiplets available in the $d^8$ sector. | ||
| + | ### | ||
| + | |||
| + | ### | ||
| + | The input is: | ||
| + | <code Quanty Groundstate.Quanty> | ||
| + | -- This tutorial calculates the ground-state of NiO within the crystal-field theory approximation | ||
| + | |||
| + | -- Within crystal-field theory the solid is approximated by a single atom in an effective | ||
| + | -- potential. Although an extremely crude approximation it is useful for some cases. | ||
| + | -- For correlated transition metal insulators it captures the right symmetry of the | ||
| + | -- localized open d-shell. It is useful to determine magnetic g-factors, energies of d-d | ||
| + | -- excitations or core level x-ray absorption. (2p to 3d excitations L23 edges) | ||
| + | |||
| + | -- One should notice that the effective crystal-field potential is an effective potential | ||
| + | -- it is there to mimic the interaction with neighboring ligand atoms. In real materials | ||
| + | -- there do not exist such large electro static potentials. | ||
| + | |||
| + | -- 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. | ||
| + | NF=10 | ||
| + | NB=0 | ||
| + | IndexDn_3d={0, | ||
| + | IndexUp_3d={1, | ||
| + | |||
| + | -- We define several operators acting on the Ni d-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(" | ||
| + | |||
| + | -- Next we define the Coulomb operator. The Coulomb operator is given as: | ||
| + | -- Sum_{i,j} e^2/ | ||
| + | -- This is actually a nastier sum than one might think as r_i-r_j=0 for r_i=r_j. | ||
| + | -- The solution is to expand this operator on spherical harmonics | ||
| + | -- ~ sum_k,m Y(t_i,p_i) Y(t_j, | ||
| + | -- the part depending on the angles (theta and phi) can be solved analytically. | ||
| + | -- The radial part (f(r_i, | ||
| + | -- The sum runs in principle over all possible values of k. The expansion coefficient k is | ||
| + | -- related to the momentum transfer of two electrons when they scatter due to the Coulomb | ||
| + | -- interaction. There is a maximal transfer of momentum that can happen between two electrons | ||
| + | -- which is 2l. Furthermore k has to be even due to parity. | ||
| + | -- There are thus l+1 = 3 Slater integrals for two electrons in the d-shell. | ||
| + | -- F[0], F[2] and F[4]. F[0] is the spherical interaction between two d electrons. F[2] and | ||
| + | -- F[4] represent interaction or scattering processes whereby the electrons exchange an angular | ||
| + | -- momentum of 2 or 4. | ||
| + | -- | ||
| + | -- We here define the part depending on F0, F2 and F4 separately. | ||
| + | -- when summing we can put in the numerical values | ||
| + | -- of the slater integrals. | ||
| + | OppF0 =NewOperator(" | ||
| + | OppF2 =NewOperator(" | ||
| + | OppF4 =NewOperator(" | ||
| + | |||
| + | -- Next we need to define the crystal field. | ||
| + | -- The crystal-field is a potential that lifts the degeneracy of the d electrons. | ||
| + | -- There are several ways to add such an interaction. We here follow the classical | ||
| + | -- notation as for example used in Ballhausen or other textbooks on crystal-field theory. | ||
| + | -- We expand the crystal-field potential on (renormalized) spherical harmonics and | ||
| + | -- enter the expansion coefficients of this potential. | ||
| + | |||
| + | -- For specific symmetries there are relations between the different expansion coefficients. | ||
| + | -- The function PotentialExpandedOnClm takes as an input the energies of the eigen-orbitals | ||
| + | -- and creates the potential expanded on spherical harmonics. The order of the eigen-energies | ||
| + | -- is the same as used in most point-group tables. (in cubic symmetry it is eg before t2g) | ||
| + | |||
| + | -- We here create an operator that splits the d-shell into t2g orbitals at an energy of -0.4 | ||
| + | -- and eg orbitals at an energy of 0.6, such that the total splitting is one and the center | ||
| + | -- of gravity is not changed. One can change the total splitting by multiplying this operator | ||
| + | |||
| + | -- Akm = {{k1, | ||
| + | Akm = PotentialExpandedOnClm(" | ||
| + | OpptenDq = NewOperator(" | ||
| + | |||
| + | -- We do not only want to give the t2g and eg electrons a different energy, it is also nice | ||
| + | -- to define operators that count the number of t2g and eg electrons. If we define an operator | ||
| + | -- where the eg electrons have an onsite energy of 1 and the t2g electrons have an onsite | ||
| + | -- energy of 0 then the expectation value of such an operator is proportional to the total | ||
| + | -- number of eg electrons. This is what we do in the next 4 lines, once to get an operator | ||
| + | -- that counts the number of eg electrons, once to create an operator that counts the number | ||
| + | -- of t2g electrons | ||
| + | |||
| + | Akm = PotentialExpandedOnClm(" | ||
| + | OppNeg = NewOperator(" | ||
| + | Akm = PotentialExpandedOnClm(" | ||
| + | OppNt2g = NewOperator(" | ||
| + | |||
| + | -- 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/ | ||
| + | -- tenDq in NiO is 1.1 eV as can be seen in optics or using IXS to measure d-d excitations | ||
| + | tenDq = 0 | ||
| + | -- the Ni 3d spin-orbit is small but finite | ||
| + | zeta_3d = 0*0.081 | ||
| + | -- we add a small magnetic field | ||
| + | Bz = 0.000001 | ||
| + | -- note that all energies are in units of electron volt. (tesla to eV is EnergyUnits.Tesla.value = 5.788.... E-5) | ||
| + | |||
| + | -- 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) | ||
| + | |||
| + | -- we now can create the lowest Npsi eigenstates: | ||
| + | Npsi=45; | ||
| + | -- in order to make sure we have a filling of 8 | ||
| + | -- electrons we need to define some restrictions | ||
| + | StartRestrictions = {NF, NB, {" | ||
| + | |||
| + | -- we calculate the eigen system | ||
| + | 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 | ||
| + | </ | ||
| + | ### | ||
| + | |||
| + | ### | ||
| + | The output is: | ||
| + | <file Quanty_Output Groundstate.out> | ||
| + | Start of BlockGroundState. Converge 45 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 45 states to an energy with relative variance smaller than 1.490116119384766E-06 | ||
| + | |||
| + | Start of BlockOperatorPsiSerial | ||
| + | < | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | -1.387 | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | 0.451 -0.000 | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | 1.497 -0.000 20.000 20.000 | ||
| + | 1.497 -0.000 20.000 20.000 | ||
| + | | ||
| + | | ||
| + | 1.497 -0.000 20.000 20.000 | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | ### | ||
| + | |||
| + | |||
| + | ===== Table of contents ===== | ||
| + | {{indexmenu> | ||