FCIDump
class FCIDump
Bases : object
Un hamiltonien de structure électronique au format FCIDump.
Définition
Le format FCIDump a été défini à l'origine par Knowles et Handy, en 1989 [1]. Il s'agit d'un format largement utilisé pour exporter des hamiltoniens de structure électronique dans un fichier en texte brut.
La structure de données actuelle ne stocke que les informations nécessaires à la construction de l'opérateur de seconde quantification. Toutefois, cette implémentation va au-delà de la définition initiale, puisqu’elle permet de charger des données de spin sans aucune restriction. Le tableau ci-dessous présente la correspondance entre les intégrales et les espèces de spin en fonction des intervalles dans lesquels se situent les indices (en supposant un en-tête avec NORB=n) :
Type intégral | i | j | k | l |
|---|---|---|---|---|
| Constante | ||||
| alpha à un corps | ||||
| bêta à un corps | ||||
| alpha-alpha à deux corps | ||||
| alpha-bêta à deux corps | ||||
| β-β à deux corps |
Les seules valeurs requises sont les intégrales d'alpha-spin à un corps.
Les intégrales à deux corps sont classées selon l'ordre « chemist ordering » ( ), conformément à la convention FCIDump.
Implémentation
Les intégrales sont stockées sous forme de tableaux aplatis, ce qui permet de tirer parti de leur symétrie de permutation; il s'agit également de la structure attendue par les constructeurs d'intégrales FermionOperator électroniques. En notant le nombre d'orbitales (norb) et , une seule structure de données contient jusqu'à 5 tableaux :
Chronique « 1 » | Chronique « 2 » | Chronique « 3 » |
|---|---|---|
one_body_a | Les intégrales d' -spin à un corps. | |
one_body_b | Les intégrales d' -spin à un corps. | |
two_body_aa | Les intégrales à deux corps d' . | |
two_body_ab | Les intégrales à deux corps d' . | |
two_body_bb | Les intégrales à deux corps d' . |
Les tableaux à 1 corps correspondent au triangle inférieur aplati d'une matrice de type « », indexés comme suit : ia = i * (i + 1) // 2 + a avec a <= i. Les tableaux two_body_bb et two_body_aa sont symétriques par rapport à 8 indices ( S8 ) : il s'agit du triangle inférieur aplati d'une matrice de type « », dont les deux axes correspondent chacun à une telle paire d'indices.
two_body_ab est conditionné différemment de ses produits apparentés. Elle n'est symétrique que par rotation de 4 ( S4 ), elle contient donc la matrice complète d' s dans un ordre « row-major », indexée comme suit : iajb = ia * npair + jb. Sa paire de lignes indexe les espèces à spin « », et sa paire de colonnes, celles à spin « »; elle n'est donc pas symétrique par permutation des deux paires.
Vous pouvez accéder à des copies en lecture seule de ces tableaux internes via leurs méthodes respectives : get_one_body_tril_a(), get_one_body_tril_b(), get_two_body_tril_aa(), get_two_body_tril_ab(), et get_two_body_tril_bb().
Les matrices à un corps (spin) et les matrices à deux corps / ne sont disponibles que pour les fichiers contenant des données de spin sans restriction. Comme ils sont tous les trois absents, on is_unrestricted rend compte de leur situation à la fois.
Les valeurs enregistrées correspondent aux intégrales telles qu'elles apparaissent dans le fichier. En particulier, ils ne comportent pas le facteur d' tion classique présent dans les termes de l'opérateur à deux corps; par conséquent, le coefficient d'un opérateur construit via FermionOperator.from_fcidump() est égal à la moitié de la valeur correspondante indiquée ici.
Conversion
Les implémentations d'opérateurs pouvant être construites à partir d'une instance de fournissent FCIDump une méthode from_fcidump de classe :
Chronique « 1 » | Chronique « 2 » |
|---|---|
FermionOperator.from_fcidump() | Construit un FermionOperator à partir d'un FCIDump. |
[ 1 ]
-
- Knowles et N. C. Handy, Computer Physics Communications, vol. 54 (1989), p. 75-83.
Attributs
constant
Renvoie le décalage d'énergie constant, si le fichier en fournit un.
Il s'agit de la valeur de la ligne d'intégrale dont les quatre indices sont tous égaux à zéro, ce qui, pour un hamiltonien de structure électronique, correspond à l'énergie de répulsion nucléaire. C'est le cas None lorsque le fichier ne contient pas cette ligne.
FermionOperator.from_fcidump(), qui comprend cette valeur en tant que terme d'identité.
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.constant
0.7199689944489797
Retours
Le décalage d'énergie constant, ou None lorsque le fichier n'en fournit aucun.
is_unrestricted
Cette structure de données comporte-t-elle des intégrales sans restriction (dépendantes du spin)?
Les configurations à un corps « » (spin 1) et à deux corps « » / « » sont présentes exactement lorsque cette condition est vérifiée True; elles sont absentes toutes les deux en même temps.
>>> 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
Retours
La présence ou non de réseaux d'intégrales de spin bêta.
ms2
Renvoie le double du nombre quantique de spin, soit .
Ce numéro, , est extrait du champ MS2=2S situé dans l'en-tête du fichier FCIDump.
nelec
Renvoie le nombre d'électrons.
Ce numéro est extrait du champ NELEC situé dans l'en-tête du fichier FCIDump.
norb
Renvoie le nombre d'orbitales.
Ce numéro, , est extrait du champ NORB=n situé dans l'en-tête du fichier FCIDump.
Méthodes
from_file
classmethod from_file(file_path)
Analyse un fichier FCIDump.
En supposant que vous disposiez d'un fichier FCIDump nommé molecule.fcidump, voici comment utiliser cette méthode :
from qiskit_fermions.operators.library import FCIDump
fcidump = FCIDump.from_file("molecule.fcidump")Paramètres
file_path – le chemin d'accès au fichier FCIDump.
Retours
La structure de données créée.
Augmentations
- OSError – si
file_pathne peut pas être ouvert ou lu. - ValueError – si le fichier ne respecte pas le format FCIDump (liste des noms d'en-tête manquante,
NELECchampNORBou manquant, ou champMS2mal formé), ou s'il contient une valeur d'énergie MO, qui n'est pas encore prise en charge.
get_one_body_tril_a
get_one_body_tril_a()
Renvoie une copie en lecture seule des intégrales à un corps d’ -spin 1.
Cette méthode renvoie une copie des données internes.
L'explication de la structure de données interne, ici, et FermionOperator.from_1body_tril_spin_sym(), qui utilise ce tableau.
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.get_one_body_tril_a().shape
(3,)
Retours
Les intégrales à un corps triangulaires inférieures aplaties, de longueur .
get_one_body_tril_b
get_one_body_tril_b()
Renvoie une copie en lecture seule des intégrales à un corps d’ -spin 1.
Cette méthode renvoie une copie des données internes.
L'explication de la structure de données interne, ici, et FermionOperator.from_1body_tril_spin(), qui utilise ce tableau.
Retours
Les intégrales à un corps triangulaires inférieures aplaties, de longueur ou None lorsque est is_unrestricted False.
get_two_body_tril_aa
get_two_body_tril_aa()
Renvoie une copie en lecture seule des intégrales à deux corps de type « spin » de l' .
Les valeurs sont celles utilisées pour les commandes en pharmacie, , et ne comportent aucun facteur d' e.
Cette méthode renvoie une copie des données internes.
L'explication de la structure de données interne, ici, et FermionOperator.from_2body_tril_spin_sym(), qui utilise ce tableau.
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.get_two_body_tril_aa().shape
(6,)
Retours
Les intégrales à deux corps aplaties, symétriques par rapport à un plan ( S8 ), de longueur .
get_two_body_tril_ab
get_two_body_tril_ab()
Renvoie une copie en lecture seule des intégrales à deux corps de type « spin » de l' .
Les valeurs sont celles utilisées pour les commandes en pharmacie, , et ne comportent aucun facteur d' e.
Contrairement aux autres réseaux à deux corps, celui-ci ne présente qu'une symétrie quadruple ( S4 ) : il contient la matrice d' s complète, dont les paires de lignes indiquent les spins et dont les paires de colonnes indiquent les espèces de spins . Elle n'est donc pas symétrique par rapport à l'échange des deux paires.
Cette méthode renvoie une copie des données internes.
L'explication de la structure de données interne, ici, et FermionOperator.from_2body_tril_spin(), qui utilise ce tableau.
Retours
Les intégrales à deux corps aplaties à symétrie quadruple ( S4 ), de longueur ou None lorsque est is_unrestricted égal à False.
get_two_body_tril_bb
get_two_body_tril_bb()
Renvoie une copie en lecture seule des intégrales à deux corps de type « spin » de l' .
Les valeurs sont celles utilisées pour les commandes en pharmacie, , et ne comportent aucun facteur d' e.
Cette méthode renvoie une copie des données internes.
L'explication de la structure de données interne, ici, et FermionOperator.from_2body_tril_spin(), qui utilise ce tableau.
Retours
Les intégrales à deux corps aplaties à symétrie octuple ( S8 ), de longueur , ou None lorsque est is_unrestricted égal à False.