Ich versuche, die numerische Interpretation der Zustandsdichte für ein fermionisches System unter einem periodischen Potential herauszufinden.
Die Gleichung für die Zustandsdichte lautet
Wo sind die Eigenwerte der bestimmten Hamilton-Matrix, die ich löse. Ich möchte die Cauchy/Lorentzsche Näherung der Delta-Funktion verwenden, so dass die erste Gleichung jetzt wird
Von hier an bin ich verwirrt, wie ich die zweite Gleichung numerisch interpretieren soll. Ich habe die jeweiligen Eigenwerte des Hamilton-Operators, aber ich weiß nicht, wie ich den DOS mit erhalten soll . Wie füge ich ein in meinem Code? E zu diskretisieren bedeutet für mich, dass ich um einen bestimmten Wert herum ein bestimmtes Energiefenster ergreife , aber ich weiß nicht, wie ich es strukturieren soll, oder ob es ein Array, ein Raster ... oder etwas anderes sein muss. Wenn E ein Gitter sein soll, sollte es ein Gitter zwischen den minimalen und maximalen Werten der Energieeigenwerte sein?
EDIT: Hallo zusammen. Nachdem ich über Muralis Antwort nachgedacht habe, bin ich auf einen Pseudocode gekommen, der ziemlich schlecht ist, aber ich würde gerne wissen, ob ich in die richtige Richtung gehe.
Ich habe im Grunde eine Funktion für die erweiterte Lorentz-Delta-Funktion wie folgt codiert:
def delta_l(x):
return (1/np.pi)*(epsilon/(epsilon**2 + x**2))
def dos(Egrid,Eigen):
DOS = np.zeros((AllK,1))
for j in range(Allk):
DOS[j] = (1/AllK)*sum([delta(Egrid[j]-Eigen[i]) for i in range(np.shape(Eigen)[0])])
return DOS
Hier wird Epsilon nur zum Testen ein Wert von 0,1 gegeben. Die Eigenvektoren des Hamiltonoperators wurden durch Eingabe von Punkten der FBZ erhalten:
AllK = len(np.arange(0, 1, 0.01)) * len(np.arange(0, 1, 0.01))
E = np.zeros((AllK,4*n), float)
count = 0
for m in np.arange(0, 1, 0.01):
for f in np.arange(0, 1, 0.01):
kx = (m-f) * np.sqrt(3)/2
ky = (m+f) * 3.0/2 - 1
E[count] = Hamiltonian(kx*Kmag, ky*Kmag)
count = count + 1
import pandas as pd
EinBZ = E.flatten()
In diesem Array bekomme ich dann also alle Eigenwerte der FBZ. Gehe ich in die richtige Richtung?
Ich glaube, Sie haben nicht richtig verstanden, was Zustandsdichte (DOS) bedeutet. DOS ist eine Wahrscheinlichkeitsdichtefunktion (PDF). Wie Andrew betonte, nimmt es Energie als Eingabe und gibt die Anzahl der Zustände für eine gegebene Energie zurück.
Sie können nicht diskretisieren da sie keine Eigenwerte irgendeiner Observablen sind. Es ist der Eingabeparameter, und es macht einfach keinen Sinn, ihn zu diskretisieren. Die Werte von sind diskretisiert, da sie Eigenwerte des elektronischen Hamiltonoperators sind.
Wenn Sie die 1. Gleichung in Ihrer Frage berücksichtigen,
Um den DOS zu berechnen, nehmen Sie E als Parameter, der jeden Wert annehmen und fixieren kann , berechnen Sie dann die doppelte Summierung über die Brillouin-Zone (BZ) und die Bänder (n), die die Eigenwerte Ihres Hamilton-Operators sind. Das Summieren über BZ ist einfach das Summieren über k Punkte in der Brillouin-Zone und Dividieren der erhaltenen Summe durch die Gesamtzahl von k Punkten. Wählen Sie ein vernünftiges k-Punkt-Gitter und stellen Sie sicher, dass es konvergiert. Werfen Sie einen Blick auf den folgenden Link ( http://www.iiserpune.ac.in/~smr2626/hands_on/week1/july1/bzsums_mastani.pdf ), wenn Sie keine Ahnung von BZ-Summierung haben
Pseudocode:
def delta_l(x):
return delta function(x)
def E(k):
return Eigen values for Each k
def dos(E): (let us compute for some E value. This is very inefficient way. just writing for your understanding)
sum = 0
for i in kpoints:
for j in total_number_of_bands:
sum = sum + delta_l(E-E(i)[j]) #where E(i)[j] is $j^{th}$ eigen value of $i^{th}$ kpoint
return sum/N # N is total number of kpoints
Andreas
Roger Wadim
MadLad
Roger Wadim
MadLad
Roger Wadim