PySCF: valores propios, ocupación no entera, cálculos CISD y listas congeladas
He estado realizando cálculos CISD con PySCF y tengo una consulta sobre la ocupación de los orbitales. Aquí, las ocupaciones se calculan a partir de los valores propios de la matriz de densidad restringida de 1 electrón.
Tomando la molécula de fluoruro de hidrógeno como ejemplo, así es como se establece el cálculo:
import numpy as np
from numpy import linalg as LA
from pyscf import gto, scf, lib, ci
lib.num_threads(1)
geometry = '''
H 0.0 0.0 0.0
F 0.0 0.0 1.1
'''
molecule = gto.Mole()
molecule.atom = geometry
molecule.basis = '3-21g'
molecule.build()
occupied_space = [occ for occ in range(int(molecule.nelectron * .5))]
print(occupied_space)
mf = scf.RHF(molecule)
mf.scf()
my_ci = ci.CISD(mf=mf,
frozen=None,
mo_coeff=None,
mo_occ=None)
my_ci.kernel()
rdm1 = my_ci.make_rdm1()
evals = LA.eigvalsh(rdm1)[::-1]
print(evals)
Cuando se establece el argumento CISD frozen = None
, se obtienen los siguientes valores propios:
[1.99994686e+00 1.99455156e+00 1.99008540e+00 1.99008540e+00
1.96069255e+00 3.79033668e-02 9.52687575e-03 9.52687575e-03
5.33169546e-03 1.84641520e-03 5.03007156e-04]
Esto muestra una clara ocupación no entera de todos los orbitales ocupados/centrales.
Si uno pone frozen = [0, 1, 2, 3]
; los valores propios/ocupaciones son:
[2.00000000e+00 2.00000000e+00 2.00000000e+00 2.00000000e+00
1.99475055e+00 4.28307558e-03 7.83866124e-04 1.23523177e-04
4.09351267e-05 1.78677364e-05 1.79726837e-07]
Esto muestra que se permite que el HOMO se relaje, manchando la ocupación en los orbitales virtuales.
La parte realmente confusa es cuando frozen = [1, 2, 3, 4]
; lo que da los siguientes valores propios:
[2.00000000e+00 2.00000000e+00 2.00000000e+00 2.00000000e+00
1.99998097e+00 7.30194999e-06 4.82147944e-06 3.45239124e-06
3.45239124e-06 9.06692496e-12 1.69884163e-12]
Aquí, el HOMO (orbital 4, que debe congelarse) tiene una ocupación no entera, y el primer orbital ocupado no congelado (orbital 0) conserva una ocupación entera completa.
Mi pregunta tiene dos componentes. ¿Qué está causando la mancha de ocupación en este cálculo CISD (ya que este no es un cálculo DFT), y por qué el HOMO se relaja cuando frozen = [1, 2, 3, 4]
?
Respuestas
No se debe confundir la "difuminación" utilizada para facilitar la convergencia de campo autoconsistente, especialmente para los cálculos funcionales de densidad en sistemas periódicos, y el papel de los números de ocupación orbital natural fraccional que surgen naturalmente de la naturaleza de muchas partículas de la función de onda exacta.
Los orbitales naturales normalmente se ordenan en magnitud decreciente. De hecho, apostaría una cerveza a PySCF reordenando los orbitales naturales para que el orbital congelado 2 al 5 se reordenen hacia abajo. Los números de ocupación son claramente diferentes entre los cálculos, y verá que hay una diferencia significativa en la fuerza de la correlación entre el HOMO y el orbital central más profundo: cuando solo correlaciona el HOMO, el número de ocupación para el orbital natural desocupado más bajo ( LUNO) es$4.28\times10^{-3}$, mientras que cuando solo correlaciona el orbital F 1s, el LUNO es$7.30\times10^{-6}$.