|
|
额。。。忘记上传文件了~
搞了很久,上传不了啊~
我把代码贴在这里啦~
文件与处理程序,文件名为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 ] |
|