# [Pw_forum] Left and right going Bloch's states from PWCOND

Alexander Smogunov smogunov at sissa.it
Tue Nov 10 14:46:02 CET 2009

Dear Manoj

On Sun, 2009-11-08 at 03:49 -0500, Manoj Srivastava wrote:
> Dear Alexander,
>  Thanks for answering my question. I have two more questions. I understand
> that for muliple channels in the leads, Bloch's states are arranged in
> order of increasing |kz|. For example-
>  Nchannels of the left tip =            4
>         k1(2pi/a)    k2(2pi/a)       E-Ef (eV)
>
>   -0.2937447   0.0000000   0.0000000
>    0.3140648   0.0000000   0.0000000
>   -0.3882921   0.0000000   0.0000000
>    0.4084626   0.0000000   0.0000000
>  Nchannels of the right tip =            4
>         k1(2pi/a)    k2(2pi/a)       E-Ef (eV)
>
>    0.2117188   0.0000000   0.0000000
>    0.3140394   0.0000000   0.0000000
>   -0.3915554   0.0000000   0.0000000
>   -0.4937163   0.0000000   0.0000000
>
> Now when I calculate transmission, code prints out -
>     1 -->     1   0.0198530
>     1 -->     2   0.0638572
>     1 -->     3   0.0193576
>     1 -->     4   0.5152587
>                  0.61833
>  and three more sets like this (I am not writing it down). In above
> 1,2,3,4 correspond to Bloch's states in left and right lead. My question
> is, are transmission coefficients arranged in the same order as kz 's are.
> e.g. does transmission coefficient in 1 -->1 stand for transmission
> coefficient of state kz= -0.2937447 in left lead to state with
> kz=0.2117188 in the right lead? similarly, 1-->2 mean kz=-0.2937447 to
> kz=0.3140394 , and so on ?
>

That's right.

> Also, what is eigenchannel decomposition, if I want to get transmission
> coefficient, code prints out as
> T_ij for propagating states:
>     1 -->     1   0.0198530
>     1 -->     2   0.0638572
>     1 -->     3   0.0193576
>     1 -->     4   0.5152587
>                  0.61833
>     2 -->     1   0.1840566
>     2 -->     2   0.3834998
>     2 -->     3   0.0693121
>     2 -->     4   0.1578845
>                  0.79475
>     3 -->     1   0.1853693
>     3 -->     2   0.0321809
>     3 -->     3   0.1536389
>     3 -->     4   0.0309744
>                  0.40216
>     4 -->     1   0.1601806
>     4 -->     2   0.0132465
>     4 -->     3   0.2321587
>     4 -->     4   0.1197219
>                  0.52531
> then what information does eigenchannel decomposition contain?
>  Eigenchannel decomposition:
> @    1  0.00000  0.10086
>                       0.31024
>                       0.09173
>                       0.36027
>                       0.23776
> @    2  0.00000  0.47744
>                       0.03523
>                       0.03500
>                       0.49217
>                       0.43760
> @    3  0.00000  0.84821
>                       0.42617
>                       0.44674
>                       0.06122
>                       0.06587
> @    4  0.00000  0.91404
>                       0.22836
>                       0.42652
>                       0.08634
>                       0.25877
> I dont know what to think of these numbers. Thanks for your help.
>

As you may know, the eigenchannels (and their transmissions) are defined
as eigenvectors, say A_{ij} (and eigenvalues t_{j}) of the Hermitian
matrix T^{+} T, where T is the transmission matrix from the left to the
right.

Here there are 4 eigenchannels (the same number as Nchannel in the left
lead), and for each of them the code prints its number j, energy (here
it is the E_F), and its transmission t_j. The following 4 numbers in the
column are the squared components of the eigenchannel over the left lead
bands, i.e. |A_{ij}|^2.

All the best,
Alexander

