Elektronische Integrale
Die hier aufgeführten Konstruktorfunktionen nehmen in der Regel die Koeffizienten der Hamilton-Operatoren der Elektronenstruktur als Eingabe entgegen. Es gibt verschiedene Geschmacksrichtungen:
tril: Diese Funktionen verarbeiten eindimensionale Arrays mit abgeflachten (verallgemeinerten) dreieckigen Indizesfull: Diese Funktionen verarbeiten hochdimensionale Arraysspin: Diese Funktionen nehmen separate Arrays für die verschiedenen Spinarten entgegensym: Diese Funktionen nehmen ein einzelnes Array für eine Spinart entgegen und leiten daraus die andere Spinart ab
qf_ferm_op_from_1body_tril_spin_sym
QfFermionOperator *qf_ferm_op_from_1body_tril_spin_sym(double *one_body_a, uint32_t norb)
Erstellt einen Operator aus spinsymmetrischen, dreieckigen 1-Körper-Integralen.
Der resultierende Operator ist definiert durch
wobei die in gespeicherten Integralkoeffizienten sind one_body_a, und die aus dem dreieckigen Index erweiterten Indizes sind, der das Array indiziert, und die Anzahl der Orbitalen ist, norb.
1int norb = 2;
2double one_body_a[3] = {1.0, 2.0, 3.0};
3QfFermionOperator *op = qf_ferm_op_from_1body_tril_spin_sym(one_body_a, norb);Sicherheit
Das Verhalten ist undefiniert, wenn eine der folgenden Bedingungen nicht erfüllt ist:
one_body_aist ein nicht-null-Wert und ein ausgerichteter Zeiger auf ein Arraydoubleder Längenorb * (norb + 1) / 2
Ein Null-Zeiger oder ein falsch ausgerichteter Zeiger wird erkannt und löst einen Panic aus; die Länge des Arrays lässt sich nicht aus dem Zeiger ableiten, sodass es sich weiterhin um einen ungeprüften Aufrufervertrag handelt.
Parameter
- one_body_a – ein eindimensionales Array der Länge, in dem die Koeffizienten des 1-Körper-Elektronenintegrals der Alpha-Spin-Spezies als abgeflachte Dreiecksmatrix gespeichert
norb * (norb + 1) / 2sind. - norb – die Anzahl der Orbitalen.
Rückgabe
Ein Zeiger auf die Komponente des unten definierten Hamilton-Operators der elektronischen Struktur.
qf_ferm_op_from_1body_tril_spin
QfFermionOperator *qf_ferm_op_from_1body_tril_spin(double *one_body_a, double *one_body_b, uint32_t norb)
Erstellt einen Operator aus einzelnen dreieckigen 1-Körper-Integralen verschiedener Spinarten.
Der resultierende Operator ist definiert durch
wobei ( ) die in ( one_body_a``one_body_b bzw.) gespeicherten Integral-Koeffizienten sind, und die aus dem dreieckigen Index erweiterten Indizes sind, der die Arrays indiziert, und die Anzahl der Orbitale ist, norb.
1int norb = 2;
2double one_body_a[3] = {1.0, 2.0, 3.0};
3double one_body_b[3] = {-1.0, -2.0, -3.0};
4QfFermionOperator *op = qf_ferm_op_from_1body_tril_spin(one_body_a, one_body_b, norb);Sicherheit
Das Verhalten ist undefiniert, wenn eine der folgenden Bedingungen nicht erfüllt ist:
one_body_aund sindone_body_bnicht-Null-Zeiger aufdoubleArrays, die jeweils die Längenorb * (norb + 1) / 2
Ein Null-Zeiger oder ein falsch ausgerichteter Zeiger wird erkannt und löst einen Panic aus; die Array -Längen lassen sich nicht aus den Zeigern ableiten, sodass sie als ungeprüfter Aufrufer-Vertrag verbleiben.
Parameter
- one_body_a – ein eindimensionales Array der Länge, in dem die Koeffizienten des 1-Körper-Elektronenintegrals der Alpha-Spin-Spezies als abgeflachte Dreiecksmatrix gespeichert
norb * (norb + 1) / 2sind. - one_body_b – ein eindimensionales Array der Länge, das die Koeffizienten des 1-Körper-Elektronenintegrals der Beta-Spin-Spezies als abgeflachte Dreiecksmatrix speichert
norb * (norb + 1) / 2. - norb – die Anzahl der Orbitalen.
Rückgabe
Ein Zeiger auf die Komponente des unten definierten Hamilton-Operators der elektronischen Struktur.
qf_ferm_op_from_2body_tril_spin_sym
QfFermionOperator *qf_ferm_op_from_2body_tril_spin_sym(double *two_body_aa, uint32_t norb)
Erstellt einen Operator aus spinsymmetrischen dreieckigen 2-Körper-Integralen.
Der resultierende Operator ist definiert durch
wobei die in gespeicherten Integral-Koeffizienten sind two_body_aa, der laufende Index des Arrays ist, die eindeutigen Permutationen des 4-Index (siehe unten) generiert und die Anzahl der Orbitalen ist, norb.
1int norb = 2;
2double two_body_aa[6] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
3QfFermionOperator *op = qf_ferm_op_from_2body_tril_spin_sym(two_body_aa, norb);Sicherheit
Das Verhalten ist undefiniert, wenn eine der folgenden Bedingungen nicht erfüllt ist:
two_body_aaist ein von Null verschiedener, ausgerichteter Zeiger auf ein Arraydoubleder Längenpair * (npair + 1) / 2, wobeinpair = norb * (norb + 1) / 2
Ein Null-Zeiger oder ein falsch ausgerichteter Zeiger wird erkannt und löst einen Panic aus; die Länge des Arrays lässt sich nicht aus dem Zeiger ableiten, sodass es sich weiterhin um einen ungeprüften Aufrufervertrag handelt.
two_body_aa ist ein symmetrisches Array vom Typ „ S8-fold “. Das bedeutet, es handelt sich um die abgeflachten, unterhalb der Diagonalen angeordneten Daten einer Matrix der Form (npair, npair), wobei npair = (norb * (norb + 1) // 2. Dies sind wiederum die unteren dreieckigen Daten des vierdimensionalen Arrays der Form (norb, norb, norb, norb). Daher erweitert die obige Formel „ “ den abgeflachten Index „ “ auf alle Indexpermutationen „ “, die dieses 4-dimensionale Array indizieren.
Parameter
- two_body_aa – ein eindimensionales Array der symmetrischen 2-Körper-Elektronenintegralkoeffizienten der Alpha/Alpha-Spin-Spezies gemäß der Formel „ S8-fold “, dargestellt als abgeflachtes Array.
- norb – die Anzahl der Orbitalen.
Rückgabe
Ein Zeiger auf die Komponente des unten definierten Hamilton-Operators der elektronischen Struktur.
qf_ferm_op_from_2body_tril_spin
QfFermionOperator *qf_ferm_op_from_2body_tril_spin(double *two_body_aa, double *two_body_ab, double *two_body_bb, uint32_t norb)
Erstellt einen Operator aus einzelnen dreieckigen 2-Körper-Integralen für verschiedene Spinarten.
Der resultierende Operator ist definiert durch
wobei ( , ) die in ( two_body_aa``two_body_ab , two_body_bb, bzw.) gespeicherten Integral-Koeffizienten sind, der laufende Index des Arrays ist, ( ) die eindeutigen Permutationen des 4-Index (siehe unten) generiert und die Anzahl der Orbitalen ist, norb.
1int norb = 2;
2double two_body_aa[6] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
3double two_body_ab[9] = {11.0, 12.0, 13.0, 14.0, 15.0,
4 16.0, 17.0, 18.0, 19.0};
5double two_body_bb[6] = {-1.0, -2.0, -3.0, -4.0, -5.0, -6.0};
6QfFermionOperator *op = qf_ferm_op_from_2body_tril_spin(
7 two_body_aa, two_body_ab, two_body_bb, norb);Sicherheit
Das Verhalten ist undefiniert, wenn eine der folgenden Bedingungen nicht erfüllt ist:
two_body_aaund sindtwo_body_bbnicht-Null-Zeiger aufdoubleArrays, die jeweils die Länge habennpair * (npair + 1) / 2, wobeinpair = norb * (norb + 1) / 2two_body_abist ein nicht-null-Wert und ein ausgerichteter Zeiger auf ein Arraydoubleder Längenpair * npair
Ein Null-Zeiger oder ein falsch ausgerichteter Zeiger wird erkannt und löst einen Panic aus; die Array -Längen lassen sich nicht aus den Zeigern ableiten, sodass sie als ungeprüfter Aufrufer-Vertrag verbleiben.
two_body_aa und two_body_bb sind symmetrische Arrays vom Typ S8-fold. Das bedeutet, es handelt sich um die abgeflachten, unterhalb der Diagonalen liegenden Daten von Matrizen der Form (npair, npair), wobei npair = (norb * (norb + 1) // 2. Dies sind wiederum die unteren dreieckigen Daten der 4-dimensionalen Arrays der Form (norb, norb, norb, norb). Daher erweitert die obige Formel „ “ den abgeflachten Index „ “ auf alle Indexpermutationen „ “, die diese vierdimensionalen Arrays indizieren.
Allerdings two_body_ab ist nur S4-fold symmetrisch. Somit enthält sie die vollständigen Daten der Matrix (npair, npair) (allerdings weiterhin in abgeflachter Form). Mit dem Befehl „ “ wird die entsprechende Indexerweiterung durchgeführt. (In der obigen Definition haben wir den Index „ “ als Notationsmissbrauch wiederverwendet.)
Parameter
- two_body_aa – ein eindimensionales Array der symmetrischen 2-Körper-Elektronenintegralkoeffizienten der Alpha/Alpha-Spin-Spezies gemäß der Formel „ S8-fold “, dargestellt als abgeflachtes Array.
- two_body_ab – ein eindimensionales Array der symmetrischen 2-Körper-Elektronenintegralkoeffizienten der Alpha-/Beta-Spin-Spezies gemäß S4-fold, als abgeflachtes Array.
- two_body_bb – ein eindimensionales Array der symmetrischen 2-Körper-Elektronenintegralkoeffizienten der Beta/Beta-Spin-Spezies aus der Reihe „ S8-fold “, dargestellt als abgeflachtes Array.
- norb – die Anzahl der Orbitalen.
Rückgabe
Ein Zeiger auf die Komponente des unten definierten Hamilton-Operators der elektronischen Struktur.