Spin polarized transport calculation
Dear Kwant users and developers I have two questions related to the spin calculation using kwant. 1. I'm wondering if we can do spin-polarized transport in kwant? For example, can we can get the separate Conductance Vs Energy diagram for spin up and spin down terms. I'm thinking one way of doing this is to set up the Rashba Hamiltonian as a whole. And then manually extract the spin up and spin down hamiltonian and do the transport calculation separately. But this will eliminate some extra terms that I don't know whether this is correct anymore. Any suggestions? 2. How can we set up the spin polarization for a particular site? For example, in some of the topological insulator, can we set up spin polarization on the edge as up and the other side of the edge as down, and then do the transport? Or this question is completely wrong? Thanks for advance. Sincerely, Liming
Hi, this has been asked several times on the mailing list, see these threads: http://thread.gmane.org/gmane.comp.science.kwant.user/77 http://thread.gmane.org/gmane.comp.science.kwant.user/6 http://kwant-discuss.kwant-project.narkive.com/96MScaQw/spin-currents-using-... Please make an effort to search the mailing list *before* you post to see if the question has been answered before. In addition to the above threads there is currently an enhancement proposal (that is not yet merged into the kwant mainline yet) to allow one to specify conservation laws in the leads. For your case of spin this will mean that the modes of the system will have well-defined spin projections and you will be able to calculate transmissions between spin up/down subblocks of the scattering matrix directly. See https://gitlab.kwant-project.org/kwant/kwant/merge_requests/15 for details. Happy Kwanting, Joe On 13 April 2016 at 09:35, L.M J <heysuperming@gmail.com> wrote:
Dear Kwant users and developers
I have two questions related to the spin calculation using kwant.
1. I'm wondering if we can do spin-polarized transport in kwant? For example, can we can get the separate Conductance Vs Energy diagram for spin up and spin down terms.
I'm thinking one way of doing this is to set up the Rashba Hamiltonian as a whole. And then manually extract the spin up and spin down hamiltonian and do the transport calculation separately. But this will eliminate some extra terms that I don't know whether this is correct anymore. Any suggestions?
2. How can we set up the spin polarization for a particular site? For example, in some of the topological insulator, can we set up spin polarization on the edge as up and the other side of the edge as down, and then do the transport? Or this question is completely wrong?
Thanks for advance.
Sincerely, Liming
Hi, part of links are broken. I also want to compute separately conductance up-up, down-down, up-down and down-up. I read the threads where up, but I still not sure if i implemented in code correctly with these informations. In my code i use rashba interaction (in code): ---------------------------------------------------------------------------------- def rashba(xi, yi, xj, yj, alpha, t): #d_ij = sitej.pos - sitei.pos x_ij = xj - xi y_ij = yj - yi rashb = 1j * alpha * (sigma_x * y_ij - sigma_y * x_ij) return (rashb - t * sigma_0) ----------------------------------------------------------------------------------- i use norbs=1, because is only electrons And in conductances computations i've implemented (in code): ----------------------------------------------------------------------------------- smat = kwant.smatrix(syst, energy) t = np.matrix(smat.submatrix(1, 0)) #trasmission block from S-matrix tt_mat = np.matmul(t, t.getH()) # t*t_dagger matrix tt = np.trace(np.matmul(t, t.getH())) #trace of t*t_dagger = total transmission counts (up/down) #getting upup Transmission, downdown and downup #up-up t*t_dagger block t11 = np.trace(np.matrix([[tt_mat[i,j] for j in range(int(len(tt_mat)/2))] for i in range(int(len(tt_mat)/2))])) #down-down t*t_dagger block t22 = np.trace(np.matrix([[tt_mat[i + int(len(tt_mat)/2), j + int(len(tt_mat)/2)] for j in range(int(len(tt_mat)/2))] for i in range(int(len(tt_mat)/2))])) #down-up t*t_dagger block t21 = np.trace(np.matrix([[tt_mat[i + int(len(tt_mat)/2), j] for j in range(int(len(tt_mat)/2))] for i in range(int(len(tt_mat)/2))])) ----------------------------------------------------------------------------------- It is completely incorrect compute using these form? I've tryed by smat.transmission((1,0), (0,0)) structure but i got error, and decide to try these aproach above. by information the i got using smat.transmission((1,0), (0,0)) structure: ----------------------------------------------------------------------------------- return self.out_block_coords(lead_out), self.in_block_coords(lead_in) File "C:\Users\Diego\AppData\Roaming\Python\Python39\site-packages\kwant\solvers\common.py", line 854, in in_block_coords self.in_block_offsets[lead_ind][block_ind + 1]) IndexError: index 2 is out of bounds for axis 0 with size 2 ----------------------------------------------------------------------------------- Thanks in advance!
I figure out what is cause my error! In fact, is in using norbs = 1, the correct form is norbs = 2: one orbital to spin up and other to spin down and also in lead construction where is to use conservation_law=-sigma_z with these fixs my code is working now! In this thread i explain better (and with code exemples) how these fixs works: https://mail.python.org/archives/list/kwant-discuss@python.org/thread/YYOG27...
participants (3)
-
diegobruno244@gmail.com
-
Joseph Weston
-
L.M J