欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记一个绘制态密度与能带的matlab脚本

程序员文章站 2022-05-16 18:14:59
...

题记

记一个能带与态密度绘制的脚本,用于处理p4VASP提取的数据后的数据(需要p4vasp的可以在我博客里找)

用法

能带数据需保存在名为band.dat的文件里
态密度数据保存在名为dos.dat的文件里

输入

脚本当中有些数据需要先手动输入(共3处)
比如排列方式
能带的xy轴的取值范围
能带大高对称点

%%%%%%%%%%%%%%%%%%%%能带%%%%%%%%%%%%%%%
dat= importdata('band.dat');%输入能带数据
x=dat(:,1);
y=dat(:,2);
[m,n]=size(x);
mun1=1;
subplot(1,2,1)%能带图的放置位置,这里121分别表示把图按12列的形式排列,其中这幅图排1的位置
hold on
for i=2:m
    if x(i)== 0
        plot(munx,muny,'k','linewidth',1)%绘制能带图默认颜色为黑色‘k’线的粗细为1
        hold on
        mun1=1;
        x_long=x(i-1);
        clear munx muny
        i=i+1;
    else
        munx(mun1)=x(i);
        muny(mun1)=y(i);
        mun1=mun1+1;
        i=i+1;
    end
end
%%%%%%%%%%%%%%%%%%%%%输入%%%%%%%%%%%%%%%
kpoint_0=0   ; %第一条能带,这里需要手动输入高对称点的位置
kpoint_1=0   ; %第二条能带
kpoint_2=0   ; %第三调能带
kpoint_3=0   ; %第四条能带   
kpoint_4=0   ; %第五条能带
x_end=0.25   ; %x轴的取值范围
y_statr=-2   ; %y轴的起始范围
y_end=3      ; %y轴的结束范围
set(gca,'XTick',[0,kpoint_1,kpoint_2,kpoint_3,kpoint_4],'linewidth',2)
set(gca,'XTickLabel',{'Γ','M','K','Γ'});%输入高对称点的名称以‘名称’形式输入
%%%%%%%%%%%%%%%%%%%%截止%%%%%%%%%%%%%%%
plot([kpoint_1,kpoint_1],[y_end,y_statr],'k','linewidth',0.5)
plot([kpoint_2,kpoint_2],[y_end,y_statr],'k','linewidth',0.5)
plot([kpoint_3,kpoint_3],[y_end,y_statr],'k','linewidth',0.5)

set(gca,'YTick',(y_statr:1:y_end),'linewidth',2)
axis([0,x_long,y_statr,y_end])
plot([0,x_long],[0,0],'--r','linewidth',1)
box off 
plot([0,x_long],[y_end,y_end],'k','linewidth',2)
plot([x_long,x_long],[y_end,y_statr],'k','linewidth',2)
ylabel('Energy(Ev)','FontSize',16)
xlabel('Band','FontSize',16)
hold on
%a='以读取能带数据,并绘制能带图';


%%%%%%%%%%%%%%态密度%%%%%%%%%%%%%%%%%%%%%%
clear munx muny m x y dat 
dat= importdata('dos.dat');%导入态密度数据
x=dat(:,1);
y=dat(:,2);
[m,n]=size(x);
mun1=1;
subplot(1,2,2)   %将态密度图排列在第一排的第二个位置
hold on
line_color=[0 0 0
            0 0 1
            1 0.5 0
            0 0.5 0
            0.7 0.2 0.4
            0.2 0.6 0.3];%每条线颜色的设置
co=1;
for i=1:m-1
    if x(i) > x(i+1)||i == m-1
        plot(munx,muny,'Color',[line_color(co,1),line_color(co,2),line_color(co,3)],'linewidth',2)
        hold on
        mun1=1;
        co=co+1;
        clear munx muny
        i=i+1;
    else
        munx(mun1)=x(i);
        muny(mun1)=y(i);
        mun1=mun1+1;
        i=i+1;
    end
end
%%%%%%%%%%%%%%%%%%%%输入%%%%%%%%%%%
y_statr=0 ;%y轴的起始端默认为0
y_end=15  ;%y轴的取值的结束端
x_statr=-2;%x轴的取值的开始端
x_end=2   ;%x轴的取值的结束端
%%%%%%%%%%%%%%%%%%%%截止%%%%%%%%%%%
set(gca,'XTick',(x_statr:1:x_end),'linewidth',2)
set(gca,'YTick',(y_statr:3:y_end),'linewidth',2)
axis([x_statr,x_end,y_statr,y_end])
plot([0,0],[0,y_end],'--r','linewidth',1)
box off 
plot([x_statr,x_end],[y_end,y_end],'k','linewidth',2)
plot([x_end,x_end],[y_end,y_statr],'k','linewidth',2)
xlabel('Energy(Ev)','FontSize',16)
ylabel('DOS','FontSize',16)
%%%%%%%%%%%%%%%%%%输入%%%%%%%%%%%%
legend('DOS','W 5d','S 3s');  %输入每一条能带的名称这里有3条分别按‘’,的形式补充
%%%%%%%%%%%%%%%%%%截止%%%%%%%%%%%%
hold on

处理结果示范

记一个绘制态密度与能带的matlab脚本

相关标签: matlab vasp