Mo_spin_eri vs mo_eri

I hope everyone here have had a wonderful Christmas!

I’m trying to understand what mo_spin_eri does. I was hoping that calling mints.mo_spin_eri(C,C) would give the same as mints.mo_eri(C,C,C,C), but with intertwining zeros, or a blocked matrix with a copy of the latter in the diagonal blocks and zero in the other ones.
Instead, doing something like:

mints = psi4.core.MintsHelper(wfn.basisset())
R = np.asarray(mints.mo_eri(C,C,C,C))
R2 = np.asarray(mints.mo_spin_eri(C,C))

and then printing the elements one by one, i.e.

print('R:')
for i in range(8):
    for j in range(8):
        for k in range(8):
            for l in range(8):
                print(i,j,k,l,R[i,j,k,l])

print('R2:')
for i in range(8):
    for j in range(8):
        for k in range(8):
            for l in range(8):
                print(i,j,k,l,R[i,j,k,l])

for both, gives

R:
0 0 0 0 4.126398909483814
...

R2:
...
0 1 0 1 4.126398909483814

Why is the <00|00> element of R equal to the <01|01> element of R2? I was expecting that <00|00> would be equal for both matrices.

The documentation for these functions is lacking, to say the least.

After looking at the code, I believe that mo_spin_eri returns <AA||BB> integrals, and mo_eri returns (AB|CD) integrals.

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.