Migrating spin_orbit.py to real unit system

Hello, 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

Dear 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[0]) 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 [1], 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 [1] https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.256601 On Sat, Jul 25, 2020 at 3:05 PM Nathaniel Gregory Seil < nsei7246@uni.sydney.edu.au> wrote:
Hello,
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
-- Abbout Adel

Dear Abbout, 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 then 2) 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 <abbout.adel@gmail.com> Sent: Monday, July 27, 2020 2:32 AM To: Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au> Cc: kwant-discuss@python.org <kwant-discuss@python.org> Subject: Re: [Kwant] Migrating spin_orbit.py to real unit system Dear 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[0]) 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 [1], 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 [1] https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.256601<https://protect-au.mimecast.com/s/QUZGC6XQ4LfDBoRwCpm24b?domain=journals.aps.org> On Sat, Jul 25, 2020 at 3:05 PM Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au<mailto:nsei7246@uni.sydney.edu.au>> wrote: Hello, 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 -- Abbout Adel

Dear Nathaniel, In all cases, whatever you use for the parameters of your system (a, t, e_z), the transmission will be a number and will not change. You are talking about a voltage. The voltage we talk about usually, is the difference between the left and right lead. The Transmission, which differs from the conductance, is obtained for the limit V--->0 and dividing by e^2/h. (the exact form involves an integral over energy) Transmission: no unit, doesn't depend on V Conductance: e^2/h, depends on V In the code you provided you are calculating the transmission. if you want to use a voltage, usually you will need to take a fraction of "t" regardless of the unit you are considering. I hope this helps, Adel On Mon, Jul 27, 2020 at 2:12 AM Nathaniel Gregory Seil < nsei7246@uni.sydney.edu.au> wrote:
Dear Abbout,
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 then 2) 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 <abbout.adel@gmail.com> *Sent:* Monday, July 27, 2020 2:32 AM *To:* Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au> *Cc:* kwant-discuss@python.org <kwant-discuss@python.org> *Subject:* Re: [Kwant] Migrating spin_orbit.py to real unit system
Dear 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[0]) 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 [1], 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
[1] https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.256601 <https://protect-au.mimecast.com/s/QUZGC6XQ4LfDBoRwCpm24b?domain=journals.aps...>
On Sat, Jul 25, 2020 at 3:05 PM Nathaniel Gregory Seil < nsei7246@uni.sydney.edu.au> wrote:
Hello,
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
-- Abbout Adel
-- Abbout Adel

Dear Adel, Thank you again for your insight. I have a few clarification questions: 1) Given the default spin_orbit.py code, are you saying it is possible to get the conductance from it if I apply energies at a fraction of t (which I have done for -0.3*t to 0.7 * t)? And there will be voltages corresponding to this. 2) Given the default spin_orbit.py code, are you alternatively suggesting that the same system corresponds for voltages whereupon, if I converted them to energies, they would be at fractions of the given range of -0.3t to 0.7t? What fraction would this be (e.g. 0.01,0.1,...)? 3) Given the above two questions, how would then I know which energy and voltage scale to use? Would I apply the suggested formulation in my last email? 4) I see your point about the voltage difference between the two leads. I am treating the voltage rather as just a potential for the electrons on the left lead. Therefore, the energies I apply to the system would correspond to these voltages * electron charge. I am in a way ignoring the ongoing effects of the voltage difference on electrons as they travel through the scattering area. Does this influence your argument about the voltage difference? 5) This is more if the above questions yield that I am incorrect. Do I need to modify the default spin_orbit.py code so that instead it calculates the Kubo conductivity, suggested in page 83 of the Kwant documentation? If so, I am confused because my understanding is that we should be getting stepped conductance due to the quantum hall effect. We get this stepped conductance with the existing code. Again, many thanks for your time and patience. Kind regards, Nathaniel ________________________________ From: Abbout Adel <abbout.adel@gmail.com> Sent: Monday, July 27, 2020 10:54 PM To: Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au> Cc: kwant-discuss@python.org <kwant-discuss@python.org> Subject: Re: [Kwant] Migrating spin_orbit.py to real unit system Dear Nathaniel, In all cases, whatever you use for the parameters of your system (a, t, e_z), the transmission will be a number and will not change. You are talking about a voltage. The voltage we talk about usually, is the difference between the left and right lead. The Transmission, which differs from the conductance, is obtained for the limit V--->0 and dividing by e^2/h. (the exact form involves an integral over energy) Transmission: no unit, doesn't depend on V Conductance: e^2/h, depends on V In the code you provided you are calculating the transmission. if you want to use a voltage, usually you will need to take a fraction of "t" regardless of the unit you are considering. I hope this helps, Adel On Mon, Jul 27, 2020 at 2:12 AM Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au<mailto:nsei7246@uni.sydney.edu.au>> wrote: Dear Abbout, 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 then 2) 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 <abbout.adel@gmail.com<mailto:abbout.adel@gmail.com>> Sent: Monday, July 27, 2020 2:32 AM To: Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au<mailto:nsei7246@uni.sydney.edu.au>> Cc: kwant-discuss@python.org<mailto:kwant-discuss@python.org> <kwant-discuss@python.org<mailto:kwant-discuss@python.org>> Subject: Re: [Kwant] Migrating spin_orbit.py to real unit system Dear 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[0]) 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 [1], 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 [1] https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.256601<https://protect-au.mimecast.com/s/Acd1CZY1NqiGk7GvSzdInV?domain=journals.aps.org> On Sat, Jul 25, 2020 at 3:05 PM Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au<mailto:nsei7246@uni.sydney.edu.au>> wrote: Hello, 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 -- Abbout Adel -- Abbout Adel

