Dies ist ein einfaches Problem der Symmetrieaufzählung. Ich gebe hier den vollständigen Hintergrund an, aber es sind keine Kenntnisse der Quantenchemie erforderlich.
Die beiden Teilchen integral ist: ⟨ i j | k l ⟩ = ∫ ψ * i ( x ) ψ * j ( x ' ) ψ k ( x ) ψ L ( x ' ) Und es folgende 4 Symmetrien hat: ⟨ i j | k l ⟩ = ⟨ j i | l k ⟩ = ⟨ k l | i j ⟩ = ⟨ l k | j i ⟩ I haben eine Funktiondass das Integral und speichert sie in einem 1DArray berechnet, wie folgt indexiert:
int2
int2(ijkl2intindex2(i, j, k, l))
Dabei gibt die Funktion ijkl2intindex2
einen eindeutigen Index zurück, wobei die obigen Symmetrien berücksichtigt werden. Die einzige Voraussetzung ist, dass, wenn Sie alle Kombinationen von i, j, k, l (von jeweils 1 bis n) int2
durchlaufen , das Array nacheinander gefüllt wird und allen ijkl-Kombinationen, die sich auf die oben genannten beziehen, der gleiche Index zugewiesen wird 4 Symmetrien.
Meine aktuelle Implementierung in Fortran ist hier . Es ist sehr langsam. Weiß jemand, wie man das effektiv macht? (In jeder Sprache.)
quelle
Antworten:
[Edit: 4. Mal ist der Reiz, endlich etwas Vernünftiges]
Die Kombination dieser beiden ergibt den vollständigen Satz. Wenn Sie also beide Schleifen zusammenfügen, erhalten Sie den vollständigen Satz von Indizes.
In Python können wir den folgenden Iterator schreiben, um uns die Werte für idx und i, j, k, l für jedes Szenario zu geben:
Und dann Schleife darüber:
quelle
Hier ist eine Idee der Verwendung einer einfachen Raumfüllungskurve, die so modifiziert wurde, dass sie denselben Schlüssel für die Symmetriefälle zurückgibt (alle Codefragmente sind in Python).
Anmerkungen:
Hier ist ein Testbeispiel für n = 2:
Ausgabe für n = 2:
Wenn von Interesse, ist die Umkehrfunktion von forge_key:
quelle
Ist dies nicht nur die Verallgemeinerung des Problems der gepackten symmetrischen Matrixindizierung? Die Lösung dort ist Offset (i, j) = i * (i + 1) / 2 + j, nicht wahr? Können Sie dies nicht verdoppeln und ein doppelt symmetrisches 4D-Array indizieren? Die Implementierung, die eine Verzweigung erfordert, erscheint unnötig.
quelle