不光滑的态密度

背景

在固体物理或相关物理教材可知,对于如下的非常经典的抛物线型色散关系

\[H = \bm{k}^2 \]

其对应的态密度色散关系为:

image

一维时, 与 \(E^{-1/2}\) 成正比;
二维时,其是个常数;
三维时, 与 \(E^{1/2}\) 成正比.

态密度公式

(参考下面该篇博士论文附录,先码住有时间我再展开写)
image

image

image

Green函数方法计算

参考以前的笔记balabala

附件

(1) Sunhee_Lee 博士论文中的matlab代码

点击查看代码
function bulk_DOS_test(dim,gv,nk)
% bulk_DOS\_test(dim,gv,nk)
% Comparison numerical result vs. analytical solution of E=k^2
% dim: dimension (1/2/3) of the parabolic band E=k^2.
% gv: Broadening factor in (eV). Set to (0~10e-3)(eV) depending on simulation conditions.
% nk: Number of k-points between the interval k=[0 1].
% Note: setting this value too large might cause memory error,
% especially in 2D and 3D cases.
% Spin degeneracy is set to 2
close all;
if dim==3
    % 3D
    kx=0:1/nk:1;lkx=length(kx);
    ky=0:1/nk:1;lky=length(ky);
    kz=0:1/nk:1;lkz=length(kz);
    [kxx kyy kzz]=meshgrid(kx,ky,kz);
    E=(kxx.^2+kyy.^2+kzz.^2)+0.1;
    Egrid=0.0:1e-3:0.6;
    E=reshape(E,[lkx*lky*lkz 1]);
    kxx=reshape(kxx,[lkx*lky*lkz 1]);
    kyy=reshape(kyy,[lkx*lky*lkz 1]);
    kzz=reshape(kzz,[lkx*lky*lkz 1]);
    DOS=zeros(size(Egrid));
    
    for eidx=1:length(E)
        m_factor=8;
        if abs(kxx(eidx,1)+0)<1e-3 || abs(kxx(eidx,1)-1)<1e-3
            m_factor = m_factor/2;
        end
        if abs(kyy(eidx,1)+0)<1e-3 || abs(kyy(eidx,1)-1)<1e-3
            m_factor = m_factor/2;
        end
        if abs(kzz(eidx,1)+0)<1e-3 || abs(kzz(eidx,1)-1)<1e-3
            m_factor = m_factor/2;
        end
        DOS = DOS + 2/sqrt(2*pi*gv*gv)*exp(-(E(eidx,1)-Egrid).^2 ...
            /(2*gv*gv))*m_factor/(nk*nk*nk);
    end
    figure(1);
    set(gca,'Fontsize',24);
    plot(Egrid,DOS/(8*pi*pi*pi),'b');hold on;
    X=Egrid;
    Y=1/(2*pi*pi)*sqrt(X-0.1);
    plot(X,Y,'r')
    axis([0 0.6 0 max(DOS)/(8*pi*pi*pi)*1.2])
    xlabel('Energy(eV)');
    ylabel('DOS(#/eV/m^{3})');
end

if dim==2
    %% 2D
    kx=0:1/nk:1;
    ky=kx;
    [kxx kyy ]=meshgrid(kx,ky);
    lkx=length(kx);
    lky=length(ky);
    E=(kxx.^2+kyy.^2)+0.1;
    Egrid=0.0:1e-3:0.6;
    E=reshape(E,[lkx*lky 1]);
    kxx=reshape(kxx,[lkx*lky 1]);
    kyy=reshape(kyy,[lkx*lky 1]);
    DOS=zeros(size(Egrid));
    for eidx=1:length(E)
        m_factor=4;
        if abs(kxx(eidx,1)+0)<1e-3 || abs(kxx(eidx,1)-1)<1e-3
            m_factor = m_factor/2;
        end
        if abs(kyy(eidx,1)+0)<1e-3 || abs(kyy(eidx,1)-1)<1e-3
            m_factor = m_factor/2;
        end
        DOS = DOS + 2/sqrt(2*pi*gv*gv)*exp(-(E(eidx,1)-Egrid).^2/(2*gv*gv))*m_factor/(nk*nk);
    end
    figure(2);
    set(gca,'Fontsize',24);
    plot(Egrid,DOS/(4*pi*pi),'b');hold on;
    X=Egrid;
    for idx=1:length(X)
        if X(idx)<0.1
            Y(idx)=0;
        else
            Y(idx)=1/(2*pi);
        end
    end
    plot(X,Y,'r')
    axis([0 0.6 0 max(DOS)/(2*pi*2*pi)*1.2])
    xlabel('Energy(eV)');
    ylabel('DOS(#/eV/m^{2})');
