[Wien] black stripes in band plot
Peter Blaha
pblaha at theochem.tuwien.ac.at
Tue Mar 23 10:57:41 CET 2021
Probably you are using very many k-points.
It could be a "tolerance problem."
Please try the attached subroutine in SRC_spaghetti.
Peter Blaha
Dear Prof. Blaha and wien2k users,
I just encountered a small but strange problem. There are two black
stripes in the background, specifically, in the area between K-Gamma
and H-A of my band plot and so is the corresponding grace file. Other
than that everything is fine. For TiC and other compounds , it works
fine. So, what could be the reasons leading to this problem?
Fan
--
--------------------------------------------------------------------------
Peter BLAHA, Inst.f. Materials Chemistry, TU Vienna, A-1060 Vienna
Phone: +43-1-58801-165300 FAX: +43-1-58801-165982
Email: blaha at theochem.tuwien.ac.at WIEN2k: http://www.wien2k.at
WWW: http://www.imc.tuwien.ac.at
-------------------------------------------------------------------------
-------------- next part --------------
subroutine bz_lin(v,nv,lines,nlines,x,nbreak,break,breakfactor)
! *****************************************
!
IMPLICIT REAL*8 (A-H,O-Z)
! INCLUDE 'param.inc'
!
dimension v(3,*)
dimension lines(*)
dimension x(*)
!
dimension v0(3),vdir(3),vdir1(3)
logical break(*)
!
data toler /1.d-05/
!-----------------------------------------------------------------------
!
!.....INITIALIZE LINE-CHECK; the 1. and the 2. k-point always build
! a Brillouin-Zone line
nlines=1
lines(1)=1
v0(1) =v(1,1)
v0(2) =v(2,1)
v0(3) =v(3,1)
vdir(1)=v(1,2) - v(1,1)
vdir(2)=v(2,2) - v(2,1)
vdir(3)=v(3,2) - v(3,1)
xsum=sqrt( vdir(1)**2 + vdir(2)**2 + vdir(3)**2 )
x(1)=0.d0
x(2)=xsum
nbreak=0
break(1)=.false.
break(2)=.false.
dmax=breakfactor*xsum
dbreak=2.d0*xsum
! dmax indicates gap between 2 lines
jkp=2
!write(6,'(i3,"k=",4f10.6)') 1,v(1:3,1),xsum
!write(6,'(i3,"k=",7f10.6)') 2,v(1:3,2),xsum,dbreak
!
!.....START SEARCH LOOP FOR ALL OTHER K-POINTS
10 continue
jkp=jkp+1
if(jkp.gt.nv) goto 100
d=sqrt( (v(1,jkp)-v(1,jkp-1))**2 + (v(2,jkp)-v(2,jkp-1))**2 &
+ (v(3,jkp)-v(3,jkp-1))**2 )
!write(6,'(i3,"k=",4f10.6)') jkp,v(1:3,jkp),d
if(d.gt.dbreak) then
d=dmax
xsum=xsum + d
x(jkp)=xsum
nbreak=nbreak+1
break(jkp)=.true.
nlines=nlines+1
lines(nlines)=jkp-1
nlines=nlines+1
lines(nlines)=jkp
v0(1)=v(1,jkp)
v0(2)=v(2,jkp)
v0(3)=v(3,jkp)
vdir(1)=v(1,jkp+1)-v(1,jkp)
vdir(2)=v(2,jkp+1)-v(2,jkp)
vdir(3)=v(3,jkp+1)-v(3,jkp)
dbreak=2.d0*sqrt( vdir(1)**2 + vdir(2)**2 + vdir(3)**2 )
goto 10
else
break(jkp)=.false.
endif
xsum=xsum + d
x(jkp)=xsum
eps1=(v(1,jkp)-v0(1))*vdir(2) - (v(2,jkp)-v0(2))*vdir(1)
eps2=(v(2,jkp)-v0(2))*vdir(3) - (v(3,jkp)-v0(3))*vdir(2)
eps3=(v(1,jkp)-v0(1))*vdir(3) - (v(3,jkp)-v0(3))*vdir(1)
! print*,jkp,eps1,eps2,eps3,toler
vdir1(1)=v(1,jkp) - v(1,jkp-1)
vdir1(2)=v(2,jkp) - v(2,jkp-1)
vdir1(3)=v(3,jkp) - v(3,jkp-1)
absvdir1=sqrt(vdir1(1)**2+vdir1(2)**2+vdir1(3)**2)
absvdir =sqrt(vdir(1)**2+vdir(2)**2+vdir(3)**2)
vtest=(vdir(1)*vdir1(1)+vdir(2)*vdir1(2)+vdir(3)*vdir1(3))/absvdir/absvdir1 -1.d0
!print *,"vtest",vtest,toler
!print*,'vdir',vdir
!print*,'vdir1',vdir1
!if((vdir(1)-vdir1(1).gt.toler).or.(vdir(2)-vdir1(2).gt.toler).or.(vdir(3)-vdir1(3).gt.toler)) then
if(abs(vtest).gt.toler) then
! if (abs(eps1).gt.toler .or. abs(eps2).gt.toler &
! .or. abs(eps3).gt.toler) then
!print*,'break2',eps1,eps2,eps3
nlines=nlines+1
lines(nlines)=jkp-1
v0(1)=v(1,jkp-1)
v0(2)=v(2,jkp-1)
v0(3)=v(3,jkp-1)
vdir(1)=v(1,jkp)-v(1,jkp-1)
vdir(2)=v(2,jkp)-v(2,jkp-1)
vdir(3)=v(3,jkp)-v(3,jkp-1)
dbreak=2.d0*sqrt( vdir(1)**2 + vdir(2)**2 + vdir(3)**2 )
endif
goto 10
!
!.....READY
100 continue
lines(nlines+1)=nv
return
end
More information about the Wien
mailing list