Current and hopping index relationship
Dear All, I'm trying to calculate the site-to-site current with kwant, for a specific system, the output of "kwant.plotter.sys_leads_hopping_pos" is like below: (array([[-1., -1.], [-1., -1.], [ 0., 0.], [ 0., 0.], [ 1., 0.], [ 1., 1.]]), array([[ 0., 0.], [-2., -2.], [ 1., 1.], [ 1., 0.], [ 1., 1.], [ 2., 2.]])) For the current calculation of the same system, I use the command below: ------------------------------------------------------------------ wf = kwant.wave_function(syst, energy=-1) psi = wf(0)[0] J_0 = kwant.operator.Current(syst) current = J_0(psi) ------------------------------------------------------------------ and the out put of "current" is like below: [ 0.33230769 -0.33230769 0.33230769 0.22153846 -0.33230769 0.11076923 -0.11076923 0.11076923 0.33230769 -0.22153846 -0.11076923 -0.33230769] I'm not clear about the exact correspondance between the element of current (12 element) and the element of hopping (2 array), could you plese give me some explanations about this? Also, I'm not sure that if I want to calculate the current at a certain energy (like "-1" above), do I have to calculate the current at all the wavefunction (like for all p of wf(0)[p]) or I have to calculate the current only at the wavefunction with "negivate velocity"? Thanks in advance for your help. Hang Zang
Dear Zang,
If you do not specify the region where you want to calculate the current,
kwant will do that for all the hoppings in your system. In your case, I
guess that your system has 6 links (and thus 12 hoppings if we count the
two directions).
Please check the documentation concerning the argument "where":
*where* : sequence of pairs of *int* or Site
https://kwant-project.org/doc/1/reference/generated/kwant.builder.Site.html#...,
or callable, optional
Where to evaluate the operator. If syst is not a finalized Builder, then
this should be a sequence of pairs of integers. If a function is provided,
it should take a pair of integers or a pair of Site
https://kwant-project.org/doc/1/reference/generated/kwant.builder.Site.html#...
(if syst is a finalized builder) and return True or False. If not
provided, the operator will be calculated over all hoppings in the system.
If you want to calculate the current just for a given hopping you can do
that as follows
site1=lat(0,1)
site1=lat(0,2)
J(syst, where=[(site1,site2)])
If you want the current at a given set of hoppings, you just use
where=[(site1,site2),(site3,site4),(site5,site6)....................]
2) The current that you get with kwant is actually the contribution of the
wave function psi (or the mode p) at a given energy to the total current.
Depending on what you want to get, you may need to sum over all the modes
if you want to get the total current at the *Fermi surface* and Integrate
over the whole band with Fermi Dirac distribution, if you want to get the
total current of the *Fermi sea.*
I hope this helps,
Adel
.
On Fri, Jun 21, 2019 at 7:32 AM Zang, Hang
Dear All,
I'm trying to calculate the site-to-site current with kwant, for a specific system, the output of "kwant.plotter.sys_leads_hopping_pos" is like below: (array([[-1., -1.], [-1., -1.], [ 0., 0.], [ 0., 0.], [ 1., 0.], [ 1., 1.]]), array([[ 0., 0.], [-2., -2.], [ 1., 1.], [ 1., 0.], [ 1., 1.], [ 2., 2.]]))
For the current calculation of the same system, I use the command below: ------------------------------------------------------------------ wf = kwant.wave_function(syst, energy=-1) psi = wf(0)[0] J_0 = kwant.operator.Current(syst) current = J_0(psi) ------------------------------------------------------------------ and the out put of "current" is like below: [ 0.33230769 -0.33230769 0.33230769 0.22153846 -0.33230769 0.11076923 -0.11076923 0.11076923 0.33230769 -0.22153846 -0.11076923 -0.33230769]
I'm not clear about the exact correspondance between the element of current (12 element) and the element of hopping (2 array), could you plese give me some explanations about this?
Also, I'm not sure that if I want to calculate the current at a certain energy (like "-1" above), do I have to calculate the current at all the wavefunction (like for all p of wf(0)[p]) or I have to calculate the current only at the wavefunction with "negivate velocity"?
Thanks in advance for your help. Hang Zang
-- Abbout Adel
participants (2)
-
Abbout Adel
-
Zang, Hang