Enge Bindungsdichte von Zuständen genauer erhalten

Ich habe numerisch die Zustandsdichte (DoS) für die 3-D Tight-Binding-Dispersion berechnet ϵ ( k X , k j , k z ) = 2 T ( cos k X + cos k j + cos k z ) und erhielt das folgende Diagramm [ T = 1 wurde ausgewählt].

Geben Sie hier die Bildbeschreibung ein

Was ich getan habe, ist zu summieren k -Punkte der Gitter-Green-Funktion,

G ( k X , k j , k z , ω ) = 1 ω ϵ ( k X , k j , k z ) + ich 0 +
und Finden des DoS aus seinem Imaginärteil: D ( ω ) = 1 π Ich bin k X k j k j G ( k X , k j , k z , ω ) .

Man kann leicht feststellen, dass es bei niedrigen Energien Geräusche gibt. Gibt es eine Alternative, um ein besseres Ergebnis zu erzielen? Wie die in einer Abbildung aus einem Papier gezeigte [Ref: arXiv:1207.4014]:

Geben Sie hier die Bildbeschreibung ein

Kann es einen mathematischen Standardausdruck geben, der mit Mathematica oder Matlab berechnet werden kann?

Zugehörige Bonusfrage: Kann die gleiche Methode auf ein asymmetrisches Dreiecksgitter mit Dispersion angewendet werden? ϵ ( k X , k j ) = 2 T ( cos k X + cos k j ) 2 T ' cos ( k X + k j ) ?

Im Allgemeinen mit einem größeren 0 + in der Green-Funktion würde das Rauschen reduzieren.
Nehmen Sie einfach mehr Schwungpunkte in Ihre Summenbildung, das Ergebnis kann verbessert werden.

Antworten (3)

Entschuldigen Sie die späte Antwort, aber hoffentlich kann dies für jemand anderen nützlich sein!

Sie können das Rauschen mit einem elliptischen Integral reduzieren.

D ( ε ) = 1 4 π 3 T π π D ϕ K ( 1 ( ε + 2 T cos ϕ 4 T ) 2 )

Wobei K das vollständige elliptische Integral erster Art ist: http://mathworld.wolfram.com/CompleteEllipticIntegraloftheFirstKind.html .

Es ist nicht trivial, hierher zu kommen. Und selbst aus diesem Ausdruck muss das Integral numerisch mit Sorgfalt durchgeführt werden (es hat Singularitäten für viele Werte von ε ), sollte aber bessere Ergebnisse liefern. Wenn ich sechs Sekunden lang in Mathematica laufe, bekomme ich (mit T = 1 2 3 ):Geben Sie hier die Bildbeschreibung ein

TL;DR

Mit Matlaboder Mathematikakann ich nicht helfen, aber in Pythongibt es eine Implementierung: sc_dos Geben Sie hier die Bildbeschreibung ein Here D ist die halbe Bandbreite D = 6 T .

import numpy as np
import gftool as gt

eps = np.linspace(-1.2, 1.2, num=6001)
dos = gt.sc_dos(eps, half_bandwidth=1)

Die Auswertung des DOS dauert bei mir ~100 ms.


Sie haben bereits die richtigen Ausdrücke angegeben. Wir haben die Green-Funktion

G ( z ) = 1 N k 1 z ϵ k
und die (normalisierte) Zustandsdichte (DOS)
D ( ϵ ) = 1 N k δ ( ϵ ϵ k ) = 1 π G ( ϵ + ich 0 + ) ,
Wo ϵ ist eine reelle Energievariable. Die zweite Gleichheit ist Sokhotski–Plemelj .

Eine naive Summe über die Punkte ist extrem anspruchsvoll, da eine ungeheure Anzahl von k Punkte sind in 3 Dimensionen erforderlich.

Um die Funktion zu glätten, können wir die Green'sche Funktion auf einer Kontur parallel zur reellen Achse auswerten, die um ein Endliches verschoben ist η > 0 in die obere komplexe Halbebene:

D ( ϵ ) 1 π G ( ϵ + ich η ) .

Je größer wir wählen η desto reibungsloser wird die Funktion, aber andererseits verlieren wir Funktionen.

Da uns nur die thermodynamische Grenze interessiert N , ein klügerer Ansatz als nur Sampling k , ist die Summe durch das Integral zu ersetzen. Für Integrale haben wir mehr oder weniger effiziente Algorithmen.

Rechnen wir also

G ( z ) = D 3 k 2 π 3 1 z ϵ k
stattdessen. Der ϵ k , ist für alle symmetrisch k X ich : ϵ ( k X ich ) = ϵ ( k X ich ) , es genügt also, über ein Achtel der Brillouin-Zone zu integrieren.

Und schließlich können wir analytische Ergebnisse für die Integrale verwenden. Wir stellen fest, dass wir die 3D-Green-Funktion in Form bekannter Ergebnisse der 1D- und 2D-Green-Funktion ausdrücken können, wie wir sie haben

ϵ k = ϵ k X , k j , k z = ϵ k X , k j 2 D 2 T cos ( k z ) = ϵ k X 1 D 2 T [ cos ( k j ) + cos ( k z ) ]
und deshalb
G ( z ) = D k z 2 π G 2 D ( z 2 T cos ( k z ) ) = D k j 2 π D k z 2 π G 1 D ( z 2 T [ cos ( k j ) + cos ( k z ) ] ) .

Die eindimensionale Greensche Funktion G 1 D ( z ) leicht ausgewertet werden kann, ist die zweidimensionale Green'sche Funktion G 2 D ( z ) kann durch das vollständige elliptische Integral erster Art ausgedrückt werden (das in Standardlehrbüchern zu finden ist). Verwenden G 2 D ( z ) ist im Grunde das Ergebnis von bRost03 .

Ein sehr kluger Kerl namens Joyce hat sogar einen Ausdruck für gefunden G 3 D ( z ) im Jahr 1973. Die Gleichungen sind etwas langwierig und kompliziert, daher vermeide ich es, sie hier zu kopieren. Aber wir haben sie in einem PythonModul implementiert gftool>=0.8.0, siehe sc_dos . Dort finden Sie auch die entsprechenden Referenzen.

Ich hatte das gleiche Problem. Ich habe die Formel verwendet ρ ( ϵ ) = k δ ( ϵ ϵ ( k ) ) die Zustandsdichte numerisch zu berechnen. Ich habe eine Zusammenfassung gemacht 100 k Werte für jede Komponente und verwendet eine Gaußsche Verteilung mit σ = 0,1 für die Delta-Funktion, um das folgende Diagramm zu erhalten. Größer verwenden σ glättet schließlich die Singularität in der Ableitung bei ungefähr ϵ = ± 2 .

Der Code wurde in C++ geschrieben und lief ungefähr 60 Sekunden. j Achse ist ρ ( ϵ ) , X Achse ist ϵ Und T = 1 .


Geben Sie hier die Bildbeschreibung ein

PS: Ich habe die Summierung über die halbe Brillouin-Zone gemacht, was ich für meine Anwendung brauchte.