FCIDump
class FCIDump
Basen: object
Ein Hamilton-Operator für die elektronische Struktur im FCIDump-Format.
Begriffsbestimmung
Das FCIDump-Format wurde ursprünglich von Knowles und Handy im Jahr 1989 definiert [1]. Es handelt sich um ein weit verbreitetes Format zum Exportieren von Hamilton-Operatoren der elektronischen Struktur in eine Klartextdatei.
Die vorliegende Datenstruktur speichert lediglich die Informationen, die für die Konstruktion des sekundär quantisierten Operators relevant sind. Diese Implementierung geht jedoch über die ursprüngliche Definition hinaus, da sie das Laden beliebiger Spindaten unterstützt. Die folgende Tabelle zeigt, wie Integrale den Spinarten zugeordnet werden, je nachdem, in welche Intervalle die Indizes fallen (unter der Annahme einer Überschrift mit NORB=n):
Integraltyp | i | j | k | l |
|---|---|---|---|---|
| Konstante | ||||
| 1-Körper-Alpha | ||||
| 1-Körper-Beta | ||||
| 2-Körper-Alpha-Alpha | ||||
| 2-Körper-Alpha-Beta | ||||
| 2-Körper-Beta-Beta |
Die einzigen erforderlichen Werte sind die 1-Körper-Alpha-Spin-Integrale.
Die Zwei-Körper-Integrale werden in der Reihenfolge „ “ angegeben, was der FCIDump-Konvention entspricht.
Bereitstellung
Die Integrale werden unter Ausnutzung ihrer Permutationssymmetrie als abgeflachte Arrays gespeichert; dies entspricht auch dem Layout, das die Konstruktoren für elektronische Integrale FermionOperator erwarten. Schreibt man „ “ für die Anzahl der Orbitalen (norb) und „ “, enthält eine einzelne Datenstruktur bis zu 5 Arrays:
Kolumne „ 1 “ | Kolumne „ 2 “ | Kolumne „ 3 “ |
|---|---|---|
one_body_a | Die Integrale von „ “ für einen Teilchen mit Spin 1. | |
one_body_b | Die Integrale von „ “ für einen Teilchen mit Spin 1. | |
two_body_aa | Die 2-Körper-Integrale von „ “. | |
two_body_ab | Die 2-Körper-Integrale von „ “. | |
two_body_bb | Die 2-Körper-Integrale von „ “. |
Die 1-Body-Arrays sind das abgeflachte untere Dreieck einer -Matrix, indiziert als ia = i * (i + 1) // 2 + a mit a <= i. Die Arrays two_body_bb und two_body_aa sind 8-fach ( S8 ) symmetrisch: das abgeflachte untere Dreieck einer -Matrix, deren eigene beiden Achsen jeweils ein solches Indexpaar darstellen.
two_body_ab wird anders verpackt als seine Geschwister. Sie ist nur 4-fach ( S4 ) symmetrisch, enthält also die gesamte Matrix „ “ in zeilenorientierter Reihenfolge, indiziert als iajb = ia * npair + jb. Sein Zeilenpaar indiziert die Spinarten und sein Spaltenpaar die Spinarten ; daher ist es beim Vertauschen der beiden Paare nicht symmetrisch.
Sie können über die entsprechenden Methoden: get_one_body_tril_a(), get_one_body_tril_b(), get_two_body_tril_aa(), get_two_body_tril_ab(), und auf schreibgeschützte Kopien dieser internen Arrays zugreifen get_two_body_tril_bb().
Der 1-Körper- -Spin sowie die 2-Körper-Arrays / sind nur für eine Datei vorhanden, die uneingeschränkte Spindaten enthält. Da sie alle drei abwesend sind, wird über alle drei gleichzeitig is_unrestricted berichtet.
Die gespeicherten Werte sind die Integrale in der Form, wie sie in der Datei vorkommen. Insbesondere enthalten sie nicht den herkömmlichen Faktor „ “, der in den 2-Körper-Operatortermen vorkommt; daher beträgt FermionOperator.from_fcidump() der Koeffizient eines über gebildeten Operators die Hälfte des hier angegebenen Wertes.
Konvertierung
Operator-Implementierungen, die aus einer Instanz von konstruiert werden können, stellen FCIDump eine Klassenmethode from_fcidump bereit:
Kolumne „ 1 “ | Kolumne „ 2 “ |
|---|---|
FermionOperator.from_fcidump() | Erzeugt ein FermionOperator aus einem FCIDump. |
[ 1 ]
-
- Knowles und N. C. Handy, „Computer Physics Communications“ 54 (1989), S. 75–83.
Attribute
constant
Gibt den konstanten Energie-Offset zurück, sofern die Datei einen solchen enthält.
Dies ist der Wert der Integrallinie, deren vier Indizes alle Null sind; bei einem Hamilton-Operator der Elektronenstruktur entspricht dies der Kernabstoßungsenergie. Das ist der Fall, None wenn die Datei keine solche Zeile enthält.
FermionOperator.from_fcidump(), das diesen Wert als Identitätsglied enthält.
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.constant
0.7199689944489797
Rückgabe
Der konstante Energie-Offset oder, None wenn in der Datei kein Wert angegeben ist.
is_unrestricted
Ob diese Datenstruktur uneingeschränkte (spinabhängige) Integrale enthält.
Die Anordnungen „ “ (Spin 1, 1 Teilchen) und „ “ / „ “ (2 Teilchen) liegen genau dann vor, wenn dies der Fall ist True; sie fehlen gemeinsam.
>>> 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
Rückgabe
Ob die Beta-Spin-Integral-Arrays vorhanden sind.
ms2
Gibt das Doppelte der Spinquantenzahl zurück: .
Diese Nummer, „ “, wird aus dem MS2=2S Feld im Kopf der FCIDump-Datei extrahiert.
nelec
Gibt die Anzahl der Elektronen zurück.
Diese Zahl wird aus dem NELEC Feld im Header der FCIDump-Datei extrahiert.
norb
Gibt die Anzahl der Orbitalen zurück.
Diese Nummer, „ “, wird aus dem NORB=n Feld im Kopf der FCIDump-Datei extrahiert.
Methoden
from_file
classmethod from_file(file_path)
Analysiert eine FCIDump-Datei.
Angenommen, Sie haben eine FCIDump-Datei namens molecule.fcidump, dann wenden Sie diese Methode wie folgt an:
from qiskit_fermions.operators.library import FCIDump
fcidump = FCIDump.from_file("molecule.fcidump")Parameter
file_path – der Pfad zur FCIDump-Datei.
Rückgabe
Die erstellte Datenstruktur.
Erhöhungen
- OSError – wenn nicht
file_pathgeöffnet oder gelesen werden kann. - ValueError – wenn die Datei nicht dem FCIDump-Format entspricht (fehlende Header-Namensliste, fehlendes oder
NORBNELECFeld oder ein fehlerhaftesMS2Feld) oder wenn sie einen MO-Energiewert enthält, der noch nicht unterstützt wird.
get_one_body_tril_a
get_one_body_tril_a()
Gibt eine schreibgeschützte Kopie der -Spin-1-Körper-Integrale zurück.
Diese Methode gibt eine Kopie der internen Daten zurück.
Die Erläuterung der internen Datenstruktur hier sowie von FermionOperator.from_1body_tril_spin_sym(), das dieses Array nutzt.
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.get_one_body_tril_a().shape
(3,)
Rückgabe
Die abgeflachten, im unteren Dreieck liegenden 1-Körper-Integrale der Länge .
get_one_body_tril_b
get_one_body_tril_b()
Gibt eine schreibgeschützte Kopie der -Spin-1-Körper-Integrale zurück.
Diese Methode gibt eine Kopie der internen Daten zurück.
Die Erläuterung der internen Datenstruktur hier sowie von FermionOperator.from_1body_tril_spin(), das dieses Array nutzt.
Rückgabe
Die abgeflachten Integrale des unteren Dreiecks für ein Teilchen, mit der Länge oder None wenn ist is_unrestrictedFalse .
get_two_body_tril_aa
get_two_body_tril_aa()
Gibt eine schreibgeschützte Kopie der 2-Körper-Integrale von „ -spin“ zurück.
Die Werte entsprechen der chemischen Reihenfolge ( ) und enthalten keinen Faktor von .
Diese Methode gibt eine Kopie der internen Daten zurück.
Die Erläuterung der internen Datenstruktur hier sowie von FermionOperator.from_2body_tril_spin_sym(), das dieses Array nutzt.
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.get_two_body_tril_aa().shape
(6,)
Rückgabe
Die 8-fach symmetrischen ( S8 ) abgeflachten 2-Körper-Integrale der Länge .
get_two_body_tril_ab
get_two_body_tril_ab()
Gibt eine schreibgeschützte Kopie der 2-Körper-Integrale von „ -spin“ zurück.
Die Werte entsprechen der chemischen Reihenfolge ( ) und enthalten keinen Faktor von .
Im Gegensatz zu den anderen 2-Körper-Arrays weist dieses nur eine 4-fache ( S4 ) Symmetrie auf: Es enthält die vollständige -Matrix, deren Zeilenpaare die -Spins und deren Spaltenpaare die -Spinarten indizieren. Sie ist daher nicht symmetrisch, wenn man die beiden Paare vertauscht.
Diese Methode gibt eine Kopie der internen Daten zurück.
Die Erläuterung der internen Datenstruktur hier sowie von FermionOperator.from_2body_tril_spin(), das dieses Array nutzt.
Rückgabe
Die 4-fach symmetrischen ( S4 ) abgeflachten 2-Körper-Integrale der Länge oder None wenn ist is_unrestrictedFalse .
get_two_body_tril_bb
get_two_body_tril_bb()
Gibt eine schreibgeschützte Kopie der 2-Körper-Integrale von „ -spin“ zurück.
Die Werte entsprechen der chemischen Reihenfolge ( ) und enthalten keinen Faktor von .
Diese Methode gibt eine Kopie der internen Daten zurück.
Die Erläuterung der internen Datenstruktur hier sowie von FermionOperator.from_2body_tril_spin(), das dieses Array nutzt.
Rückgabe
Die 8-fach symmetrischen ( S8 ) abgeflachten 2-Körper-Integrale der Länge oder None wenn is_unrestricted ist False.