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.a...@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 < > mertbozk...@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 >