Skip to main content
IBM Quantum Platform

FCIDump

class FCIDump

Basi: object

Un hamiltoniano della struttura elettronica in formato FCIDump.


Definizione

Il formato FCIDump è stato originariamente definito da Knowles e Handy nel 1989. [1] Si tratta di un formato molto diffuso per esportare gli hamiltoniani della struttura elettronica in un file di testo semplice.

L'attuale struttura dei dati memorizza solo le informazioni rilevanti per la costruzione dell'operatore di seconda quantizzazione. Tuttavia, questa implementazione va oltre la definizione originale, in quanto consente il caricamento di dati di spin senza alcuna restrizione. La tabella seguente illustra come gli integrali siano associati alle specie di spin in base agli intervalli in cui ricadono gli indici (ipotizzando un’intestazione con NORB=n):

Tipo integrale
i
j
k
l
Costante0{0}0{0}0{0}0{0}
alfa a 1 corpo0{0}0{0}[1,n][1,n][1,n][1,n]
beta a 1 corpo0{0}0{0}[n+1,2n][n+1,2n][n+1,2n][n+1,2n]
Alfa-alfa a due corpi[1,n][1,n][1,n][1,n][1,n][1,n][1,n][1,n]
Alfa-beta a due corpi[1,n][1,n][1,n][1,n][n+1,2n][n+1,2n][n+1,2n][n+1,2n]
beta-beta a due corpi[n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n]

Gli unici valori richiesti sono gli integrali di spin alfa a un corpo.

Gli integrali a due corpi sono riportati nell’ordine utilizzato dai chimici, ovvero (ij∣kl)(ij|kl), in linea con la convenzione FCIDump.


Implementazione

Gli integrali vengono memorizzati come array appiattiti sfruttando la loro simmetria permutazionale; questa è anche la struttura prevista dai costruttori di integrali FermionOperator elettronici. Scrivendo nn per il numero di orbitali (norb) e npair=n(n+1)/2\text{npair} = n (n + 1) / 2, una singola struttura dati contiene fino a 5 array:

Rubrica 1
Rubrica 2
Rubrica 3
one_body_anpair\text{npair}α\alpha : integrali a un corpo con spin 1.
one_body_bnpair\text{npair}β\beta : integrali a un corpo con spin 1.
two_body_aanpair(npair+1)/2\text{npair} (\text{npair} + 1) / 2αα\alpha\alpha : integrali a due corpi.
two_body_abnpair2\text{npair}^2αβ\alpha\beta : integrali a due corpi.
two_body_bbnpair(npair+1)/2\text{npair} (\text{npair} + 1) / 2ββ\beta\beta : integrali a due corpi.

Gli array a 1 corpo corrispondono al triangolo inferiore appiattito di una matrice (n,n)(n, n), indicizzati come ia = i * (i + 1) // 2 + a con a <= i. Le two_body_bb matrici two_body_aa e sono simmetriche di ordine 8 ( S8 ): il triangolo inferiore appiattito di una matrice (npair,npair)(\text{npair}, \text{npair}), i cui due assi corrispondono ciascuno a una di queste coppie di indici.

Avvertenza

two_body_ab è confezionato in modo diverso rispetto agli altri prodotti della stessa linea. È simmetrica solo rispetto a 4 assi ( S4 ), quindi contiene l' intera matrice (npair,npair)(\text{npair}, \text{npair}) in ordine "row-major", indicizzata come iajb = ia * npair + jb. La coppia di righe indica le specie con spin α\alpha, mentre la coppia di colonne indica le specie con spin β\beta; pertanto, non è simmetrica rispetto allo scambio delle due coppie.

Nota

È possibile accedere a copie in sola lettura di questi array interni tramite i rispettivi metodi: get_one_body_tril_a(), get_one_body_tril_b(), get_two_body_tril_aa(), get_two_body_tril_ab(), e get_two_body_tril_bb().

Lo spin β\beta a 1 corpo e le matrici a 2 corpi αβ\alpha\beta / ββ\beta\beta sono presenti solo in un file contenente dati di spin senza restrizioni. Sono tutti e tre assenti, quindi si is_unrestricted parla di tutti e tre contemporaneamente.

I valori memorizzati sono gli integrali così come compaiono nel file. In particolare, essi non presentano il fattore convenzionale di 12\frac{1}{2} presente nei termini dell'operatore a due corpi; pertanto, il coefficiente di un operatore costruito tramite FermionOperator.from_fcidump() è pari alla metà del valore corrispondente riportato qui.


Conversione

Le implementazioni dell'operatore che possono essere costruite a partire da un'istanza di forniscono FCIDump un metodo from_fcidump di classe:

[ 1 ]

    1. Knowles e N. C. Handy, Computer Physics Communications 54 (1989) 75-83.

Attributi

constant

Restituisce l'offset energetico costante, se il file ne contiene uno.

Questo è il valore della linea integrale i cui quattro indici sono tutti pari a zero, che, nel caso di un hamiltoniano di struttura elettronica, corrisponde all'energia di repulsione nucleare. Ciò avviene None quando il file non contiene una riga di questo tipo.

Vedi anche

FermionOperator.from_fcidump(), che include questo valore come termine identitario.

>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.constant
0.7199689944489797

Risultati

L'offset di energia costante, ovvero None quando il file non ne fornisce alcuno.

is_unrestricted

Se questa struttura dati contenga integrali senza restrizioni (dipendenti dallo spin).

