- #1
anahita
- 39
- 0
Hi
I have plot band structure zigzag graphene nanoribbons with Matlab.
I do not know if it is properly written program anyone can help Bug fixes.
I have plot band structure zigzag graphene nanoribbons with Matlab.
I do not know if it is properly written program anyone can help Bug fixes.
Matlab:
NU=10; % Number of atoms
Nbnd=4*NU; % number of bands
aa=2.26;
a=sqrt(3)*aa;
Csoc=0.0;
X(1)=0;
Y(1)=0;
for ixy=2:NU
if mod(ixy,4)==2
X(ixy)=X(ixy-1)-aa*cosd(30);
Y(ixy)=Y(ixy-1)+aa*sind(30);
end
if mod(ixy,4)==3
X(ixy)=X(ixy-1);
Y(ixy)=Y(ixy-1)+aa;
end
if mod(ixy,4)==0
X(ixy)=X(ixy-1)+aa*cosd(30);
Y(ixy)=Y(ixy-1)+aa*sind(30);
end
if mod(ixy,4)==1
X(ixy)=X(ixy-1);
Y(ixy)=Y(ixy-1)+aa;
end
end
for iz=1:NU
if mod(iz,2)==1
Z(iz)=0.45;
else
Z(iz)=-0.45;
end
end
sho=0;
for is=[0,-1,1]
for ks=1:NU
sho=sho+1;
XT(sho)=X(ks)+is*a;
YT(sho)=Y(ks);
ZT(sho)=Z(ks);
Ax(sho)=is*a;
No(sho)=ks;
end
end
figure(1)
plot(XT,YT,'*')
Ax=Ax/a;
for ik=1:101
K(ik)=-pi+(ik-1)*((2*pi)/100);
H=H0(Nbnd);
for is=1:NU
for js=1:sho
dis=sqrt(((XT(is)-XT(js))^2)+((YT(is)-YT(js))^2));
if abs(dis-2.26)<0.1 & abs(No(is)-No(js))>0
l=(XT(is)-XT(js))/dis;
m=(YT(is)-YT(js))/dis;
n=(ZT(is)-ZT(js))/dis;
h=hamiltonian(l,m,n);
H((No(is)-1)*4+1:No(is)*4,(No(js)-1)*4+1:No(js)*4)=H((No(is)-1)*4+1:No(is)*4,(No(js)-1)*4+1:No(js)*4)+h*exp(i*K(ik)*Ax(js));
end
end
end
E(ik,1:Nbnd)=sort(real(eig(H)));
pl(ik)=(ik-1)/100;
end
figure(2)
plot(E)
The functions h and H0 attached.
function [h] = hamiltonian(l,m,n)
h=zeros(4,4);
tsss=-2.08;
tsps=2.48;
tpps=2.72;
tppp=-0.72;
% gharar dad ----->% S, Px, Py, Pz
% S, Px, Py, Pz
%1 2 3 4
h(1,1)=tsss;
h(1,2)=l*tsps;
h(1,3)=m*tsps;
h(1,4)=n*tsps;
h(2,1)=-(l*tsps)';
h(2,2)=l*l*tpps+(1-l*l)*tppp;
h(2,3)=l*m*tpps-l*m*tppp;
h(2,4)=l*n*tpps-l*n*tppp;
h(3,1)=-(m*tsps)';
h(3,2)=(l*m*tpps-l*m*tppp)';
h(3,3)=m*m*tpps+(1-m*m)*tppp;
h(3,4)=m*n*tpps-m*n*tppp;
h(4,1)=-(n*tsps)';
h(4,2)=(l*n*tpps-l*n*tppp)';
h(4,3)=(m*n*tpps-m*n*tppp)';
h(4,4)=n*n*tpps+(1-n*n)*tppp;
end
and
function [H0] = H0(Nbnd)
Es=-4.2;
Ep=1.715;
H0=zeros(Nbnd);
for ih0=1:Nbnd
if mod(ih0,4)==1
H0(ih0,ih0)=Es;
else
H0(ih0,ih0)=Ep;
end
end
Last edited by a moderator: