Hi Anton, You wrote:
... the spin is still defined, and the two degrees of freedom correspond to local spin polarizations up or down...
Exactly, therefore I have prepared the following function which, I think, plots averages <S_x>, <S_y> and <S_z> at each site:
def plot_Si(sys, energy, n_lead): # Compute wave function psi = kwant.wave_function(sys, energy) psi_n = psi(n_lead).sum(axis=0) # Calculate <Si> per site Nsites = psi_n.shape[0] / 2 sx = zeros((Nsites,)) sy = zeros((Nsites,)) sz = zeros((Nsites,)) psi_i = array([[0.0], [0.0]])
for i in xrange(Nsites): psi_i = array([[psi_n[i * 2]], [psi_n[i * 2 + 1]]]) sx[i] = abs(dot(psi_i.conj().T, dot(sigma_x, psi_i)))[0, 0] sy[i] = abs(dot(psi_i.conj().T, dot(sigma_y, psi_i)))[0, 0] sz[i] = abs(dot(psi_i.conj().T, dot(sigma_z, psi_i)))[0, 0] # Plot kwant.plotter.map(sys, sx, num_lead_cells=5) kwant.plotter.map(sys, sy, num_lead_cells=5) kwant.plotter.map(sys, sz, num_lead_cells=5)
It seems that it works for a 2-terminal quantum wire (like the one defined in spin_orbit.py). For example with just one transmitted mode and \alpha=0.5, ez = 0.0, a nice "snapshot" of the spin precession is obtained (run the attached spin_orbit_jw1.py script).
However, there must be something wrong with this function, since for 3-terminal T-shaped device (like the one defined in spin_orbit_T_jw1.py) the <S_i> patterns, without spin-orbit interaction (\alpha=0.), are asymmetrical. This is strange, since the device is symmetric along lead axis, from which the wave function is emanated. There is no such a problem for 2-terminal wire, in that case each <S_i> looks much like ldos for \alpha=0.
Any hint what is wrong will be appreciated. I suspect the mysterious psi_n = psi(n_lead).sum(axis=0) command, since psi(n_lead) consist of two rows of length 2Nsites, even for just one (spin degenerate) mode. What is stored in each row?
Regards, Jerzy P.S. I use python27 under win8.
Dear Jerzy,
The that you have defined shows the spin density in the system, due to the modes coming from the top lead (lead 0). The density of states on the other hand is due to the level broadening from all of the leads. This is the origin of the asymmetry between the spin densities.
Best, Anton
On Thu, Oct 3, 2013 at 9:14 AM, Jerzy Wrobel wrobel@ifpan.edu.pl wrote:
Hi Anton, You wrote:
... the spin is still defined, and the two degrees of freedom correspond to local spin polarizations up or down...
Exactly, therefore I have prepared the following function which, I think, plots averages <S_x>, <S_y> and <S_z> at each site:
def plot_Si(sys, energy, n_lead): # Compute wave function psi = kwant.wave_function(sys, energy) psi_n = psi(n_lead).sum(axis=0) # Calculate <Si> per site Nsites = psi_n.shape[0] / 2 sx = zeros((Nsites,)) sy = zeros((Nsites,)) sz = zeros((Nsites,)) psi_i = array([[0.0], [0.0]]) for i in xrange(Nsites): psi_i = array([[psi_n[i * 2]], [psi_n[i * 2 + 1]]]) sx[i] = abs(dot(psi_i.conj().T, dot(sigma_x, psi_i)))[0, 0] sy[i] = abs(dot(psi_i.conj().T, dot(sigma_y, psi_i)))[0, 0] sz[i] = abs(dot(psi_i.conj().T, dot(sigma_z, psi_i)))[0, 0] # Plot kwant.plotter.map(sys, sx, num_lead_cells=5) kwant.plotter.map(sys, sy, num_lead_cells=5) kwant.plotter.map(sys, sz, num_lead_cells=5)
It seems that it works for a 2-terminal quantum wire (like the one defined in spin_orbit.py). For example with just one transmitted mode and \alpha=0.5, ez = 0.0, a nice "snapshot" of the spin precession is obtained (run the attached spin_orbit_jw1.py script).
However, there must be something wrong with this function, since for 3-terminal T-shaped device (like the one defined in spin_orbit_T_jw1.py) the <S_i> patterns, without spin-orbit interaction (\alpha=0.), are asymmetrical. This is strange, since the device is symmetric along lead axis, from which the wave function is emanated. There is no such a problem for 2-terminal wire, in that case each <S_i> looks much like ldos for \alpha=0.
Any hint what is wrong will be appreciated. I suspect the mysterious psi_n = psi(n_lead).sum(axis=0) command, since psi(n_lead) consist of two rows of length 2Nsites, even for just one (spin degenerate) mode. What is stored in each row?
Regards, Jerzy P.S. I use python27 under win8.
Dear Anton,
Must be some misunderstanding in definitions. I assumed that the first defined lead has index 0, then lead 0 is left lead (-a, 0) i.e. left part of letter T, which is turned clockwise by 90 deg. Bottom lead (0, -a) has index 1 and top lead, (bottom.reversed) has index 2. The above agrees with the transmission calculations which is _the same_ for (1 <--- 0 ) and (2 <--- 0) configurations and the shape of such transmission agrees with the literature data.
Regards, Jerzy
----- Original Message ----- From: "Anton Akhmerov" anton.akhmerov@gmail.com To: "Jerzy Wrobel" wrobel@ifpan.edu.pl Cc: kwant-discuss@kwant-project.org Sent: Thursday, October 03, 2013 5:56 PM Subject: Re: [Kwant] spin-orbit and ldos
Dear Jerzy,
The that you have defined shows the spin density in the system, due to the modes coming from the top lead (lead 0). The density of states on the other hand is due to the level broadening from all of the leads. This is the origin of the asymmetry between the spin densities.
Best, Anton
On Thu, Oct 3, 2013 at 9:14 AM, Jerzy Wrobel wrobel@ifpan.edu.pl wrote:
Hi Anton, You wrote:
... the spin is still defined, and the two degrees of freedom correspond to local spin polarizations up or down...
Exactly, therefore I have prepared the following function which, I think, plots averages <S_x>, <S_y> and <S_z> at each site:
def plot_Si(sys, energy, n_lead): # Compute wave function psi = kwant.wave_function(sys, energy) psi_n = psi(n_lead).sum(axis=0) # Calculate <Si> per site Nsites = psi_n.shape[0] / 2 sx = zeros((Nsites,)) sy = zeros((Nsites,)) sz = zeros((Nsites,)) psi_i = array([[0.0], [0.0]]) for i in xrange(Nsites): psi_i = array([[psi_n[i * 2]], [psi_n[i * 2 + 1]]]) sx[i] = abs(dot(psi_i.conj().T, dot(sigma_x, psi_i)))[0, 0] sy[i] = abs(dot(psi_i.conj().T, dot(sigma_y, psi_i)))[0, 0] sz[i] = abs(dot(psi_i.conj().T, dot(sigma_z, psi_i)))[0, 0] # Plot kwant.plotter.map(sys, sx, num_lead_cells=5) kwant.plotter.map(sys, sy, num_lead_cells=5) kwant.plotter.map(sys, sz, num_lead_cells=5)
It seems that it works for a 2-terminal quantum wire (like the one defined in spin_orbit.py). For example with just one transmitted mode and \alpha=0.5, ez = 0.0, a nice "snapshot" of the spin precession is obtained (run the attached spin_orbit_jw1.py script).
However, there must be something wrong with this function, since for 3-terminal T-shaped device (like the one defined in spin_orbit_T_jw1.py) the <S_i> patterns, without spin-orbit interaction (\alpha=0.), are asymmetrical. This is strange, since the device is symmetric along lead axis, from which the wave function is emanated. There is no such a problem for 2-terminal wire, in that case each <S_i> looks much like ldos for \alpha=0.
Any hint what is wrong will be appreciated. I suspect the mysterious psi_n = psi(n_lead).sum(axis=0) command, since psi(n_lead) consist of two rows of length 2Nsites, even for just one (spin degenerate) mode. What is stored in each row?
Regards, Jerzy P.S. I use python27 under win8.
__________ Informacja programu ESET Endpoint Antivirus, wersja bazy sygnatur wirusów 8873 (20131003) __________
Wiadomooæ zosta³a sprawdzona przez program ESET Endpoint Antivirus.
__________ Informacja programu ESET Endpoint Antivirus, wersja bazy sygnatur wirusów 8873 (20131003) __________
Wiadomoæ zosta³a sprawdzona przez program ESET Endpoint Antivirus.
Hi Jerzy,
Sorry, I was not attentive enough. Indeed, the line thasupert you suspected doesn't look good. If you want to get the injected spin densities, you need to sum the contributions from each scattering wave function, psi_n[i] to the density. Instead you first sum all the wave functions first (so you're calculating the spin density injected into the system by an arbitrary superposition of those).
Best, Anton
On Fri, Oct 4, 2013 at 9:19 AM, Jerzy Wróbel wrobel@ifpan.edu.pl wrote:
Dear Anton,
Must be some misunderstanding in definitions. I assumed that the first defined lead has index 0, then lead 0 is left lead (-a, 0) i.e. left part of letter T, which is turned clockwise by 90 deg. Bottom lead (0, -a) has index 1 and top lead, (bottom.reversed) has index 2. The above agrees with the transmission calculations which is _the same_ for (1 <--- 0 ) and (2 <--- 0) configurations and the shape of such transmission agrees with the literature data.
Regards, Jerzy
----- Original Message ----- From: "Anton Akhmerov" anton.akhmerov@gmail.com To: "Jerzy Wrobel" wrobel@ifpan.edu.pl Cc: kwant-discuss@kwant-project.org Sent: Thursday, October 03, 2013 5:56 PM Subject: Re: [Kwant] spin-orbit and ldos
Dear Jerzy,
The that you have defined shows the spin density in the system, due to the modes coming from the top lead (lead 0). The density of states on the other hand is due to the level broadening from all of the leads. This is the origin of the asymmetry between the spin densities.
Best, Anton
On Thu, Oct 3, 2013 at 9:14 AM, Jerzy Wrobel wrobel@ifpan.edu.pl wrote:
Hi Anton, You wrote:
... the spin is still defined, and the two degrees of freedom correspond to local spin polarizations up or down...
Exactly, therefore I have prepared the following function which, I think, plots averages <S_x>, <S_y> and <S_z> at each site:
def plot_Si(sys, energy, n_lead): # Compute wave function psi = kwant.wave_function(sys, energy) psi_n = psi(n_lead).sum(axis=0) # Calculate <Si> per site Nsites = psi_n.shape[0] / 2 sx = zeros((Nsites,)) sy = zeros((Nsites,)) sz = zeros((Nsites,)) psi_i = array([[0.0], [0.0]]) for i in xrange(Nsites): psi_i = array([[psi_n[i * 2]], [psi_n[i * 2 + 1]]]) sx[i] = abs(dot(psi_i.conj().T, dot(sigma_x, psi_i)))[0, 0] sy[i] = abs(dot(psi_i.conj().T, dot(sigma_y, psi_i)))[0, 0] sz[i] = abs(dot(psi_i.conj().T, dot(sigma_z, psi_i)))[0, 0] # Plot kwant.plotter.map(sys, sx, num_lead_cells=5) kwant.plotter.map(sys, sy, num_lead_cells=5) kwant.plotter.map(sys, sz, num_lead_cells=5)
It seems that it works for a 2-terminal quantum wire (like the one defined in spin_orbit.py). For example with just one transmitted mode and \alpha=0.5, ez = 0.0, a nice "snapshot" of the spin precession is obtained (run the attached spin_orbit_jw1.py script).
However, there must be something wrong with this function, since for 3-terminal T-shaped device (like the one defined in spin_orbit_T_jw1.py) the <S_i> patterns, without spin-orbit interaction (\alpha=0.), are asymmetrical. This is strange, since the device is symmetric along lead axis, from which the wave function is emanated. There is no such a problem for 2-terminal wire, in that case each <S_i> looks much like ldos for \alpha=0.
Any hint what is wrong will be appreciated. I suspect the mysterious psi_n = psi(n_lead).sum(axis=0) command, since psi(n_lead) consist of two rows of length 2Nsites, even for just one (spin degenerate) mode. What is stored in each row?
Regards, Jerzy P.S. I use python27 under win8.
__________ Informacja programu ESET Endpoint Antivirus, wersja bazy sygnatur wirusów 8873 (20131003) __________
Wiadomooć została sprawdzona przez program ESET Endpoint Antivirus.
__________ Informacja programu ESET Endpoint Antivirus, wersja bazy sygnatur wirusów 8873 (20131003) __________
Wiadomość została sprawdzona przez program ESET Endpoint Antivirus.