Many thanks for your response and advice.
I have made the changes you've suggested. However, I am unsure of your last point. I get that the output is a transmission and that change in units would not affect the units on that quantity.
However, how would I know that I am applying the correct voltage/energy to the leads?
I understand that there is a scaling of the energies applied to the system that can be calculated like:
- t_actual = hbar^2 / (2*m_electron_real * a_real^2)
- (hbar, m_electron_real and a_real take on their SI units)
- t is set to 1 in the code
- Therefore the range of energies from [0 , 1] (energies=[0.01 * i*t for i in range(100)]) actually corresponds to energies [(0 * t_actual,1*t_actual)]Would it therefore be correct to take this approach? i.e.:1) to use a = 1, t = 1 (as the default example code does) and then2) acknowledge this solution, if applied to a system with a_real, m_electron_real and hbar in SI units, corresponds to applying lead energies in the range [(0 * t_actual,1*t_actual)]?
Also if other people wish to please feel welcome to add to this discussion.
Many thanks again for your help.
From: Abbout Adel <email@example.com>
Sent: Monday, July 27, 2020 2:32 AM
To: Nathaniel Gregory Seil <firstname.lastname@example.org>
Cc: email@example.com <firstname.lastname@example.org>
Subject: Re: [Kwant] Migrating spin_orbit.py to real unit systemDear Nathaniel,
If you check your band, you will see that the maximum of your energy is of the order 1E-34 !kwant.plotter.bands(syst.leads)
This means that you have a problem in your definitions.First of all, do not define the Pauli matrices with hbar: You can see that your onsite potential is (as you defined it) t*hbar*sigma0. It should be t*sigma0.For the spin orbit term, it depends how you define the constant alpha. if you check the reference , you will see that there is no hbar.In your code, (after you eliminate hbar from the definition of the Pauli matrices), alpha becomes an energy, so you need to put a fraction of "t"alpha=0.1*t.
Check also the value of e_z and verify that it is consistent with the values of "t" and alpha.
I want just to stress that the transmission you are calculating is a number, so it will not depend on the change of units you did.I hope this helps
On Sat, Jul 25, 2020 at 3:05 PM Nathaniel Gregory Seil <email@example.com> wrote:
I would like to model a 2DEG under a magnetic field and have been investigating the spin_orbit.py code.
I would like to modify this code so that it utilises real units and models upon a to-scale lattice. However, I am a little bit unclear as to how to progress.
I noticed in the base code we have a = 1, t = 1 and hbar = 2 (seen from the Pauli spin matrices which normally have hbar/2 as a coefficient in front). To represent the real life scenario of a lattice with constant a = 5E-10 m, would we do the following:
- a = 5E-10 m
- hbar = 1.05457E-34 J s (standard SI units)
- m_electron = 9.109E-31 kg (standard SI units)
- t = hbar ^ 2 / (2 * m_electron * a^2)
and then just substitute these values into the rest of the code?
I get the result of 0 conductivity for the lead voltages -0.046 to 0.105V (code shows "energies=[0.01 * i*t - 0.3*t for i in range(100)]"). I also get this for -0.0046 to 0.0105V and for -0.46 - 1.05V. Do these results seem right?
I have attached my code with these substitutions and the results.
Many thanks,Nathaniel Seil