美文网首页
利用Matlab从第一性原理计算软件Siesta读取和生成能带图

利用Matlab从第一性原理计算软件Siesta读取和生成能带图

作者: Abel_Tu | 来源:发表于2017-01-13 14:32 被阅读107次

Siesta关于E-k关系计算结果保存于systemlabel.bands文件内,故Matlab程序只需要读取此文档即可。经笔者测试,在siesta-2.0.2与siesta-3.2版本内均可完美运行。

function sband( filename, E_range)
%sband('systemlabel.bands',[RangeOfBandEnergy])
%Read the file 'systemlabel.bands' and plot the band structure from siesta.
%The first argument is a must, while the E_range is of your own choice.
%Edited by JackyTu, July 29, 2014.
%Please contact tuxingchen@pku.edu.cn

fid=fopen(filename);
frewind(fid);

% -------------------- Read --------------------
E_fermi=fscanf(fid,'%f',1);
kmin=fscanf(fid,'%f',1);
kmax=fscanf(fid,'%f',1);
Emin=fscanf(fid,'%f',1);
Emax=fscanf(fid,'%f',1);
nband=fscanf(fid,'%d',1);
spin=fscanf(fid,'%d',1);
k_num=fscanf(fid,'%d',1);

if(nargin<2)
    E_range=[Emin,Emax];
end

kp=zeros(k_num,1);
e_data=zeros(nband*spin,k_num);
for i=1:k_num
    kp(i)=fscanf(fid,'%f',1);
    e_data(:,i)=fscanf(fid,'%f',nband*spin);
end

E_k=zeros(nband,k_num,2);
if spin==2
    E_k(:,:,1)=e_data(1:nband,:);
    E_k(:,:,2)=e_data((nband+1):end,:);
else
    E_k(:,:,1)=e_data;
end

n=fscanf(fid,'%d',1);
fgetl(fid);
for j=1:n
    str=fgetl(fid);
    str_out=strsplit(strtrim(str));
    xtick(j)=str2double(str_out{1});
    xtickLabel{j}=str_out{2}(2:end-1);
end

fclose(fid);

% -------------------- Plot --------------------
figure;
if spin==2
    subplot(1,2,1);
    hold on;
    for ii=1:nband
        plot(kp,E_k(ii,:,1)-E_fermi,'b');
    end
    for jj=2:n-1
        plot([xtick(jj),xtick(jj)],ylim,'k')
    end
    set(gca, 'xtick', xtick);
    set(gca, 'xticklabel', xtickLabel);
    ylabel('E-E_F(eV)');
    axis([xtick(1),xtick(end),E_range]);
    plot(xlim,[0,0],'--k');
    hold off;
    
    subplot(1,2,2);
    hold on;
    for ii=1:nband
        plot(kp,E_k(ii,:,2)-E_fermi,'r');
    end
    for jj=2:n-1
        plot([xtick(jj),xtick(jj)],ylim,'k')
    end
    set(gca, 'xtick', xtick);
    set(gca, 'xticklabel', xtickLabel);
    ylabel('E-E_F(eV)');
    axis([xtick(1),xtick(end),E_range]);
    plot(xlim,[0,0],'--k');
    hold off;
else
    hold on;
    for ii=1:nband
        plot(kp,E_k(ii,:,1)-E_fermi,'b');
    end
    for jj=2:n-1
        plot([xtick(jj),xtick(jj)],ylim,'k')
    end
    set(gca, 'xtick', xtick);
    set(gca, 'xticklabel', xtickLabel);
    ylabel('E-E_F(eV)');
    axis([xtick(1),xtick(end),E_range]);
    plot(xlim,[0,0],'--k');
    hold off;    
end
end

下面是附有运行sband函数后的效果图(此处计算体系为BCC-Fe):


相关文章

  • 利用Matlab从第一性原理计算软件Siesta读取和生成能带图

    Siesta关于E-k关系计算结果保存于systemlabel.bands文件内,故Matlab程序只需要读取此文...

  • RGB转YCbCr

    在MATLAB中 在Python中 方法一:利用skimage中的转换函数 方法二:利用公式计算 读取图片,并获取...

  • matlab图像显示及保存

    姓名:边颖超 学号:19021210974 利用MATLAB读取一张灰度和彩色图像,查看其对应的元素矩阵,将灰度图...

  • 2019-05-21

    第一性原理材料计算培训班6月北京开课 01 培训亮点 1、从实战出发,帮助学员快速掌握第一性原理软件使用及固体物理...

  • 100种思维模型-36.第一性原理

    原始含义:第一性原理,英文First Principle,是一个计算物理或计算化学专业名词,广义的第一性原理计算指...

  • 史上最全 python常见面试题

    Linux云计算和Python推动市场提升的学习研究者。大数据的文件读取 ① 利用生成器generator ②迭代...

  • 作为个体自主学习,读《第一性原理》能带来什么启发?

    作为个体自主学习,读《第一性原理》能带来什么启发? 真理,在洞穴之外,在阳光之下。 ——摘自《第一性原理》,作者:...

  • 怎么寻找创业的方向

    1.应用第一性原理。埃隆马斯克他发明了第一性原理,什么是第一性原理呢?所谓第一性原理,就是利用物理的本质思维来对创...

  • Matlab

    Matlab的数学计算=数值计算+符号计算 矩阵 矩阵生成 通过显式元素列表输入矩阵 通过语句生成矩阵 from:...

  • Python的matplotlib库画各种函数图

    利用Python的matplotlib库可以画各种函数图,代替matlab等绘图软件的功能 结果如下: 代码如下:

网友评论

      本文标题:利用Matlab从第一性原理计算软件Siesta读取和生成能带图

      本文链接:https://www.haomeiwen.com/subject/rrlsbttx.html