> Regards,
> Manoj
>
>
>  On Mon, 2 Nov 2009, Alexander Smogunov wrote:
>
> > Dear Manoj.
> > The new parameter lorb is simply used to give in output the scattering
> > states so that you could plot them, it does not affect the transmission
> > calculation itself. If it is .false. the code will run normally as
> > before... It is true that this new option does not work for ikind=2,
> > but you can still calculate transmission and reflection amplitudes.
> > To calculate t and r from right to left you should simply
> > call the transmit routine in do_cond.f90 with the last argument
> > to set to .false. By default the code does not compute  the
> > case of right --> left scattering since the total transmission
> > is the same as in left --> right case. Only if you want to plot the
> > scattering states (lorb=.true.) it does that.
> > It is how the things are implemented now ...
> > Best regards,
> > Alexander
> >
> >
> >
> >
> > On Fri, 2009-10-30 at 14:04 -0400, Manoj Srivastava wrote:
> > > Just to add one more question.
> > > what is 'lorb' switch. I get following-
> > >   lorb,          &  ! if .t. calculate the scattering (or Bloch) states
> > > so, i guess for transmission calculation i will have to set it to
> > > 't'. now-
> > > IF (lorb.and.ikind.eq.2) call errore('do_cond','lorb not working with
> > > ikind = 2',1)
> > > so, it seems that calculation for r and t for right and left going
> > > state, when left and right leads are different doesnot work. Is that
> > > correct? A possible work around may be rotating the whole system by 180
> > > degree, which would be like treating left lead as right lead and
> > > scattering region rotated. Can I do that?
> > >
> > > Regards,
> > > Manoj
> > >
> > > On Fri, 30 Oct 2009, Manoj Srivastava wrote:
> > >
> > > > Dear Alexander,
> > > > Thank you very much! I read the code, it seems that there are
> > > > quiet a few changes in 4.1.1 compared to 4.0.4 :) .So, just to make sure,
> > > > if I want to calculate r and t for left going Bloch's state as well as
> > > > right going Bloch's state, I need to run the code two times, one time with
> > > > 'left_to_right' switch true, and another time false. I dont need to change
> > > > scattering region or interchange left and right leads.
> > > >
> > > > Regards,
> > > > Manoj Srivastava
> > > >  On Thu, 29 Oct 2009, Alexander
> > > > Smogunov wrote:
> > > >
> > > > > Dear Manoj
> > > > >
> > > > > On Wed, 2009-10-28 at 01:49 -0400, Manoj Srivastava wrote:
> > > > > > Dear Alexander,
> > > > > >  You are correct, left and right moving states are in general not
> > > > > > related. I was wrong about trying to create a pair. Thanks for
> > > > > > clarification.
> > > > > >  I have a few more questions.
> > > > > >  1. I want to find out the reflection coefficient in the code. In
> > > > > > transmit.f90, transmission coefficient is |tmat(ig,n)|^2, where tmat is
> > > > > > vec1(ntran-n2d-npol*nocrosr+ig,n). (line 206, of version 4.0.5).
> > > > > > Reflection is not explicitly calculated in the code, but it should be
> > > > > > modulus square of vec1(2*n2d+npol*norbs+ig,n) (line 234). Am I correct?
> > > > >
> > > > > in the 4.1 version there is output of both t and r.
> > > > >
> > > > >
> > > > > >
> > > > > >  2. In the code reflection and transmission coefficients are calculated
> > > > > > for one direction lets say t++ and t+-, which is transmission and
> > > > > > reflection coefficient for Bloch' state moving from - to + , or in other
> > > > > > words, left to right. To calculate transmission and reflection for Bloch's
> > > > > > state going from right to left, what should I do? Should i just rotate my
> > > > > > system 180 degree, that way leads get interchanged and also scattering
> > > > > > area has orientation 180 different from before.
> > > > > >
> > > > >
> > > > > again in the 4.1 version you have possibility to calculate t and r for
> > > > > both directions, in the do_cond.f90 the transmit routine is called with
> > > > > an extra parameter which is true (false) if you want to calculate
> > > > > scattering states propagating from the left (from the right).
> > > > >
> > > > > >  3. In the subroutine sunitary.f90, is raux measure of conservation of
> > > > > > flux? If I sum all the transmission and reflecion coefficient for
> > > > > > a particular Bloch's state, I should get 1, and computationally a number
> > > > > > close to 1. How large could it be for S matrix not to be unitary, i m
> > > > > > getting raux more than one e.g. 1.0011  but code still considers smatrix
> > > > > > to be unitary.
> > > > >
> > > > > in the case when |R + T - 1| > 1.d-4 for some band, it should print out
> > > > > the value of R+T but continues to run anyway.
> > > > >
> > > > > All the best,
> > > > > Alexander
> > > > >
> > > > >
> > > > >
> > > > > >
> > > > > > Regards,
> > > > > > Manoj Srivastava
> > > > > > University of Florida, Gainesville, FL
> > > > > >
> > > > > > <pw_forum at pwscf.org>
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Thu, 22
> > > > > > Oct 2009, Alexander Smogunov wrote:
> > > > > >
> > > > > > > On Thu, 2009-10-22 at 11:34 -0400, Manoj Srivastava wrote:
> > > > > > > > Dear Alexander,
> > > > > > > >  Thanks for your answer. I just want to make sure. Imagine we have total
> > > > > > > > number of channels in the left lead 2, so total number of Bloch's state
> > > > > > > > are 4. 2 of them left going say a and b, and 2 right going say c and d.
> > > > > > > > So, are you saying that for left going state a, the corresponding right
> > > > > > > > going state is c? Are they ordered this way?
> > > > > > >
> > > > > > > what do you mean by corresponding? Left and right moving Bloch
> > > > > > > states are in general not related one to another, you can even have
> > > > > > > different number of them ... Only if you have some symmetry S which
> > > > > > > brings kz to -kz conserving k_parallel, then the state with
> > > > > > > \psi_{-kz} will be S \psi{kz}. This is true for example at 2D G point
> > > > > > > when you have time reversal operation.
> > > > > > >
> > > > > > > Now the code simply arranges the propagating states in the order of
> > > > > > > increasing |k_z|...
> > > > > > >
> > > > > > > Regards, Alexander
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > Regards,
> > > > > > > > Manoj
> > > > > > > >
> > > > > > > >
> > > > > > > >  On Thu, 22 Oct 2009, Alexander
> > > > > > > > Smogunov wrote:
> > > > > > > >
> > > > > > > > > Dear Manoj.
> > > > > > > > >
> > > > > > > > > The output of complex k vectors is performed in
> > > > > > > > > summary_band.f90 routine. If you want to see all
> > > > > > > > > the complex k vectors, not only propagating ones,
> > > > > > > > > you can change at the end of this routine:
> > > > > > > > >
> > > > > > > > > -------------------
> > > > > > > > >   do i = 1, nchanl
> > > > > > > > >     WRITE( stdout,'(3f12.7)')  DBLE(kvall(i)), AIMAG(kvall(i)), eev
> > > > > > > > >   enddo
> > > > > > > > > -------------------
> > > > > > > > >
> > > > > > > > > to
> > > > > > > > > -------------------
> > > > > > > > >
> > > > > > > > >   do i = 1, 2*nstl
> > > > > > > > >     WRITE( stdout,'(3f12.7)')  DBLE(kvall(i)), AIMAG(kvall(i)), eev
> > > > > > > > >   enddo
> > > > > > > > > -------------------
> > > > > > > > >
> > > > > > > > > Altogether there are 2*nstl (or 2*nstr) Bloch states in the left
> > > > > > > > > (or right) lead. First half, [1,nstl], are propagating or decaying to
> > > > > > > > > the right states, another half, [nstl+1,2*nstl], - propagating or
> > > > > > > > > decaying to the left. In each group, first nchanl states are propagating
> > > > > > > > > states.
> > > > > > > > >
> > > > > > > > > The propagating states are normalized by the current and are arranged in
> > > > > > > > > the above order at the end of jbloch.f90 routine, after the following
> > > > > > > > > lines:
> > > > > > > > >
> > > > > > > > > !
> > > > > > > > > ! Right ordering (+, >, -, <)
> > > > > > > > > !
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Notice, that in the last versions the code gives in output
> > > > > > > > > both propagating to the right and to the left states.
> > > > > > > > >
> > > > > > > > > Hope this helps,
> > > > > > > > > Alexander
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Wed, 2009-10-21 at 14:13 -0400, Manoj Srivastava wrote:
> > > > > > > > > > Dear All,
> > > > > > > > > >  I am trying to figure out the left and right going Bloch's states in the
> > > > > > > > > > lead from PWCOND. For a given (kx,ky)and energy we get kz. The code only
> > > > > > > > > > prints out Bloch's state moving in one direction. eg. in one of the
> > > > > > > > > > calculation-
> > > > > > > > > > k//=(0.375,-0.375)
> > > > > > > > > >  Nchannels of the left tip =            1
> > > > > > > > > >         k1(2pi/a)    k2(2pi/a)       E-Ef (eV)
> > > > > > > > > >
> > > > > > > > > >    0.3157801   0.0000000   0.0000000
> > > > > > > > > >
> > > > > > > > > > Now if I want Bloch's state moving in right as well as left direction, I
> > > > > > > > > > can go to kbloch.f90 subroutine, and print out all the eigen values of
> > > > > > > > > > AX=exp(ikd)BX, and out of those the ones with real solution would be our
> > > > > > > > > > Bloch's state, so I get for each channel two solutions-
> > > > > > > > > >  kval (-0.275409421993275,1.823688001395235E-010)
> > > > > > > > > >  kval (0.315780119742506,-3.611201785292708E-012)
> > > > > > > > > >
> > > > > > > > > > To figure out the direction, I can calculate current associated with these
> > > > > > > > > > Bloch's sate and if the current is +ive it is right moving , and if '-'ive
> > > > > > > > > > its left moving Bloch's state. I can print out current from jbloch.f90
> > > > > > > > > > subroutine which are -
> > > > > > > > > >  current eigenvalue -1.86502143831863  1.59149029314457
> > > > > > > > > >
> > > > > > > > > > So, clearly the first state with kval=-0.2754094 is left moving and the
> > > > > > > > > > other one right moving. Upto here its clear to me how to identify left and
> > > > > > > > > > right moving states.
> > > > > > > > > >
> > > > > > > > > > I get confused when for a given (kx,ky,E), I have more than one Bloch'
> > > > > > > > > > state. In another calculation where i get multiple Bloch's state-
> > > > > > > > > >  Nchannels of the left tip =            5
> > > > > > > > > >         k1(2pi/a)    k2(2pi/a)       E-Ef (eV)
> > > > > > > > > >
> > > > > > > > > >   -0.0746301   0.0000000   0.0000000
> > > > > > > > > >    0.1205527   0.0000000   0.0000000
> > > > > > > > > >    0.3112908   0.0000000   0.0000000
> > > > > > > > > >    0.4200218   0.0000000   0.0000000
> > > > > > > > > >   -0.4935150   0.0000000   0.0000000
> > > > > > > > > >
> > > > > > > > > > so i did the same trick i did above to first print out kz and then
> > > > > > > > > > current, which gives me -
> > > > > > > > > >  kval (-0.420023481074359,1.979595081419732E-010)    (call it a)
> > > > > > > > > >  kval (0.420023367986768,2.500979698670295E-011)      (b)
> > > > > > > > > >  kval (-0.306507431678779,-1.236804629184431E-011)    (c)
> > > > > > > > > >  kval (-0.125376071175573,-6.134512510438736E-011)    (d)
> > > > > > > > > >  kval (-7.945001124706894E-002,6.683546930037856E-011)(e)
> > > > > > > > > >  kval (0.106554601758169,-6.427946951285107E-011)     (f)
> > > > > > > > > >  kval (8.866867725358024E-002,8.342250371574646E-011) (g)
> > > > > > > > > >  kval (0.325333314672671,1.260810749228185E-011)      (h)
> > > > > > > > > >  kval (-0.488725859521576,1.769197678346003E-010)     (i)
> > > > > > > > > >  kval (0.479509832763231,1.765499400037283E-010)      (j)
> > > > > > > > > >
> > > > > > > > > > current eigenvalue  -9.31389492882581       -1.24296522993488
> > > > > > > > > >   -1.21324078359658       -1.11950286753963       -1.08166842367443
> > > > > > > > > >    1.08187482164864        1.11973146584263        1.21295295042188
> > > > > > > > > >    1.24280031534940        9.313897787790
> > > > > > > > > >
> > > > > > > > > > So, the first 5 are left moving and rest are right moving. But I dont know
> > > > > > > > > > the pairs. for example for left moving state a, what is the corresponding
> > > > > > > > > > right moving state whether its f or g ... j ?
> > > > > > > > > >
> > > > > > > > > > Any help would be appreciated.
> > > > > > > > > >
> > > > > > > > > > Regards,
> > > > > > > > > > Manoj Srivastava
> > > > > > > > > > University of Florida, Gainesville.
> > > > > > > > > >
> > > > > > > > > > _______________________________________________
> > > > > > > > > > Pw_forum mailing list
> > > > > > > > > > Pw_forum at pwscf.org
> > > > > > > > > > http://www.democritos.it/mailman/listinfo/pw_forum
> > > > > > > > > --
> > > > > > > > > e-mail: smogunov at sissa.it
> > > > > > > > > home-page: http://people.sissa.it/~smogunov
> > > > > > > > >
> > > > > > > > > _______________________________________________
> > > > > > > > > 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
> > > > > > > --
> > > > > > > e-mail: smogunov at sissa.it
> > > > > > > home-page: http://people.sissa.it/~smogunov
> > > > > > >
> > > > > > > _______________________________________________
> > > > > > > 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
> > > > > --
> > > > > e-mail: smogunov at sissa.it
> > > > > home-page: http://people.sissa.it/~smogunov
> > > > >
> > > > > _______________________________________________
> > > > > 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
> > --
> > e-mail: smogunov at sissa.it
> > home-page: http://people.sissa.it/~smogunov
> >
> > _______________________________________________
> > 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
--
e-mail: smogunov at sissa.it
home-page: http://people.sissa.it/~smogunov