[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