PySCF: matriz de 2 e 3 índices

Oct 03 2020

A integral de 2 elétrons de 4 índices pode ser obtida para o átomo de He com o seguinte código:

import numpy as np
from pyscf import gto, scf, ao2mo

mol = gto.Mole()
mol.atom = """
    He    0.    0.    0.
"""
mol.basis = "cc-pvdz"
mol.build()

# Run Hartree-Fock.
mf = scf.RHF(mol)
mf.kernel()

# Find electron-repulsion integrals (eri).
eri = ao2mo.kernel(mol, mf.mo_coeff)
eri = np.asarray(ao2mo.restore(1, eri, mol.nao))

Estou interessado em obter as matrizes de 2 índices (A) e 3 índices (CIAB), que podem ser usadas para formar a integral de 2 elétrons (eri) de 4 índices. Examinei a lista de possíveis meios pelos quais isso é feito no código PySCF ; no entanto, não tenho certeza da resposta correta.

Respostas

3 SusiLehtola Oct 03 2020 at 15:47

No formalismo de ajuste de densidade / resolução da identidade (RI), uma integral de dois elétrons$(ij|kl)$na base atômico-orbital é aproximado como$(ij|kl) \approx \sum_{PQ} (ij|P) (P|Q)^{-1} (Q|kl)$Onde$P$e$Q$são funções auxiliares e$(P|Q)^{-1}$é a matriz de sobreposição de Coulomb inversa.

A expressão RI pode ser escrita em uma forma semelhante à expressão de Cholesky$(ij|kl) = \sum_P L_{ij}^P L_{kl}^P$introduzindo a "matriz B"$B_{ij}^Q = \sum_P (ij|P) (P|Q)^{-1/2}$. Com a matriz B, você obtém a integral como$(ij|kl) \approx \sum_Q B_{ij}^Q B_{kl}^Q$. Usar este formulário é conveniente, pois você pode usar as mesmas implementações para Cholesky e RI.

O código de ajuste de densidade no PySCF está documentado:https://sunqm.github.io/pyscf/df.html

A pyscf.df.incore.cholesky_erifunção retorna 2D array of (naux,nao*(nao+1)/2) in C-contiguous. Isto é o$B$matriz.