Dear Nathaniel, You are using the word voltage to what we commonly call onsite potential. In this case, and for your code, once you do the corrections I specified in the first email or just use t=1, a=1, your code will work fine. You can express the transmission for all the energies in the band spectrum. that is to say for all E in [0, 8(t+alpha)]. I hope this helps, Adel On Tue, Jul 28, 2020 at 12:51 AM Nathaniel Gregory Seil < nsei7246@uni.sydney.edu.au> wrote:
Dear Adel,
Thank you again for your insight. I have a few clarification questions:
1) Given the default spin_orbit.py code, are you saying it is possible to get the conductance from it if I apply energies at a fraction of t (which I have done for -0.3*t to 0.7 * t)? And there will be voltages corresponding to this.
2) Given the default spin_orbit.py code, are you alternatively suggesting that the same system corresponds for voltages whereupon, if I converted them to energies, they would be at fractions of the given range of -0.3t to 0.7t? What fraction would this be (e.g. 0.01,0.1,...)?
3) Given the above two questions, how would then I know which energy and voltage scale to use? Would I apply the suggested formulation in my last email?
4) I see your point about the voltage difference between the two leads. I am treating the voltage rather as just a potential for the electrons on the left lead. Therefore, the energies I apply to the system would correspond to these voltages * electron charge. I am in a way ignoring the ongoing effects of the voltage difference on electrons as they travel through the scattering area. Does this influence your argument about the voltage difference?
5) This is more if the above questions yield that I am incorrect. Do I need to modify the default spin_orbit.py code so that instead it calculates the Kubo conductivity, suggested in page 83 of the Kwant documentation? If so, I am confused because my understanding is that we should be getting stepped conductance due to the quantum hall effect. We get this stepped conductance with the existing code.
Again, many thanks for your time and patience.
Kind regards, Nathaniel ------------------------------ *From:* Abbout Adel <abbout.adel@gmail.com> *Sent:* Monday, July 27, 2020 10:54 PM *To:* Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au> *Cc:* kwant-discuss@python.org <kwant-discuss@python.org> *Subject:* Re: [Kwant] Migrating spin_orbit.py to real unit system
Dear Nathaniel,
In all cases, whatever you use for the parameters of your system (a, t, e_z), the transmission will be a number and will not change.
You are talking about a voltage. The voltage we talk about usually, is the difference between the left and right lead. The Transmission, which differs from the conductance, is obtained for the limit V--->0 and dividing by e^2/h. (the exact form involves an integral over energy) Transmission: no unit, doesn't depend on V Conductance: e^2/h, depends on V
In the code you provided you are calculating the transmission. if you want to use a voltage, usually you will need to take a fraction of "t" regardless of the unit you are considering.
I hope this helps, Adel
On Mon, Jul 27, 2020 at 2:12 AM Nathaniel Gregory Seil < nsei7246@uni.sydney.edu.au> wrote:
Dear Abbout,
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 then 2) 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 <abbout.adel@gmail.com> *Sent:* Monday, July 27, 2020 2:32 AM *To:* Nathaniel Gregory Seil <nsei7246@uni.sydney.edu.au> *Cc:* kwant-discuss@python.org <kwant-discuss@python.org> *Subject:* Re: [Kwant] Migrating spin_orbit.py to real unit system
Dear 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[0]) 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 [1], 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
[1] https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.256601 <https://protect-au.mimecast.com/s/Acd1CZY1NqiGk7GvSzdInV?domain=journals.aps...>
On Sat, Jul 25, 2020 at 3:05 PM Nathaniel Gregory Seil < nsei7246@uni.sydney.edu.au> wrote:
Hello,
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
-- Abbout Adel
-- Abbout Adel
-- Abbout Adel
participants (2)
-
Abbout Adel
-
Nathaniel Gregory Seil