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

Alexander Smogunov smogunov at sissa.it
Mon Nov 2 16:32:37 CET 2009


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




More information about the users mailing list