Coulomb Operator

asked by Riccardo Piombo (2019/11/15 17:41)

Dear all, when I define Coulombs operators for a d shell

OppF0 = NewOperator("U", NF, IndexUp, IndexDn, {1,0,0})
OppF2 = NewOperator("U", NF, IndexUp, IndexDn, {0,1,0})
OppF4 = NewOperator("U", NF, IndexUp, IndexDn, {0,0,1})

what does the last list (for example {1,0,0}) mean?

and why into the program which computes the eigenstates of the coulomb operator at some point I find it written

– Number of allowed Slater integrals is L + 1

SlaterInts [1] = 20

for i = 2, Nk do

  SlaterInts [i] = SlaterInts [i-1] / 2


where does that “20” come from?

Thanks in advance



, 2019/11/18 12:06, 2019/11/18 12:13

The Coulomb interaction is given by $\frac{1}{r_i - r_j}$. In order to make this operator calculable we expand this function on spherical harmonics. See the documentation for more information on how and why we do this.

After such an expansion the angular part can be solved analytical. The radial part results in integrals that depend on the radial functions and the multipole moment of the expansion on spherical harmonics. For the interaction between two $d$ electrons we have a monopole ($k=0$), quadrupole ($k=2$) and $k=4$ interaction.

Within a single shell these multi-pole dependent integrals are called the Slater integrals ($F[k]$). The function NewOperator(“U”, NF, IndexUp, IndexDn, {F[0], F[2], F[4]}) takes these Slater integrals as an input and you provide them as a list of allowed integrals.

See the documentation of the standard operators for more information.

The example in the tutorials does not calculate the multiplets (Eigen-states of the Coulomb operator) for a real system. Without radial wave-functions we take dummy values for the Slater integrals. It turns out that within crystal field theory $F[0]$ is unimportant as the number of $d$ electrons is constant. $F[2]$ is around 10 for the transition metals and $F[4]$ is roughly 6.25 for the transition metals. The values taken here roughly (but indeed only very roughly) follow these values. Good enough for a simple example, but lacking material specificity.

Best wishes, Maurits

, 2019/11/26 14:20

Thanks a lot for your reply

Cheers Riccardo

, 2019/11/26 16:02

Still referring to the program that calculates the multiplet terms, why if I put in l=1 and Nelec=6 instead of giving me the 1S_0 term only, the program gives the following error: Eigenstates_of_Coulomb.Quanty 141: Error operation “.1()” not defined on wavefunction

Thanks in advance

, 2020/02/14 22:17, 2020/02/14 22:20

Riccardo. This happens because for l=1 and Nelec=6 is a filled shell and there is only one Eigenvector (which is generate by the function EigenSystem). Therefore, the variable psiEigen is a “wavefunction”. For other cases, where there are more then one Eigenvector, the variable psiEigen is a table of Eigenvectors (each table entry is a eigenvector).

To circumvent this you could make the variable psiEigen a table by adding this piece of code:

psiEigen = Eigensystem(Ham, Restrictions, Nstates);
-- Add these lines:
if (type(psiEigen)=="userdata") then
  psi_temporary = psiEigen
  psiEigen = {}
  psiEigen[1] = psi_temporary
, 2020/04/15 15:41

I picked up this tutorial again because there were things I didn't understand. In analyzing it I came across this equation L = floor(0.5 * (sqrt(abs(L2) * 4 +1) - 1) + 0.5) Where does it come from?

, 2021/02/08 22:01

The expectation value of the operator <L^2> is (L(L+1)) such that L=0.5 (sqrt(4 L2 + 1)-1). The tutorial wants integers for L which is needed to make term symbols. Note that with a finite spin-orbit coupling the expectation value of L is not integer. The function floor(x+0.5) rounds x to the nearest integer

You could leave a comment if you were logged in.