24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1143  |  回复: 3

fdd096030079

新虫 (小有名气)

[交流] vasp_bnd的Matlab改进版,更方便~已有1人参与

今天看到一个帖子是关于vasp_bnd的matlab版本,我看了下,里面不能直接输入费米能,需要手动修改;另外就是需要把文件放到Matlab的同一个工作目录下才能运行,我这个程序只需要通过一个对话框来选择文件即可~需要强调的是,我这个程序在绘图时,利用了数值插值来绘图,画出来的图像更光滑~
我这个程序,是自己前几个星期写的,当时没想到这个也可以分享,有什么需要改进的,还望大家向我提出~
另外,我想说明的是,我这个是参照网上一个Fortran的程序改编过来的,不知为什么,自旋的还不能处理,谅解啊~
运行程序后,要求输入费米能级:

之后,弹出一个对话框,请选择EIGENVAL文件

进行插值绘图

对于K点较少的能带图,插值出来的图像很光滑的,K点较多,看起来会有点杂,当然自己可以对绘图部分进行修改~
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuzhaonan

铁杆木虫 (著名写手)

第一性原理计算大师

资源在哪
玩第一性原理就如看大片
2楼2012-12-02 13:31:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fdd096030079

新虫 (小有名气)

额。。。忘记上传文件了~
搞了很久,上传不了啊~
我把代码贴在这里啦~
文件与处理程序,文件名为dataeigenval,文件名不要搞错了啊,待会儿要调用的!!!
clc;
flag = 0;
ef=input('请输入费米能级:');
[filename path] = uigetfile('*.*','选择EIGENVAL文件');
if filename == 0
    disp('请选择EIGENVAL文件!');
    flag = 1;
    return;
end
files = [path filename];
file = fopen(files);
if file == -1
    disp('文件打开失败!!!');
    return;
end
temp = fgetl(file);
temp = str2num(temp);
ispin = temp(4);
for i=1:4
    fgetl(file);
end
temp = fgetl(file);
temp = str2num(temp);
nn = temp(1);
nk = temp(2);
nbands = temp(3);

e=zeros(nk,nbands);
k=zeros(nk,3);

if ispin==2
    for i=1:nk
        fgetl(file);
        temp = fgetl(file);
        temp = str2num(temp);
        for j=1:3
            k(i,j)=temp(j);
        end
        for j=1:nbands
            temp = fgetl(file);
            temp = str2num(temp);
            eup(i,j)=temp(2);
            edn(i,j)=temp(3);
        end
    end
%     temp = fgetl(file);
%     temp = str2num(temp);
%     for n=1:nbands
%         e(i,n)=temp(n);
%     end
else
    for i=1:nk
        fgetl(file);
        temp = fgetl(file);
        temp = str2num(temp);
        for j=1:3
            k(i,j)=temp(j);
        end
        for j=1:nbands
            temp = fgetl(file);
            temp = str2num(temp);
            e(i,j)=temp(2);
        end
    end
end
fclose(file);
file2 = fopen('bnd.dat','w');
for j=1:nbands
    dk = 0;
    for i=1:nk
        if i==1
            k0 = k(i,;
        end
        a = k(i,-k0;
        dk = dk+sqrt(dot(a,a));
        
        if ispin==2
            fprintf(file2,'%f  %f  %f\n',dk,eup(i,j)-ef,edn(i,j)-ef);
        else
            fprintf(file2,'%f  %f\n',dk,e(i,j)-ef);
        end
        k0=k(i,;
    end
    fprintf(file2,'\n');
end
fclose(file2);
clear a ans dk e ef file file2 i ispin j k k0 nn temp


作图程序,插值法~
文件名:eigenvaluesman
clc;
dataeigenval;%调用dataeigenval,数据预处理
if flag == 1
    return;
end
X=load('bnd.dat');%读取dataeigenvla中产生的数据,也就是K点跟能量的数据,可用txt文件程序打开~
xi=X(1,1)X(nk,1)-X(1,1))/200:X(nk,1);
figure;
for i=1:nbands
     yi=interp1(X((i-1)*nk+1:i*nk,1),X((i-1)*nk+1:i*nk,2),xi,'spline');
     plot(X((i-1)*nk+1:i*nk,1),X((i-1)*nk+1:i*nk,2),'.',xi,yi,'linewidth',1)
     hold on;
end
title('The Bands');
xlabel('K Points');
ylabel('Energy(eV)');



突然发现图片上传错误了一张,晕死~
补上了~


再补充下,程序中的,在复制到代码中是冒号加上左小括号,是冒号加右小括号,这是网页代码转换冲突了~另外,有问题可以问我~

[ Last edited by fdd096030079 on 2012-12-3 at 09:45 ]
3楼2012-12-03 09:21:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

171713294

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
麻烦楼主传一下,分享分享呗
坚持,不放弃
4楼2012-12-03 09:33:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fdd096030079 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见