end
if dim==1
    %% 1D
    kx=0:1/nk:1;
    Egrid=-0.1:1e-3:0.6;
    kxx=kx';
    E=(kxx.^2)+0.1;
    DOS=zeros(size(Egrid));
    for eidx=1:length(E)
        m_factor=2;
        if abs(kxx(eidx,1)+0)<5e-6 || abs(kxx(eidx,1)-1)<5e-6
            m_factor = m_factor/2;
        end
        DOS = DOS + 2/sqrt(2*pi*gv*gv)*exp(-(E(eidx,1)-Egrid).^2 ...
            /(2*gv*gv))*m_factor/nk;
    end
    figure(3);
    set(gca,'Fontsize',24);
    plot(Egrid,DOS/(2*pi),'b');hold on;
    
    X=1e-8:1e-3:1.0;
    Y=1/(1*pi)./sqrt(X-0.1);
    plot(X,Y,'r')
    axis([0 0.6 0 max(DOS)/(2*pi)*1.2])
    xlabel('Energy(eV)');
    ylabel('DOS(#/eV/m)');
end

(2) Green函数方法

点击查看代码 dos_1D.m
clear all;
tic

eta = 5e-3;
E = -0.1:1e-3:0.6;
N_E = length(E);

N_kx = 200;
kx = linspace(0,1,N_kx);
dkx = kx(2) - kx(1);

DOS = zeros(N_E,1);
for i_E = 1:N_E
    for i_kx = 1:N_kx
        Ham =  kx(i_kx)^2 + 0.1;
        Gr = inv(E(i_E)+1j*eta - Ham);
        DOS(i_E) = DOS(i_E) - imag(Gr)/pi*dkx/(2*pi);
    end
end
figure;
plot(E,DOS);
xlim([0,0.6])
toc
点击查看代码 dos_2D.m
clear all;
tic

eta = 1e-4;

N_E = 500;
E = linspace(-1,1,N_E);

N_kx = 300;
kx = linspace(-pi,pi,N_kx);
dkx = kx(2) - kx(1);
N_ky = 300;
ky = linspace(-pi,pi,N_ky);
dky = ky(2) - ky(1);


DOS = zeros(N_E,1);
for i_E = 1:N_E
    for i_kx = 1:N_kx
        for i_ky = 1:N_ky
            Ham =  kx(i_kx)^2 + ky(i_ky)^2;
            Gr = inv(E(i_E)+1j*eta - Ham);
            DOS(i_E) = DOS(i_E) - imag(Gr)/pi*dkx*dky/(4*pi^2);
        end
    end
end
figure;
plot(E,DOS);
toc
点击查看代码 dos_3D.m
clear all;
tic

eta = 1e-3;

N_E = 500;
E = linspace(-1,1,N_E);

N_kx = 50;
kx = linspace(-pi,pi,N_kx);
dkx = kx(2) - kx(1);
N_ky = 50;
ky = linspace(-pi,pi,N_ky);
dky = ky(2) - ky(1);
N_kz = 50;
kz = linspace(-pi,pi,N_kz);
dkz = kz(2) - kz(1);

DOS = zeros(N_E,1);
for i_E = 1:N_E
    for i_kx = 1:N_kx
        for i_ky = 1:N_ky
            for i_kz = 1: N_kz
                Ham =  sin(kx(i_kx))^2 + sin(ky(i_ky))^2 + sin(kz(i_kz))^2;
                %Ham = v*(kx(i_kx)*sigma_x + ky(i_ky)*sigma_y) + delta/2*sigma_z + Ef*sigma_0 + m*(kx(i_kx)^2 + ky(i_ky)^2)*sigma_0;
                Gr = inv(E(i_E)+1j*eta - Ham);
                DOS(i_E) = DOS(i_E) + sum(diag(-imag(Gr))/pi)*dkx*dky*dkz/(8*pi^3);
            end
        end
    end
end
figure;
plot(E,DOS);

toc

参考文献

[1] Sunhee Lee PhD thesis. Purdue University. https://engineering.purdue.edu/gekcogrp/publications/theses/PhD_11_2011_Sunhee_Lee_PhD_Thesis_main.pdf

posted @ 2023-04-29 20:06  ghzphy  阅读(139)  评论(0编辑  收藏  举报