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 |
|---|---|---|---|---|
| Costante | ||||
| alfa a 1 corpo | ||||
| beta a 1 corpo | ||||
| Alfa-alfa a due corpi | ||||
| Alfa-beta a due corpi | ||||
| beta-beta a due corpi |
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 , 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 per il numero di orbitali (norb) e , una singola struttura dati contiene fino a 5 array:
Rubrica 1 | Rubrica 2 | Rubrica 3 |
|---|---|---|
one_body_a | : integrali a un corpo con spin 1. | |
one_body_b | : integrali a un corpo con spin 1. | |
two_body_aa | : integrali a due corpi. | |
two_body_ab | : integrali a due corpi. | |
two_body_bb | : integrali a due corpi. |
Gli array a 1 corpo corrispondono al triangolo inferiore appiattito di una matrice , 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 , i cui due assi corrispondono ciascuno a una di queste coppie di indici.
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 in ordine "row-major", indicizzata come iajb = ia * npair + jb. La coppia di righe indica le specie con spin , mentre la coppia di colonne indica le specie con spin ; pertanto, non è simmetrica rispetto allo scambio delle due coppie.
È 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 a 1 corpo e le matrici a 2 corpi / 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 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:
Rubrica 1 | Rubrica 2 |
|---|---|
FermionOperator.from_fcidump() | Crea un FermionOperator da un FCIDump. |
[ 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.
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 " " (spin 1) e a due corpi " " / " " 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, .
Questo numero, , è 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, , è 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
NELECcampoNORBo, oppure campoMS2non 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 -spin 1.
Questo metodo restituisce una copia dei dati interni.
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 .
get_one_body_tril_b
get_one_body_tril_b()
Restituisce una copia in sola lettura degli integrali a un corpo di -spin 1.
Questo metodo restituisce una copia dei dati interni.
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 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 -spin.
I valori sono espressi secondo il sistema di ordinazione delle farmacie ( ) e non includono il fattore di .
Questo metodo restituisce una copia dei dati interni.
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 .
get_two_body_tril_ab
get_two_body_tril_ab()
Restituisce una copia in sola lettura degli integrali a due corpi di -spin.
I valori sono espressi secondo il sistema di ordinazione delle farmacie ( ) e non includono il fattore di .
A differenza delle altre matrici a due corpi, questa presenta una simmetria solo quadrupla ( S4 ): contiene l’ intera matrice , in cui le coppie di righe indicano lo spin e le coppie di colonne indicano le specie di spin . Non è quindi simmetrico rispetto allo scambio delle due coppie.
Questo metodo restituisce una copia dei dati interni.
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 , 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 -spin.
I valori sono espressi secondo il sistema di ordinazione delle farmacie ( ) e non includono il fattore di .
Questo metodo restituisce una copia dei dati interni.
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 , oppure None quando è is_unrestricted False.