# 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:

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,2,4,6,8}
IndexUp_3d={1,3,5,7,9}

-- We define several operators acting on the Ni d-shell

OppSx   =NewOperator("Sx"   ,NF, IndexUp_3d, IndexDn_3d)
OppSy   =NewOperator("Sy"   ,NF, IndexUp_3d, IndexDn_3d)
OppSz   =NewOperator("Sz"   ,NF, IndexUp_3d, IndexDn_3d)
OppSsqr =NewOperator("Ssqr" ,NF, IndexUp_3d, IndexDn_3d)
OppSplus=NewOperator("Splus",NF, IndexUp_3d, IndexDn_3d)
OppSmin =NewOperator("Smin" ,NF, IndexUp_3d, IndexDn_3d)

OppLx   =NewOperator("Lx"   ,NF, IndexUp_3d, IndexDn_3d)
OppLy   =NewOperator("Ly"   ,NF, IndexUp_3d, IndexDn_3d)
OppLz   =NewOperator("Lz"   ,NF, IndexUp_3d, IndexDn_3d)
OppLsqr =NewOperator("Lsqr" ,NF, IndexUp_3d, IndexDn_3d)
OppLplus=NewOperator("Lplus",NF, IndexUp_3d, IndexDn_3d)
OppLmin =NewOperator("Lmin" ,NF, IndexUp_3d, IndexDn_3d)

OppJx   =NewOperator("Jx"   ,NF, IndexUp_3d, IndexDn_3d)
OppJy   =NewOperator("Jy"   ,NF, IndexUp_3d, IndexDn_3d)
OppJz   =NewOperator("Jz"   ,NF, IndexUp_3d, IndexDn_3d)
OppJsqr =NewOperator("Jsqr" ,NF, IndexUp_3d, IndexDn_3d)
OppJplus=NewOperator("Jplus",NF, IndexUp_3d, IndexDn_3d)
OppJmin =NewOperator("Jmin" ,NF, IndexUp_3d, IndexDn_3d)

Oppldots=NewOperator("ldots",NF, IndexUp_3d, IndexDn_3d)

-- Next we define the Coulomb operator. The Coulomb operator is given as:
-- Sum_{i,j} e^2/|r_i-r_j|
-- 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,p_j)^* f(r_i,r_j)
-- the part depending on the angles (theta and phi) can be solved analytically.
-- The radial part (f(r_i,r_j)) is calculated  numerically and results in the Slater integrals
-- 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, F and F. F is the spherical interaction between two d electrons. F and
-- F 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("U", NF, IndexUp_3d, IndexDn_3d, {1,0,0})
OppF2 =NewOperator("U", NF, IndexUp_3d, IndexDn_3d, {0,1,0})
OppF4 =NewOperator("U", NF, IndexUp_3d, IndexDn_3d, {0,0,1})

-- 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,m1,Akm1},{k2,m2,Akm2}, ... }
Akm = PotentialExpandedOnClm("Oh",2,{0.6,-0.4});
OpptenDq = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, Akm);

-- 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("Oh",2,{1,0});
OppNeg = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, Akm);
Akm = PotentialExpandedOnClm("Oh",2,{0,1});
OppNt2g = NewOperator("CF", NF, IndexUp_3d, IndexDn_3d, Akm);

-- 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       =  0.000
-- 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://arxiv.org/abs/cond-mat/0505214
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/63
-- 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, {"1111111111",8,8}};

-- we calculate the eigen system
psiList = Eigensystem(Hamiltonian, StartRestrictions, Npsi);

-- 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, OppSsqr, OppLsqr, OppJsqr, OppSz, OppLz, Oppldots, OppF2, OppF4, OppNeg, OppNt2g};

-- next we loop over all operators and all states and print the expectation value
print(" <E>    <S^2>  <L^2>  <J^2>  <S_z>  <L_z>  <l.s>  <F> <F> <Neg>  <Nt2g>");
for i = 1,#psiList do
for j = 1,#oppList do
expectationvalue = Chop(psiList[i]*oppList[j]*psiList[i])
io.write(string.format("%6.3f ",expectationvalue))
end
io.write("\n")
end

The output is:

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:        45        45 last variance  1.406559456443911E+00
Start of BlockOperatorPsiSerialRestricted
Start of BlockGroundState. Converge 45 states to an energy with relative variance smaller than  1.490116119384766E-06

