[Kwant] Berry phase of a system periodic in 1 direction

2019-02-15 Thread Srilok Srinivasan
Dear Kwant users and developers,

Is there a way to calculate the integral(< u_nk | d_k(u_nk)>dk)  across the
1D BZ of a system periodic in one direction. Here u_nk is the periodic part
of the Bloch wave function corresponding to band n. I am trying to compute
this for a simple system of graphene nanoribbon.

I am trying compute the gauge independent value of the above integral using
a "1D Wilsoon loop" where the integral is approximately equal to the
product of   for all k across the BZ.  I defined the unit
cell of the nanoribbon as a lead and tried to get the u_nk as the
propagating modes using leads.modes() method (I have pasted the code below)
but the resolution in k is too large - only 4 momenta across the BZ.

How can we get u_n(k) with a good resolution of k, say for 100 points in
the BZ ? Is this something which can be easily done in Kwant ?


Code:

def make_1D_zigzag(N=7,t=1):
syst = kwant.Builder(kwant.TranslationalSymmetry(Zigzag.prim_vecs[0]))
syst[Zigzag.shape((lambda pos: pos[1] >0 and pos[1] <
get_width(N)),(0,0))] = 2*t
syst[Zigzag.neighbors()] = -t
return syst

lead = make_1D_zigzag(N=N,t=2);
lead = lead.finalized()
prop_modes=lead.modes()[0]
u_nk = prop_modes.wave_functions

Thanks a lot for your help!

Srilok Srinivasan
Graduate Student
Mechanical Engineering
Iowa State University, Ames, IA


Re: [Kwant] Berry phase of a system periodic in 1 direction

2019-02-15 Thread Joseph Weston
Hi,

On 2/15/19 6:42 PM, Srilok Srinivasan wrote:
> Dear Kwant users and developers,
>
> Is there a way to calculate the integral(< u_nk | d_k(u_nk)>dk) 
> across the 1D BZ of a system periodic in one direction. Here u_nk is
> the periodic part of the Bloch wave function corresponding to band n.
> I am trying to compute this for a simple system of graphene nanoribbon.
>
> I am trying compute the gauge independent value of the above integral
> using a "1D Wilsoon loop" where the integral is approximately equal to
> the product of   for all k across the BZ.  I defined
> the unit cell of the nanoribbon as a lead and tried to get the u_nk as
> the propagating modes using leads.modes() method (I have pasted the
> code below) but the resolution in k is too large - only 4 momenta
> across the BZ.

'lead.modes' computes all the modes at a given energy (0 by default).
This is probably not what you want. What you really want is to compute
the eigenvectors of H(k) for different k. 'kwant.physics.Bands' does
this internally, but in Kwant 1.3 it doesn't give you access to the
eigenvectors (just an oversight on our part).

We're in the process of releasing Kwant 1.4, where Bands has been
modified to also return the eigenvectors, so you could wait to use that
(you can track our progress here:
https://gitlab.kwant-project.org/kwant/kwant/issues/275). Alternatively
you can just construct H(k) = h + v exp(ik) + v^dagger exp(-ik) where h
is 'lead.cell_hamiltonian()' and v is 'lead.inter_cell_hopping()' and
diagonalize it yourself for different values of k.

Having said that, you need to be careful. To the best of my knowledge
numerical eigensolvers will typically give you the eigenvectors in
different gauges at different k values (i.e. there will be an arbitrary
phase factor), so  naively calculating the derivative using some finite
difference scheme might give nonsense (I'm not sure about this, though).


Happy Kwanting,


Joe



signature.asc
Description: OpenPGP digital signature


Re: [Kwant] Berry phase of a system periodic in 1 direction

2019-02-18 Thread Srilok Srinivasan
Thanks Joe,

That was very helpful.

Regards,

Srilok Srinivasan

On Fri, Feb 15, 2019 at 1:03 PM Joseph Weston 
wrote:

> Hi,
> On 2/15/19 6:42 PM, Srilok Srinivasan wrote:
>
> Dear Kwant users and developers,
>
> Is there a way to calculate the integral(< u_nk | d_k(u_nk)>dk)  across
> the 1D BZ of a system periodic in one direction. Here u_nk is the periodic
> part of the Bloch wave function corresponding to band n. I am trying to
> compute this for a simple system of graphene nanoribbon.
>
> I am trying compute the gauge independent value of the above integral
> using a "1D Wilsoon loop" where the integral is approximately equal to the
> product of   for all k across the BZ.  I defined the unit
> cell of the nanoribbon as a lead and tried to get the u_nk as the
> propagating modes using leads.modes() method (I have pasted the code below)
> but the resolution in k is too large - only 4 momenta across the BZ.
>
> 'lead.modes' computes all the modes at a given energy (0 by default). This
> is probably not what you want. What you really want is to compute the
> eigenvectors of H(k) for different k. 'kwant.physics.Bands' does this
> internally, but in Kwant 1.3 it doesn't give you access to the eigenvectors
> (just an oversight on our part).
>
> We're in the process of releasing Kwant 1.4, where Bands has been modified
> to also return the eigenvectors, so you could wait to use that (you can
> track our progress here:
> https://gitlab.kwant-project.org/kwant/kwant/issues/275). Alternatively
> you can just construct H(k) = h + v exp(ik) + v^dagger exp(-ik) where h is
> 'lead.cell_hamiltonian()' and v is 'lead.inter_cell_hopping()' and
> diagonalize it yourself for different values of k.
>
> Having said that, you need to be careful. To the best of my knowledge
> numerical eigensolvers will typically give you the eigenvectors in
> different gauges at different k values (i.e. there will be an arbitrary
> phase factor), so  naively calculating the derivative using some finite
> difference scheme might give nonsense (I'm not sure about this, though).
>
>
> Happy Kwanting,
>
>
> Joe
>


-- 
Srilok Srinivasan
Graduate Student
Mechanical Engineering
Iowa State University, Ames, IA