PySCF: autovalori, occupazione non intera, calcoli CISD e liste bloccate

Aug 20 2020

Ho eseguito calcoli CISD con PySCF e ho una domanda sull'occupazione degli orbitali. Qui, le occupazioni sono calcolate dagli autovalori della matrice di densità ristretta di 1 elettrone.


Prendendo come esempio la molecola di acido fluoridrico, ecco come viene impostato il calcolo:

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)

Quando l'argomento CISD frozen = Noneè impostato, si ottengono i seguenti autovalori:

[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]

Questo mostra una chiara occupazione non intera di tutti gli orbitali occupati/core.

Se uno imposta frozen = [0, 1, 2, 3]; gli autovalori/occupazioni sono:

[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]

Ciò dimostra che l'HOMO può rilassarsi, spalmando l'occupazione negli orbitali virtuali.

La parte veramente confusa è quando frozen = [1, 2, 3, 4]; che fornisce i seguenti autovalori:

[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]

Qui, l'HOMO (orbitale 4, che dovrebbe essere congelato) ha un'occupazione non intera e il primo orbitale occupato non congelato (orbitale 0) mantiene un'occupazione intera intera.


La mia domanda ha due componenti. Cosa sta causando la sbavatura dell'occupazione in questo calcolo CISD (poiché questo non è un calcolo DFT) e perché l'HOMO si rilassa quando frozen = [1, 2, 3, 4]?

Risposte

6 SusiLehtola Aug 20 2020 at 19:55

Non bisogna confondere la "sbavatura" utilizzata per facilitare la convergenza di campo autoconsistente, in particolare per i calcoli funzionali di densità nei sistemi periodici, e il ruolo dei numeri di occupazione orbitale naturale frazionaria che derivano naturalmente dalla natura a molte particelle della funzione d'onda esatta.

Gli orbitali naturali sono tipicamente ordinati in grandezza decrescente. In effetti, scommetterei una birra su PySCF che riordina gli orbitali naturali in modo che il secondo e il quinto orbitale congelato vengano riordinati verso il basso. I numeri di occupazione sono chiaramente diversi tra i calcoli e vedi che c'è una differenza significativa nella forza della correlazione tra l'HOMO e l'orbitale centrale più profondo: quando correli solo l'HOMO, il numero di occupazione per l'orbitale naturale non occupato più basso ( LUNO) è$4.28\times10^{-3}$, mentre quando correli solo l'orbitale F 1s il LUNO è$7.30\times10^{-6}$.