Hi Adel, Running the code you provided also produces the following warning.
> UserWarning: Hamiltonian breaks Conservation law, ignoring the symmetry in > the computation. This should explain what is happening. Best, Anton On Sun, 15 Aug 2021 at 14:19, Adel Belayadi <adelp...@gmail.com> wrote: > > Dear Anton; > > Thank you for your reply > > I have used the conservation_law as you have suggested. In fact, a dictionary > or function definition of the conservation law is working fine now. I am not > getting an error while defining the conservation law. However, when calling > smatrix.transmission((1, 1), (0, 1)) which stands for spin up-up > transmittance it raises: index 2 is out of bounds for axis 0 with size 2. > > Please see for example the following script which have two site families, one > with 2 orbitals and the second with 6 orbitals > > Cheers, Adel > > > import kwant > from matplotlib import pyplot > import numpy as np > from math import sqrt > lat = kwant.lattice.honeycomb(a=1, norbs=[2, 6] , name=["a", "b"]) > a, b =lat.sublattices > def make_sys(l, w, cons_law): > def rect(pos): > x, y = pos > return abs(x) < l and abs(y) < w > sys=kwant.Builder() > sys[a.shape(rect, (0, 0))] = np.eye(2) > sys[b.shape(rect, (0, 0))] = np.eye(6) > ab_hopps= (((0, 0), a, b), ((0, 1), a, b), ((-1, 1), a, b)) > sys[[kwant.builder.HoppingKind(*hopping) for hopping in ab_hopps]] = > np.eye(2,6) > sys.eradicate_dangling() > sys[a.neighbors(1)] = np.eye(2) > sys[b.neighbors(1)] = np.eye(6) > ### creating leads > def lead_shape(pos): > x, y = pos > return abs(y)< w > sym = kwant.TranslationalSymmetry(lat.vec((-1, 0))) > sym.add_site_family(lat.sublattices[0], other_vectors=[(-1, 2)]) > sym.add_site_family(lat.sublattices[1], other_vectors=[(-1, 2)]) > lead = kwant.Builder(sym, conservation_law=cons_law) > lead[a.shape(rect, (0, 0))] = np.eye(2) > lead[b.shape(rect, (0, 0))] = np.eye(6) > lead[[kwant.builder.HoppingKind(*hopping) for hopping in ab_hopps]] = > np.eye(2,6) > lead.eradicate_dangling() > lead[a.neighbors(1)] = np.eye(2) > lead[b.neighbors(1)] = np.eye(6) > sys.attach_lead(lead) > sys.attach_lead(lead.reversed()) > return sys > > > syst = make_sys(l=3, w=2, cons_law= None) > kwant.plot(syst ,fig_size=(8, 8)) > pyplot.show() > > print('************ calling the conservation law **************') > sigma_z = np.array([[1, 0], [0, -1]]) > cons_law = {a: -sigma_z , b: -np.kron(sigma_z, np.eye(3))} > syst = make_sys(l=3, w=2, cons_law=cons_law) > smatrix = kwant.smatrix(syst.finalized(), 0.01) > total_trans = smatrix.transmission(1, 0) > up_up_trans = smatrix.transmission((1, 0), (0, 0)) > dn_dn_trans = smatrix.transmission((1, 1), (0, 1)) > up_dn_trans = smatrix.transmission((1, 1), (0, 0)) > dn_up_trans = smatrix.transmission((1, 0), (0, 1)) > print(total_trans) > print(up_up_trans) > print(dn_dn_trans) > print(up_dn_trans) > print(dn_up_trans) > print(round(total_trans, > 3)==round(up_up_trans+dn_dn_trans+up_dn_trans+dn_up_trans, 3)) > > > > Le sam. 14 août 2021 à 17:06, Anton Akhmerov <anton.akhmerov...@gmail.com> a > écrit : >> >> Hi Adel, >> >> Please check the documentation [1]. Since you have multiple site >> families, you need to specify the conservation law as a dictionary, so >> {metal_like_sub: -np.kron(sigma_z, np.eye(3)), C_like_sub1: -sigma_z, >> C_like_sub2: -sigma_z}. >> >> Best, >> Anton >> >> https://kwant-project.org/doc/1/reference/generated/kwant.builder.Builder#kwant.builder.Builder >> >> On Sat, 14 Aug 2021 at 16:08, Adel Belayadi <adelp...@gmail.com> wrote: >> > >> > Dear Kwant user, >> > Good day and I hope this email finds you well. >> > Using conservation law was fully explained, in the Kwant mailing list, >> > while we are having sublattices with the same degree of freedom (same >> > number of orbitals). For instance, if we have two sites with 3 orbitals in >> > the case of a spin full Hamiltonian, the onsite matrix is >> > (onsite_matrix(6*6) for each site ). So in this case, the conservation >> > law will be straightforward: conservation_law=-np.kron(sigma_z, >> > np.eye(3)).But what would be the case if we are dealing with sublattices >> > which have different numbers of orbitals? >> > >> > In my case, I am interested in spin conductance. I am using 3 sublattices >> > with different orbitals. Let us say for instance >> > sublattice0 has (6-orbitals), sublattice1 with (2-orbitals) and >> > sublattice2 with (2-orbitals). In fact I am working on hetero-structure >> > with two sites of C-like(pz with spin up and down) and one site of >> > metal-like(3d-orbitals with spin up and down). I can resume my lattice as >> > follow >> > >> > lat = kwant.lattice.general(prim_vecs, basis=[ [...], [...], [...]] , >> > norbs=[6, 2, 2]) >> > metal-like_sub, C-like_sub1, C-like_sub2 = lat.sublattices >> > >> > According to my understanding the conservation law would be something like >> > conservation_law=-np.kron(sigma_z, np.eye(5)). However Kwant raises an >> > error with my choice of the conservation law. >> > >> > Is there something missing with my understanding of the conservation law!. >> > Or in the case of different orbitals per site, we need to define two >> > lattices (lattice1 for spin up and lattice2 for spindown). >> > Thanks in advance, >> > Best >> > >> > >> >