Skip to main content
IBM Quantum Platform

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
Constante0{0}0{0}0{0}0{0}
alpha à un corps0{0}0{0}[1,n][1,n][1,n][1,n]
bêta à un corps0{0}0{0}[n+1,2n][n+1,2n][n+1,2n][n+1,2n]
alpha-alpha à deux corps[1,n][1,n][1,n][1,n][1,n][1,n][1,n][1,n]
alpha-bêta à deux corps[1,n][1,n][1,n][1,n][n+1,2n][n+1,2n][n+1,2n][n+1,2n]
β-β à deux corps[n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n]

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 » ( (ij∣kl)(ij|kl) ), 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 nn le nombre d'orbitales (norb) et npair=n(n+1)/2\text{npair} = n (n + 1) / 2, une seule structure de données contient jusqu'à 5 tableaux :

Chronique « 1 »
Chronique « 2 »
Chronique « 3 »
one_body_anpair\text{npair}Les intégrales d' α\alpha -spin à un corps.
one_body_bnpair\text{npair}Les intégrales d' β\beta -spin à un corps.
two_body_aanpair(npair+1)/2\text{npair} (\text{npair} + 1) / 2Les intégrales à deux corps d' αα\alpha\alpha.
two_body_abnpair2\text{npair}^2Les intégrales à deux corps d' αβ\alpha\beta.
two_body_bbnpair(npair+1)/2\text{npair} (\text{npair} + 1) / 2Les intégrales à deux corps d' ββ\beta\beta.

Les tableaux à 1 corps correspondent au triangle inférieur aplati d'une matrice de type « (n,n)(n, n) », 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 « (npair,npair)(\text{npair}, \text{npair}) », dont les deux axes correspondent chacun à une telle paire d'indices.

Avertissement

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' (npair,npair)(\text{npair}, \text{npair}) s dans un ordre « row-major », indexée comme suit : iajb = ia * npair + jb. Sa paire de lignes indexe les espèces à spin « α\alpha », et sa paire de colonnes, celles à spin « β\beta »; elle n'est donc pas symétrique par permutation des deux paires.

Remarque

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 β\beta (spin) et les matrices à deux corps αβ\alpha\beta / ββ\beta\beta 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' 12\frac{1}{2} 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 ]

    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.

Voir aussi

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 « β\beta » (spin 1) et à deux corps « αβ\alpha\beta » / « ββ\beta\beta » 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 2S2S.

Ce numéro, 2S2S, 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, nn, 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_path ne peut pas être ouvert ou lu.
  • ValueError – si le fichier ne respecte pas le format FCIDump (liste des noms d'en-tête manquante, NELEC champ NORB ou manquant, ou champ MS2 mal 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’ α\alpha -spin 1.

Remarque

Cette méthode renvoie une copie des données internes.

Voir aussi

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 npair=n(n+1)/2\text{npair} = n (n + 1) / 2.

get_one_body_tril_b

get_one_body_tril_b()

Renvoie une copie en lecture seule des intégrales à un corps d’ β\beta -spin 1.

Remarque

Cette méthode renvoie une copie des données internes.

Voir aussi

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 npair=n(n+1)/2\text{npair} = n (n + 1) / 2 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' αα\alpha\alpha.

Les valeurs sont celles utilisées pour les commandes en pharmacie, (ij∣kl)(ij|kl), et ne comportent aucun facteur d' 12\frac{1}{2} e.

Remarque

Cette méthode renvoie une copie des données internes.

Voir aussi

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 npair(npair+1)/2\text{npair} (\text{npair} + 1) / 2.

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' αβ\alpha\beta.

Les valeurs sont celles utilisées pour les commandes en pharmacie, (ij∣kl)(ij|kl), et ne comportent aucun facteur d' 12\frac{1}{2} e.

Avertissement

Contrairement aux autres réseaux à deux corps, celui-ci ne présente qu'une symétrie quadruple ( S4 ) : il contient la matrice d' (npair,npair)(\text{npair}, \text{npair}) s complète, dont les paires de lignes indiquent les spins α\alpha et dont les paires de colonnes indiquent les espèces de spins β\beta. Elle n'est donc pas symétrique par rapport à l'échange des deux paires.

Remarque

Cette méthode renvoie une copie des données internes.

Voir aussi

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 npair2\text{npair}^2 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' ββ\beta\beta.

Les valeurs sont celles utilisées pour les commandes en pharmacie, (ij∣kl)(ij|kl), et ne comportent aucun facteur d' 12\frac{1}{2} e.

Remarque

Cette méthode renvoie une copie des données internes.

Voir aussi

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 npair(npair+1)/2\text{npair} (\text{npair} + 1) / 2, ou None lorsque est is_unrestricted égal à False.

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.