Start of BlockOperatorPsiSerial
<E>    <S^2>  <L^2>  <J^2>  <S_z>  <L_z>  <l.s>  <F> <F> <Neg>  <Nt2g>
-1.387  2.000 12.000 20.000 -1.000 -3.000 -1.500 -1.020 -0.878  3.500  4.500
-1.387  2.000 12.000 18.000 -1.000 -2.000 -1.000 -1.020 -0.878  2.500  5.500
-1.387  2.000 12.000 14.000 -0.000 -3.000 -0.000 -1.020 -0.878  3.500  4.500
-1.387  2.000 12.000 16.000 -1.000 -1.000 -0.500 -1.020 -0.878  3.300  4.700
-1.387  2.000 12.000 14.000  0.000 -2.000  0.000 -1.020 -0.878  2.500  5.500
-1.387  2.000 12.000 14.000 -1.000  0.000  0.000 -1.020 -0.878  3.800  4.200
-1.387  2.000 12.000  8.000  1.000 -3.000  1.500 -1.020 -0.878  3.500  4.500
-1.387  2.000 12.000 12.046 -0.977  0.954  0.488 -1.020 -0.878  3.300  4.700
-1.387  2.000 12.000 13.954 -0.023 -0.954  0.012 -1.020 -0.878  3.300  4.700
-1.387  2.000 12.000 10.001  0.980 -1.959  1.000 -1.020 -0.878  2.500  5.500
-1.387  2.000 12.000 13.999  0.000 -0.000  0.000 -1.020 -0.878  3.800  4.200
-1.387  2.000 12.000 10.000 -0.980  1.959  1.000 -1.020 -0.878  2.500  5.500
-1.387  2.000 12.000  8.102 -0.950  2.901  1.474 -1.020 -0.878  3.495  4.505
-1.387  2.000 12.000 13.995 -0.001  1.002  0.001 -1.020 -0.878  3.300  4.700
-1.387  2.000 12.000 11.902  0.951 -0.902  0.524 -1.020 -0.878  3.305  4.695
-1.387  2.000 12.000 14.000  0.000  2.000  0.000 -1.020 -0.878  2.500  5.500
-1.387  2.000 12.000 14.000  1.000  0.000  0.000 -1.020 -0.878  3.800  4.200
-1.387  2.000 12.000 14.000  0.000  3.000  0.000 -1.020 -0.878  3.500  4.500
-1.387  2.000 12.000 16.000  1.000  1.000 -0.500 -1.020 -0.878  3.300  4.700
-1.387  2.000 12.000 18.000  1.000  2.000 -1.000 -1.020 -0.878  2.500  5.500
-1.387  2.000 12.000 20.000  1.000  3.000 -1.500 -1.020 -0.878  3.500  4.500
0.451  0.000  6.000  6.000  0.000 -2.000  0.000 -0.918 -0.776  3.143  4.857
0.451  0.000  6.000  6.000  0.000 -1.000  0.000 -0.918 -0.776  3.429  4.571
0.451  0.000  6.000  6.000  0.000  0.000 -0.000 -0.918 -0.776  2.857  5.143
0.451  0.000  6.000  6.000  0.000  1.000 -0.000 -0.918 -0.776  3.429  4.571
0.451 -0.000  6.000  6.000  0.000  2.000  0.000 -0.918 -0.776  3.143  4.857
0.854  2.000  2.000  6.000 -1.000 -1.000 -0.500 -0.714 -1.048  3.200  4.800
0.854  2.000  2.000  4.000 -1.000  0.000  0.000 -0.714 -1.048  3.200  4.800
0.854  2.000  2.000  2.000 -1.000  1.000  0.500 -0.714 -1.048  3.200  4.800
0.854  2.000  2.000  4.000 -0.000 -1.000  0.000 -0.714 -1.048  3.200  4.800
0.854  2.000  2.000  4.000  0.000  0.000 -0.000 -0.714 -1.048  3.200  4.800
0.854  2.000  2.000  4.000  0.000  1.000  0.000 -0.714 -1.048  3.200  4.800
0.854  2.000  2.000  2.000  1.000 -1.000  0.500 -0.714 -1.048  3.200  4.800
0.854  2.000  2.000  4.000  1.000  0.000  0.000 -0.714 -1.048  3.200  4.800
0.854  2.000  2.000  6.000  1.000  1.000 -0.500 -0.714 -1.048  3.200  4.800
1.497  0.000 20.000 20.000  0.000 -4.000  0.000 -0.776 -0.855  3.000  5.000
1.497 -0.000 20.000 20.000  0.000 -3.000  0.000 -0.776 -0.855  3.500  4.500
1.497 -0.000 20.000 20.000  0.000 -2.000  0.000 -0.776 -0.855  3.357  4.643
1.497  0.000 20.000 20.000  0.000 -1.000  0.000 -0.776 -0.855  3.071  4.929
1.497  0.000 20.000 20.000  0.000  0.000  0.000 -0.776 -0.855  2.943  5.057
1.497 -0.000 20.000 20.000  0.000  1.000  0.000 -0.776 -0.855  3.071  4.929
1.497  0.000 20.000 20.000  0.000  2.000  0.000 -0.776 -0.855  3.357  4.643
1.497  0.000 20.000 20.000  0.000  3.000  0.000 -0.776 -0.855  3.500  4.500
1.497  0.000 20.000 20.000  0.000  4.000  0.000 -0.776 -0.855  3.000  5.000
5.719  0.000 -0.000 -0.000  0.000  0.000  0.000 -0.571 -0.571  3.200  4.800 

Workshops

Script versions External programs Privacy

##### Tools 