
Dear Adel, The electronic part of the Hamiltonian is 4x4. For a single magnetic impurity, I tried to include the magnetic impurity spin degree of freedom not by making the total Hamiltonian 8x8 at each site, but making two types of lattices, lat_up and lat_down, that describes two spin states of the magnetic impurity. The problem with making the Hamiltonian 8x8 and adding the magnetic impurity as onsite potential is that, I could not find a way to specify the state of the magnetic impurity. The state of the magnetic impurity determines whether it interacts with spin-up electrons or spin down electrons. If I were to include the spin-flip interaction as onsite Hamiltonian, I would have written: syst[lat(20,2)] = 0.1*0.5* (np.kron(np.kron(pauli.sp,pauli.s0), pauli.sm) + np.kron(np.kron(pauli.sm, pauli.s0), pauli.sp)) But in this case, this magnetic impurity interacts with both spin-up and spin-down electrons, just because I could not incorporate the spin of the magnetic impurity. Adding only one term, say s_+ I_- is non-Hermitian so I cannot do that either. I hope I made myself clear. Thank you so much, Mert On Sat, May 30, 2020 at 4:50 PM Abbout Adel <abbout.adel@gmail.com> wrote:
Dear Ahmet,
I do not understand why you want to put 2N lattices. Electrons interacting with multiple magnetic impurities can be obtained just by adding impurities, the way you did it in your example for one impurity.
It would have been more practical if you used one lattice with 4x4 matrices as an onsite potential.
Adel
On Fri, May 29, 2020 at 3:42 PM Ahmet Mert Bozkurt < mertbozkurt@sabanciuniv.edu> wrote:
Dear KWANT developers,
I would like to add a localized magnetic impurity into a quantum spin hall system with spin-flip interaction (sigma_plus I_- + sigma_- I_+ where I is the magnetic impurity spin operator. The spin-flip interaction depends on the state of the magnetic impurity (whether it is spin-up or spin-down). If it's spin-up, it needs to interact only with the spin down electrons (term sigma_+) flip them upwards, while the magnetic impurity state needs to be updated to spin-down. I've written a code using two different lattices (lat_up and lat_down) and simply check transmission from one lattice lead to the other lattice lead. But this method becomes impractical if i want to add more magnetic impurities because i need to add more and more lattice (2^N). Is there any easier way to include a scatterer with internal degree of freedom (which can be updated perhaps using tkwant or any other way)?
BTW this is the model I'm working on:https://arxiv.org/abs/1705.04985
Below is the relevant part of my code and thank you so much in advance!
Mert
# Scattering region syst[lat_up.shape(shape, (0, 0))] = onsite syst[lat_down.shape(shape, (0, 0))] = onsite syst[kwant.HoppingKind((1, 0), lat_up)] = hopx syst[kwant.HoppingKind((1, 0), lat_down)] = hopx syst[kwant.HoppingKind((0, 1), lat_up)] = hopy syst[kwant.HoppingKind((0, 1), lat_down)] = hopy syst[(lat_up(10, 2), lat_down(10, 2))] = 0.1*0.5*np.kron(pauli.sp, pauli.s0) syst[(lat_down(10, 2), lat_up(10, 2))] = 0.1*0.5*np.kron(pauli.sm, pauli.s0) # two lines above correspond to spin-flip of the magnetic impurity, jumping from one #lattice to the other.
#### Define the leads. ####
sym_left = kwant.TranslationalSymmetry((-1, 0))
lead_up = kwant.Builder(sym_left) lead_down = kwant.Builder(sym_left) lead_up[lat_up.shape(lead_shape, (0, 0))] = onsite_lead lead_down[lat_down.shape(lead_shape, (0, 0))] = onsite_lead lead_up[kwant.HoppingKind((1, 0), lat_up)] = hopx_lead lead_up[kwant.HoppingKind((0, 1), lat_up)] = hopy_lead lead_down[kwant.HoppingKind((1, 0), lat_down)] = hopx_lead lead_down[kwant.HoppingKind((0, 1), lat_down)] = hopy_lead
# Attach leads syst.attach_lead(lead_up) syst.attach_lead(lead_down) syst.attach_lead(lead_up.reversed()) syst.attach_lead(lead_down.reversed())
def plot_conductance(sys, p, mu): # Compute conductance p.mu = mu data = [] smatrix = kwant.smatrix(sys, energy = 0.0, params = dict(p=p)) no_flip = smatrix.transmission(2, 0) flip = smatrix.transmission(1,0) return no_flip, flip
-- Abbout Adel