Estoy tratando de averiguar la interpretación numérica de la densidad de estados para un sistema fermiónico bajo un potencial periódico.
La ecuación para la densidad de estados dice
dónde son los valores propios de la matriz hamiltoniana particular que estoy resolviendo. Me gustaría usar la aproximación de Cauchy/Lorentzian de la función Delta tal que la primera ecuación ahora se convierte en
De aquí en adelante, estoy confundido sobre cómo interpretar numéricamente la segunda ecuación. Tengo los valores propios respectivos del hamiltoniano, pero no sé cómo obtener el DOS usando . como incluyo en mi código? Discretizar E para mí significa que tomo una cierta ventana de energía alrededor de un cierto valor , pero no sé cómo estructurarlo, o si necesita ser una matriz, una cuadrícula... o algo más. Si E debe ser una cuadrícula, ¿debería ser una cuadrícula entre los valores mínimo y máximo de los valores propios de la energía?
EDITAR: Hola a todos. Después de reflexionar sobre la respuesta de Murali, se me ocurrió un pseudocódigo que es bastante malo, pero me gustaría saber si voy en la dirección correcta.
Básicamente codifiqué una función para la función delta ampliada de Lorentzian así:
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
Aquí a épsilon se le da un valor de 0.1 solo para probar. Los vectores propios del hamiltoniano se obtuvieron ingresando puntos de la FBZ:
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()
Entonces obtengo todos los valores propios de la FBZ en esta matriz. ¿Voy en la dirección correcta?
Creo que no entendiste correctamente qué significa densidad de estados (DOS). DOS es una función de densidad de probabilidad (PDF). Como señaló Andrew, toma energía como entrada y devuelve el número de estados para una energía dada.
No puedes discretizar ya que no son valores propios de ningún observable. Es el parámetro de entrada, y discretizarlo simplemente no tiene ningún sentido. los valores de se discretizan ya que son valores propios del hamiltoniano electrónico.
Si considera la primera ecuación en su pregunta,
Para calcular el DOS, toma E como un parámetro que puede tomar cualquier valor y corregir , luego calcule la doble suma sobre la zona de Brillouin (BZ) y las bandas (n), que son los valores propios de su hamiltoniano. Sumar sobre BZ es simplemente sumar sobre k puntos en la zona de Brillouin y dividir la suma obtenida por el número total de k puntos. Elija una cuadrícula de puntos k razonable y asegúrese de que converja. Eche un vistazo al siguiente enlace ( http://www.iiserpune.ac.in/~smr2626/hands_on/week1/july1/bzsums_mastani.pdf ) si no tiene idea sobre la suma BZ
Pseudocódigo:
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
Andrés
roger vadim
loco
roger vadim
loco
roger vadim