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

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):

2109e1a7d6df

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值