Hi Camilla, Sure. You need to install a development version of tinyarray. If you got everything via conda, then you can do " conda install -c kwant 'tinyarray==dev' ". If you installed kwant via pip, do " pip install git+https://gitlab.kwant-project.org/kwant/tinyarray.git@master "
Let me know if it works (both the installation and using the conservation laws). Best, Anton On Tue, Feb 14, 2017 at 9:40 AM, Camilla Espedal <camilla.espe...@ntnu.no> wrote: > Dear Anton, > > sorry for troubling you again. > > so I finally got hold of a linux-computer, and managed to run the commands > and install all the things in the notebook. When I try to run the code you > have in your notebook however, I get the following error message: > > File "/home/camilla/.local/lib/python3.5/site-packages/kwant/builder.py", > line 1371, in attach_lead > self.leads.append(BuilderLead(lead_builder, tuple(interface))) > File "/home/camilla/.local/lib/python3.5/site-packages/kwant/builder.py", > line 565, in __init__ > self.interface = tuple(sorted(interface)) > TypeError: unorderable types: tinyarray.ndarray_int() < > tinyarray.ndarray_int() > > Do you know what the problem could be? > > Best, > > Camilla > > The code if needed: > > import kwant > import tinyarray as ta > import numpy as np > from scipy import sparse > from matplotlib import pyplot > import matplotlib > > s0 = ta.array([[1, 0], [0, 1]]) > sx = ta.array([[0, 1], [1, 0]]) > sy = ta.array([[0, 1j], [-1j, 0]]) > sz = ta.array([[1, 0], [0, -1]]) > > > > # Adapted from https://kwant-project.org/doc/1/tutorial/tutorial2 > > def make_system(t=1.0, W=10, L=10): > # Now we must specify the number of orbitals per site. > lat = kwant.lattice.square(norbs=2) > syst = kwant.Builder() > > syst[(lat(x, y) for x in range(L) for y in range(W))] = \ > lambda s, alpha, E_z: 4 * t * s0 + E_z * sz > syst[kwant.builder.HoppingKind((1, 0), lat, lat)] = \ > lambda s1, s2, alpha, E_z: -t * s0 - 1j * alpha * sy > syst[kwant.builder.HoppingKind((0, 1), lat, lat)] = \ > lambda s1, s2, alpha, E_z: -t * s0 + 1j * alpha * sx > > # The new bit: specifying the conservation law. > lead = kwant.Builder(kwant.TranslationalSymmetry((-1, 0)), > conservation_law=-sz, time_reversal=s0) > lead[(lat(0, j) for j in range(W))] = 4 * t * s0 > lead[lat.neighbors()] = -t * s0 # Note: no spin-orbit in the lead. > > syst.attach_lead(lead) > syst.attach_lead(lead.reversed()) > > syst = syst.finalized() > > > return syst > > syst = make_system(t=1.0, W=10, L=10) > energies = np.linspace(0, 1, 200) > smatrices = [kwant.smatrix(syst, energy, args=(0.2, 0.05)) for energy in > energies] > > fig = pyplot.figure(figsize=(13, 8)) > ax = fig.add_subplot(1, 1, 1) > > # Like previously smatrix.transmission(lead1, lead0) is transmission from > lead0 to lead1 > ax.plot(energies, [smatrix.transmission(1, 0) for smatrix in smatrices], > label='total') > > # The new bit: smatrix.transmission((lead1, q1), (lead0, q0)) is the > transmission from the > # q0 block of the lead0 into the q1 block of lead1. The subblock ordering is > same as we used > # in set_symmetry. > ax.plot(energies, [smatrix.transmission((1, 0), (0, 0)) for smatrix in > smatrices], label='$G_{↑↑}$') > ax.plot(energies, [smatrix.transmission((1, 1), (0, 0)) for smatrix in > smatrices], label='$G_{↑↓}$') > ax.plot(energies, [smatrix.transmission((1, 0), (0, 1)) for smatrix in > smatrices], label='$G_{↓↑}$') > ax.plot(energies, [smatrix.transmission((1, 1), (0, 1)) for smatrix in > smatrices], label='$G_{↓↓}$') > ax.set_ylabel('$G [e^2/h]$', fontsize='xx-large') > ax.set_xlabel('$E/t$', fontsize='xx-large') > ax.legend(fontsize='x-large'); > > > On 24. jan. 2017 13:18, Anton Akhmerov wrote: > > OK, please double-check the remaining simulation parameters. > > Anton > > On Tue, Jan 24, 2017 at 1:00 PM, Camilla Espedal > <camilla.espe...@ntnu.no> wrote: > > Dear Anton, > > > > I triend changing it, but that does not solve the problem. > > > > Best, > > Camilla > > From: Anton Akhmerov [mailto:anton.akhmerov...@gmail.com] > Sent: 24. januar 2017 12:36 > > > To: Camilla Espedal <camilla.espe...@ntnu.no> > Cc: kwant-discuss@kwant-project.org > Subject: Re: [Kwant] Regarding smatrix and spin > > > > Dear Camilla, > > > > Could the difference originate from you using a lattice constant of 2 > instead of 1? > > > > Anton > > > > On Tue, Jan 24, 2017, 10:41 Camilla Espedal <camilla.espe...@ntnu.no> wrote: > > Dear Anton, > > Thanks again for all your help. I will try to do it the linux way. Just one > more thing regarding this. I wrote a script in the old Kwant to find the > total conductance and compare it to the one in your notebook. While the two > plots are qualitatively similar, they are not the same. Am I missing > something, or am I calculating different things? > > Best, Camilla > > (my code): > > # Tutorial 2.3.1. Matrix structure of on-site and hopping elements > # ================================================================ > # > # Physics background > # ------------------ > # Gaps in quantum wires with spin-orbit coupling and Zeeman splititng, > # as theoretically predicted in > # http://prl.aps.org/abstract/PRL/v90/i25/e256601 > # and (supposedly) experimentally oberved in > # http://www.nature.com/nphys/journal/v6/n5/abs/nphys1626.html > # > # Kwant features highlighted > # -------------------------- > # - Numpy matrices as values in Builder > > import kwant > > # For plotting > import matplotlib.pyplot as plt > > # For matrix support > import tinyarray > import numpy as np > > # define Pauli-matrices for convenience > sigma_0 = tinyarray.array([[1, 0], [0, 1]]) > sigma_x = tinyarray.array([[0, 1], [1, 0]]) > sigma_y = tinyarray.array([[0, 1j], [-1j, 0]]) > sigma_z = tinyarray.array([[1, 0], [0, -1]]) > > > def make_system(a=2, t=1.0, alpha=0.1, e_z=0.05, W=10, L=10): > # Start with an empty tight-binding system and a single square lattice. > # `a` is the lattice constant (by default set to 1 for simplicity). > lat = kwant.lattice.square(a) > > sys = kwant.Builder() > > #### Define the scattering region. #### > sys[(lat(x, y) for x in range(L) for y in range(W))] = \ > 4 * t * sigma_0 + e_z * sigma_z > # hoppings in x-direction > sys[kwant.builder.HoppingKind((1, 0), lat, lat)] = \ > -t * sigma_0 - 1j * alpha * sigma_y > # hoppings in y-directions > sys[kwant.builder.HoppingKind((0, 1), lat, lat)] = \ > -t * sigma_0 + 1j * alpha * sigma_x > > #### Define the left lead. #### > lead = kwant.Builder(kwant.TranslationalSymmetry((-a, 0))) > > lead[(lat(0, j) for j in range(W))] = 4 * t * sigma_0 > # hoppings in x-direction > lead[lat.neighbors()] = \ > -t * sigma_0 > > #### Attach the leads and return the finalized system. #### > sys.attach_lead(lead) > sys.attach_lead(lead.reversed()) > > return sys > > > def plot_conductance(sys, energies): > # Compute conductance > data = [] > for energy in energies: > smatrix = kwant.smatrix(sys, energy) > data.append(smatrix.transmission(1, 0)) > > pyplot.figure() > pyplot.plot(energies, data) > pyplot.xlabel("energy [t]") > pyplot.ylabel("conductance [e^2/h]") > pyplot.show() > > > def main(): > sys = make_system() > > # Check that the system looks as intended. > kwant.plot(sys) > > # Finalize the system. > sys = sys.finalized() > energies = np.linspace(0, 1, 200) > smatrices = [kwant.smatrix(sys, energy) for energy in energies] > > fig = plt.figure(figsize=(13, 8)) > ax = fig.add_subplot(1, 1, 1) > > ax.plot(energies, [smatrix.transmission(1,0) for smatrix in smatrices], > label='total') > > ax.set_ylabel('$G [e^2/h]$', fontsize='xx-large') > ax.set_xlabel('$E/t$', fontsize='xx-large') > ax.legend(fontsize='x-large') > > plt.show() > > > > # Call the main function if the script gets executed (as opposed to > imported). > # See <http://docs.python.org/library/__main__.html>. > if __name__ == '__main__': > main() > > -----Original Message----- > From: anton.akhme...@gmail.com [mailto:anton.akhme...@gmail.com] On Behalf > Of Anton Akhmerov > Sent: 17. januar 2017 10:48 > To: Camilla Espedal <camilla.espe...@ntnu.no> > Cc: kwant-discuss@kwant-project.org > Subject: Re: [Kwant] Regarding smatrix and spin > > Dear Camilla, > > It seems that you are trying to install Kwant on windows. This is a very > hard task, and I fear none of the Kwant developers has enough knowledge of > it right now (our Windows packages are built by Christoph Gohlke, see [1] > for the build environment description). However if you are using windows 10, > I suggest to try to install Kwant using the windows subsystem for linux. > That way the standard Ubuntu build procedure should work for you. > > Best, > Anton > > [1]: http://www.lfd.uci.edu/~gohlke/pythonlibs/ > > On Mon, Jan 16, 2017 at 9:45 AM, Camilla Espedal <camilla.espe...@ntnu.no> > wrote: > > Thanks a lot. I tried to install the cons_laws_combined, but I get the > following error message: > > "LINK: fatal error LNK1181: cannot open input file 'lapack.lib'" > > Is there some package or installation I am missing? > > Best regards, > Camilla > > -----Original Message----- > From: anton.akhme...@gmail.com [mailto:anton.akhme...@gmail.com] On > Behalf Of Anton Akhmerov > Sent: 8. januar 2017 16:35 > To: Tómas Örn Rosdahl <torosd...@gmail.com> > Cc: Camilla Espedal <camilla.espe...@ntnu.no>; > kwant-discuss@kwant-project.org > Subject: Re: [Kwant] Regarding smatrix and spin > > Hi Camilla, everyone, > > I've slightly modified Tómas's example to a case where the spins do get > coupled, check it out: > http://nbviewer.jupyter.org/url/antonakhmerov.org/misc/spin_conductanc > e.ipynb > > I've also provided more detailed installation instructions in the > notebook. > > Cheers, > Anton > > On Sun, Jan 8, 2017 at 2:45 PM, Tómas Örn Rosdahl <torosd...@gmail.com> > wrote: > > Dear Camilla, > > For a Hamiltonian with degeneracies due to a conservation law, the > scattering states will in general not have a definite value of the > conservation law. In your case, Kwant returns scattering states that > are arbitrary linear combinations of spin up and down, so it is not > possible to label the amplitudes in the scattering matrix by spin. > > However, in Kwant 1.3 a feature will be added that allows for the > construction of scattering states with definite values of a > conservation law. See here for an explanation of the basic idea behind > the algorithm. > > We're currently working on implementing this feature in Kwant itself. > The good news is that we're practically done - here is a link to a > git repo with a functioning implementation. After you clone the repo, > check out the branch cons_laws_combined, which contains a version of > Kwant with conservation laws implemented. This notebook contains a > simple example to illustrate how to work with conservation laws and the > scattering matrix. > > I invite you and anyone else who is interested to give it a try. We'd > appreciate any feedback! > > In your case specifically, there would be two projectors in the new > implementation - P0 which projects out the spin up block, and P1 that > projects out the spin down block. If they are specified in this > order, then the spin up and down blocks in the Hamiltonian have block > indices > 0 and 1, respectively. In the new implementation, it is possible to > ask for subblocks of the scattering matrix relating not only any two > leads, but also any two conservation law blocks in any leads. To get > the reflection amplitude of an incident spin up electron from lead 0 > into an outgoing spin down electron in lead 0, you could simply do > smat.submatrix((0, 1), (0, 0)). Here, the arguments are tuples of indices > (lead index, block index). > > Best regards, > Tómas > > On Fri, Jan 6, 2017 at 3:46 PM, Camilla Espedal > <camilla.espe...@ntnu.no> > wrote: > > Hi again, > > > > This question is basically the same as this: > https://www.mail-archive.com/kwant-discuss@kwant-project.org/msg0007 > 6 > .html > > > > I want to calculate some things using the scattering matrix. I > started out with a very simple system, most basic two-terminal > system. For some energy there is one propagating mode. I now add > matrix structure to the mix (just multiply by s_0 everywhere) and > there are now 2 propagating modes (which makes sense). > > > > Now, if I look at the reflection coefficients for lead 0 by using > submatrix(0,0), it is now a 2x2 matrix after I introduced the > matrices. How are the elements ordered? Is it > > > > [[r_upup, r_updown],[r_downup, r_downdown]] > > > > I know that I could make two lattices, but since I do not plan to > use the other functions such as transmission. I just want the smatrix. > > > > Hope you can help me, and thanks in advance. > > > > Best regards, > > Camilla > >