Dear all,
I'm looking for a workaround for a problem I currently face: when computing the two-terminal conductance for a system of length L, is there a way to get the conductance for the same system of length 1,2,..L-1 on the fly (while keeping everything else the same, i.e., same width, same disorder configuration etc.)?
As far as I understand how the scattering matrix calculation works internally, it shouldn't take much longer to compute these intermediate values than just getting the final conductance.
Best,
Jan
Hi Jan,
I'm looking for a workaround for a problem I currently face: when computing the two-terminal conductance for a system of length L, is there a way to get the conductance for the same system of length 1,2,..L-1 on the fly (while keeping everything else the same, i.e., same width, same disorder configuration etc.)?
Kwant does not support this. You would need to construct a new system for each of these cases, which would incur the relatively high cost of system construction and finalization for every value of L. A possible workaround would be to construct the scattering system of length L, and then to add a parameter to your onsite/hopping functions that you can tune, such that your "effective" scattering region is whatever length you like. This would be faster, as you would only have to construct and finalize your system once.
As far as I understand how the scattering matrix calculation works internally, it shouldn't take much longer to compute these intermediate values than just getting the final conductance.
I'm not sure what you mean. The default scattering solver does not use the recursive Green's function method or anything. We (more or less) solve a linear system in the basis of modes in the lead, and local degrees of freedom in the scattering region, so that the total solution vector contains scattering matrix components in the "lead" part, and the scattering wavefunction in the "scattering region" part. We set up this linear system and then pass it off to a sparse linear solver (MUMPS by default). Given this, it is not immediately obvious to me how we would compute these "intermediate" values.
Happy Kwanting,
Joe
Dear Jan,
Just to complement Joseph's answer: For the conductance calculation, this would be very easy to do with a recursive Green's function algorithm: You need to use the concept of non-uniform leads and apply the *generalized *Fisher-Lee formula [1] and then you just will need to update one self energy for each new length. I have done this for scanning gate microscopy simulations where we need to change the position of a scatterer at each step (So larger system at each step).
Kwant uses a different approach to get the conductance and the scattering matrix, so if it is just a matter of time, it is better to keep using kwant than writing a new recursive code.
If you need help with the second approach let me know.
I hope this helps. Adel
[1] https://journals.aps.org/prb/abstract/10.1103/PhysRevB.81.155422
On Mon, Oct 30, 2017 at 3:43 PM, Jan Behrends jb@pks.mpg.de wrote:
Dear all,
I'm looking for a workaround for a problem I currently face: when computing the two-terminal conductance for a system of length L, is there a way to get the conductance for the same system of length 1,2,..L-1 on the fly (while keeping everything else the same, i.e., same width, same disorder configuration etc.)?
As far as I understand how the scattering matrix calculation works internally, it shouldn't take much longer to compute these intermediate values than just getting the final conductance.
Best,
Jan
-- Jan Behrends Max-Planck-Institut für Physik komplexer Systeme Nöthnitzer Straße 38, 01187 Dresden, Germany https://maps.google.com/?q=N%C3%B6thnitzer+Stra%C3%9Fe+38,+01187+Dresden,+Germany&entry=gmail&source=g E-Mail: jb@pks.mpg.de
Jan Behrends schrieb:
As far as I understand how the scattering matrix calculation works internally, it shouldn't take much longer to compute these intermediate values than just getting the final conductance.
No, this is not how Kwant's standard solvers work (see Joe's reply for details). A RGF-like (Recursive Green's Function) solver could produce the results that you have in mind in one go, and would be also more efficient for long systems.
There are no public RGF solvers for Kwant because the default solver is much faster for common systems. However, there's also a conceptual problem. Kwant doesn't really allow to express the concept of a quasi-1d system with two leads that is growing as a function of a parameter. The closest thing that one can do naturally in Kwant is Joe's suggestion of making the size of the disordered region depend on a paramter, but that's inefficient. I don't quite see how a general RGF solver for Kwant could help you even if it existed.
However, I think that I can propose you a simple solution to your particular problem. I assume that your geometry is quasi-1d, i.e. the leads and the system has the same width. Doing RGF in that case is a matter of a single loop of a couple of lines, the only difficulty is setting up the Hamiltonian and especially calculating the self-energy. But Kwant will happily provide you all this: you only have to build a lead that corresponds to your system without disorder. The finalized lead will give you all that you need (the on-site Hamiltonian, the hopping matrix, the self energy), there are even ready-to-use methods for that.
The RGF code that you need to write would start with the self-energy of the left lead, then progressively add slices of the scattering region (Kwant gives you the Hamiltonian of a clean slice of the system to which you add your disorder), and compute the conductance/noise at any stage.
I should even have an old RGF prototype for Kwant somewhere in the attic that you could use to get started... Actually, such 1d-RGF would be interesting for inclusion to Kwant. Please keep us updated if you decide to go this way.
Christoph
Dear all,
thanks a lot for your very extensive replies! I tried to implement the RGF calculation myself some time ago, but didn't finish it. I'll keep you updated if I manage to implement it using Kwant's framework - it appears to be pretty straightforward.
Best,
Jan
On 10/30/2017 03:58 PM, Christoph Groth wrote:
Jan Behrends schrieb:
As far as I understand how the scattering matrix calculation works internally, it shouldn't take much longer to compute these intermediate values than just getting the final conductance.
No, this is not how Kwant's standard solvers work (see Joe's reply for details). A RGF-like (Recursive Green's Function) solver could produce the results that you have in mind in one go, and would be also more efficient for long systems.
There are no public RGF solvers for Kwant because the default solver is much faster for common systems. However, there's also a conceptual problem. Kwant doesn't really allow to express the concept of a quasi-1d system with two leads that is growing as a function of a parameter. The closest thing that one can do naturally in Kwant is Joe's suggestion of making the size of the disordered region depend on a paramter, but that's inefficient. I don't quite see how a general RGF solver for Kwant could help you even if it existed.
However, I think that I can propose you a simple solution to your particular problem. I assume that your geometry is quasi-1d, i.e. the leads and the system has the same width. Doing RGF in that case is a matter of a single loop of a couple of lines, the only difficulty is setting up the Hamiltonian and especially calculating the self-energy. But Kwant will happily provide you all this: you only have to build a lead that corresponds to your system without disorder. The finalized lead will give you all that you need (the on-site Hamiltonian, the hopping matrix, the self energy), there are even ready-to-use methods for that.
The RGF code that you need to write would start with the self-energy of the left lead, then progressively add slices of the scattering region (Kwant gives you the Hamiltonian of a clean slice of the system to which you add your disorder), and compute the conductance/noise at any stage.
I should even have an old RGF prototype for Kwant somewhere in the attic that you could use to get started... Actually, such 1d-RGF would be interesting for inclusion to Kwant. Please keep us updated if you decide to go this way.
Christoph