Le configurazioni a un corpo " β\beta " (spin 1) e a due corpi " αβ\alpha\beta " / " ββ\beta\beta " sono presenti esattamente quando vale questa condizione True; sono invece assenti entrambe contemporaneamente.

>>> from qiskit_fermions.operators.library import FCIDump
>>> FCIDump.from_file("tests/h2.fcidump").is_unrestricted
False
>>> FCIDump.from_file("tests/heh.fcidump").is_unrestricted
True

Risultati

Se sono presenti matrici di integrali di spin beta.

ms2

Restituisce il doppio del numero quantico di spin, 2S2S.

Questo numero, 2S2S, è tratto dal campo MS2=2S presente nell'intestazione del file FCIDump.

nelec

Restituisce il numero di elettroni.

Questo numero viene estratto dal campo NELEC presente nell'intestazione del file FCIDump.

norb

Restituisce il numero di orbitali.

Questo numero, nn, è tratto dal campo NORB=n presente nell'intestazione del file FCIDump.


Metodi

from_file

classmethod from_file(file_path)

Analizza un file FCIDump.

Supponendo che tu abbia un file FCIDump denominato molecule.fcidump, puoi utilizzare questo metodo nel modo seguente:

from qiskit_fermions.operators.library import FCIDump

fcidump = FCIDump.from_file("molecule.fcidump")

Parametri

file_path – il percorso del file FCIDump.

Risultati

La struttura dati realizzata.

Aumenti

  • OSError – se non file_path è possibile aprire o leggere il file.
  • ValueError – se il file non rispetta il formato FCIDump (mancanza dell'elenco dei nomi nell'intestazione, mancanza del NELEC campo NORB o, oppure campo MS2 non valido), oppure se contiene un valore di energia MO, che non è ancora supportato.

get_one_body_tril_a

get_one_body_tril_a()

Restituisce una copia in sola lettura degli integrali a un corpo di α\alpha -spin 1.

Nota

Questo metodo restituisce una copia dei dati interni.

Vedi anche

La spiegazione della struttura interna dei dati, qui, e FermionOperator.from_1body_tril_spin_sym(), che utilizza questo array.

>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.get_one_body_tril_a().shape
(3,)

Risultati

Gli integrali a un corpo della forma triangolare inferiore appiattita, di lunghezza npair=n(n+1)/2\text{npair} = n (n + 1) / 2.

get_one_body_tril_b

get_one_body_tril_b()

Restituisce una copia in sola lettura degli integrali a un corpo di β\beta -spin 1.

Nota

Questo metodo restituisce una copia dei dati interni.

Vedi anche

La spiegazione della struttura interna dei dati, qui, e FermionOperator.from_1body_tril_spin(), che utilizza questo array.

Risultati

Gli integrali di un corpo a forma di triangolo rovesciato, di lunghezza npair=n(n+1)/2\text{npair} = n (n + 1) / 2 o quando None è is_unrestricted False.

get_two_body_tril_aa

get_two_body_tril_aa()

Restituisce una copia in sola lettura degli integrali a due corpi di αα\alpha\alpha -spin.

I valori sono espressi secondo il sistema di ordinazione delle farmacie ( (ij∣kl)(ij|kl) ) e non includono il fattore di 12\frac{1}{2}.

Nota

Questo metodo restituisce una copia dei dati interni.

Vedi anche

La spiegazione della struttura interna dei dati, qui, e FermionOperator.from_2body_tril_spin_sym(), che utilizza questo array.

>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.get_two_body_tril_aa().shape
(6,)

Risultati

Gli integrali a due corpi appiattiti, simmetrici in otto direzioni ( S8 ), di lunghezza npair(npair+1)/2\text{npair} (\text{npair} + 1) / 2.

get_two_body_tril_ab

get_two_body_tril_ab()

Restituisce una copia in sola lettura degli integrali a due corpi di αβ\alpha\beta -spin.

I valori sono espressi secondo il sistema di ordinazione delle farmacie ( (ij∣kl)(ij|kl) ) e non includono il fattore di 12\frac{1}{2}.

Avvertenza

A differenza delle altre matrici a due corpi, questa presenta una simmetria solo quadrupla ( S4 ): contiene l’ intera matrice (npair,npair)(\text{npair}, \text{npair}), in cui le coppie di righe indicano lo spin α\alpha e le coppie di colonne indicano le specie di spin β\beta. Non è quindi simmetrico rispetto allo scambio delle due coppie.

Nota

Questo metodo restituisce una copia dei dati interni.

Vedi anche

La spiegazione della struttura interna dei dati, qui, e FermionOperator.from_2body_tril_spin(), che utilizza questo array.

Risultati

Gli integrali a due corpi appiattiti con simmetria quadrupla ( S4 ), di lunghezza npair2\text{npair}^2, oppure None quando è is_unrestricted False.

get_two_body_tril_bb

get_two_body_tril_bb()

Restituisce una copia in sola lettura degli integrali a due corpi di ββ\beta\beta -spin.

I valori sono espressi secondo il sistema di ordinazione delle farmacie ( (ij∣kl)(ij|kl) ) e non includono il fattore di 12\frac{1}{2}.

Nota

Questo metodo restituisce una copia dei dati interni.

Vedi anche

La spiegazione della struttura interna dei dati, qui, e FermionOperator.from_2body_tril_spin(), che utilizza questo array.

Risultati

Gli integrali a due corpi appiattiti con simmetria ottupla ( S8 ), di lunghezza npair(npair+1)/2\text{npair} (\text{npair} + 1) / 2, oppure None quando è is_unrestricted False.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.