# [Pw_forum] complex band

Manoj Srivastava manoj at phys.ufl.edu
Mon Dec 1 18:31:57 CET 2008

Dear Alexander,
Dont worry about the previous mail, I figured it out :)

-manoj
On Sun, 30 Nov 2008, Manoj Srivastava wrote:

> Dear Alexander,
>  Thank you very much for your answer. It has started making sense, but
> unfortunately not a whole lot. I think I need to have complete
> understanding of this subroutine in order to have the bigger picture. In
> the other e-mail, copied and pasted as below -
> > the expression -
> > norm2=(((il+xyk(1,ik))*bg(1,1)+(jl+xyk(2,ik))*bg(1,2))**2+ &
> >             ((il+xyk(1,ik))*bg(2,1)+(jl+xyk(2,ik))*bg(2,2))**2)* &
> >
> > i believe is  |G+k|^2. How do you get above expression in the code for
> > this?
> norm2 is indeed |G_perp+k_perp|^2, where G_perp=il*b_1+jl*b_2 and 2d
> vector
> k_perp=xyk(1,ik)*b_1+xyk(2,ik)*b_2 and you indeed select out those
> G_perp+k_perp which satisfy (G_perp+k_perp)^2<Ecut2d.
>
> Why is K_perp in terms of b_1 and b_2? You can ofcourse take it
> like that but is there any specific reason to do that? If we look at the
> Fourier transform of wavefunction psi(r)=sum_{G}\psi(G)exp(i(K+G).r).
> here in this expression do we always take K in terms of G. I dont think
> so, K can be a label, which might be in terms of G vectors but not
> necessarily. What do you think?
> In the input file where we enter k_x and k_y, do we enter  these  in
> terms of b1 and b2? or somewhere later in the code it gets multiplied with
> b1 and b2, if yes where? I am having tough time figuring it out :(
> Thanks for help.
>
> Regards,
> Manoj Srivastava
> Department of Physics,
> University of Florida, Gainesville
>
>
>  On Fri, 28 Nov 2008,
> Alexander wrote:
>
> > Dear Manoj
> > Ngper is the total number of g_perp=G_perp+k_perp with |g_perp|^2<E_cut
> > which are arranged into the shells. Each shell contains g_perp having the same
> > norm which is very useful because many calculations with g_perp depend only
> > on their norms. The number of shells is ngpsh. gnsh(ngpsh) is the norm for
> > each shell, ninsh(ngpsh)  is the number of g_perp in the shell.
> > The array nshell is the auxiliary array used further to arrange the g_perp
> > vectors in the shells.
> >
> > Hope this helps you,
> > regards, Alexander
> >
> > and ngpsh is the number of shells
> >
> > On Thursday 27 November 2008 00:26, Manoj Srivastava wrote:
> > > Dear Alexander, PWSCF users and developers,
> > >  I have a technical question in one of the subroutines used to calculate
> > > complex band. The subroutine 'init_gper.f90' under PWCOND directory is
> > > used to calculate number of G perpendicular vectors within the energy
> > > cutoff by using [k_{\perp}+G_{\perp}]^2.le.E_{cut}. I understand the
> > > counting of Gper, but i dont understand how do they construct the Gper
> > > vectors. For example what is 'ngpsh'? It is defined as 'no. of shells for
> > > G', but i really dont understand what this is. I dont understand after
> > > line 50 of the code in init_gper.f90.  Mainly what does the following
> > > piece of code do
> > >
> > >           do i=1,nrx
> > > 	  do j=1,nry
> > >            icount=0
> > >           do iw=1, ngpsh
> > >            if (abs(norm2-gnorm2(iw)).gt.eps) then
> > >              icount=icount+1
> > >            else
> > >              nshell(i,j)=iw
> > >            endif
> > >          enddo
> > >          if (icount.eq.ngpsh) then
> > >            ngpsh=ngpsh+1
> > >            gnorm2(ngpsh)=norm2
> > >            nshell(i,j)=ngpsh
> > >          endif
> > >       endif
> > >       enddo
> > >       enddo
> > > I understand it is not a good way of asking question, but I am completely
> > > lost. Any help will be appreciated.
> > >
> > > Regards,
> > > Manoj
> > >
> > > _______________________________________________
> > > Pw_forum mailing list
> > > Pw_forum at pwscf.org
> > > http://www.democritos.it/mailman/listinfo/pw_forum
> > _______________________________________________
> > Pw_forum mailing list
> > Pw_forum at pwscf.org
> > http://www.democritos.it/mailman/listinfo/pw_forum
> >
>
>