diff --git a/doc/source/images/FAQ.py.diff b/doc/source/images/faq.py.diff similarity index 78% rename from doc/source/images/FAQ.py.diff rename to doc/source/images/faq.py.diff index 4608a56f3651b2be0aa62a20b941421e2cc9d24e..4f4efd335495e3f82a617678e878a6ef8e231659 100644 --- a/doc/source/images/FAQ.py.diff +++ b/doc/source/images/faq.py.diff @@ -25,7 +25,7 @@ syst[lat(1, 1)] = 4 kwant.plot(syst) -+save_figure("FAQ122") ++save_figure("faq_site") @@ -33,7 +33,7 @@ syst[lat2(0, 0)] = 4 # syst[subB(0, 0)] = 4 kwant.plot(syst) -+save_figure("FAQ123") ++save_figure("faq_lattice") ########## What is a hopping? ####################### @@ -41,7 +41,7 @@ syst[(lat(1, 0), lat(1, 1))] = -1 kwant.plot(syst) -+save_figure("FAQ124") ++save_figure("faq_hopping") ########### How to make a hole in a system? ###################" @@ -49,7 +49,7 @@ syst[(lat(i, j, k) for i in range(L) for j in range(W) for k in range(H))] = 4 kwant.plot(syst) -+save_figure("FAQ1") ++save_figure("faq_hole1") # Delete sites to create a hole @@ -57,7 +57,7 @@ del syst[site] kwant.plot(syst) -+save_figure("FAQ2") ++save_figure("faq_hole2") ################ How can we get access to the sites of our system? #################### @@ -66,15 +66,15 @@ ## Plotting the system plot_system(syst) - -+save_figure("FAQ6B") ++save_figure("faq_colors") - ############### How to create every hoppings in a given direction using Hoppingkind? ################ + ############### How to create all hoppings in a given direction using Hoppingkind? ################ @@ -149,6 +161,7 @@ syst[kwant.builder.HoppingKind((1, 0), lat)] = -1 kwant.plot(syst) -+save_figure("FAQ3") ++save_figure("faq_direction1") # Polyatomic lattice @@ -82,14 +82,14 @@ # equivalent to syst[kwant.builder.HoppingKind((0, 1), b)] = -1 syst[kwant.builder.HoppingKind((0, 1), b, b)] = -1 plot_system(syst) -+save_figure("FAQ10") ++save_figure("faq_direction2") # Delete the hoppings previously created del syst[kwant.builder.HoppingKind((0, 1), b, b)] syst[kwant.builder.HoppingKind((0, 0), a, b)] = -1 syst[kwant.builder.HoppingKind((0, 0), a, c)] = -1 syst[kwant.builder.HoppingKind((0, 0), c, b)] = -1 plot_system(syst) -+save_figure("FAQ11") ++save_figure("faq_direction3") ########## How to create the hoppings between adjacent sites? ################ @@ -97,108 +97,102 @@ syst[lat.neighbors()] = -1 # Equivalent to lat.neighbors(1) kwant.plot(syst) -+save_figure("FAQ4") ++save_figure("faq_adjacent1") del syst[lat.neighbors()] # Delete all nearest-neighbor hoppings syst[lat.neighbors(2)] = -1 kwant.plot(syst) -+save_figure("FAQ5") ++save_figure("faq_adjacent2") # Polyatomic lattice -@@ -224,14 +241,17 @@ +@@ -224,9 +241,11 @@ syst[lat.neighbors()] = -1 plot_system(syst) -+save_figure("FAQ7") ++save_figure("faq_adjacent3") del syst[lat.neighbors()] # Delete the hoppings previously created syst[a.neighbors()] = -1 plot_system(syst) -+save_figure("FAQ8") ++save_figure("faq_adjacent4") del syst[a.neighbors()] # Delete the hoppings previously created - syst[lat.neighbors(2)] = -1 - plot_system(syst) -+save_figure("FAQ9") - del syst[lat.neighbors(2)] - - -@@ -264,6 +284,7 @@ +@@ -264,6 +283,7 @@ syst[(subB(i, j) for i in range(L) for j in range(W))] = 4 syst[lat.neighbors()] = -1 plot_system(syst) -+save_figure("FAQAA") ++save_figure("faq_different_latticea1") # Create a lead lat_lead = kwant.lattice.square() -@@ -273,6 +294,7 @@ +@@ -273,6 +293,7 @@ lead1[(lat_lead(i, 0) for i in range(2, 7))] = 4 lead1[lat_lead.neighbors()] = -1 plot_system(lead1) -+save_figure("FAQAB") ++save_figure("faq_different_latticea2") syst[(lat_lead(i, 5) for i in range(2, 7))] = 4 syst[lat_lead.neighbors()] = -1 -@@ -280,9 +302,11 @@ +@@ -280,9 +301,11 @@ # Manually attach sites from graphene to square lattice syst[((lat_lead(i+2, 5), subB(i, 4)) for i in range(5))] = -1 plot_system(syst) -+save_figure("FAQAC") ++save_figure("faq_different_latticea3") syst.attach_lead(lead1) plot_system(syst) -+save_figure("FAQAD") ++save_figure("faq_different_latticea4") ############# How to cut a finite system out of a system with translationnal symmetries? ########### -@@ -302,6 +326,7 @@ +@@ -302,6 +325,7 @@ cuboid = kwant.Builder() cuboid.fill(model, cuboid_shape, (0, 0, 0)); kwant.plot(cuboid); -+save_figure("FAQaaa") ++save_figure("faq_fill2") # Build electrode (black). def electrode_shape(site): -@@ -316,6 +341,7 @@ +@@ -316,6 +340,7 @@ cuboid.attach_lead(electrode) kwant.plot(cuboid); -+save_figure("FAQbbb") ++save_figure("faq_fill3") ###### How does Kwant order the propagating modes of a lead? ###### -@@ -348,6 +374,7 @@ +@@ -348,6 +373,7 @@ plt.show() plot_and_label_modes(flead, E) -+save_figure('FAQPM') ++save_figure('faq_pm1') plt.clf() # More involved example -@@ -363,6 +390,7 @@ +@@ -363,6 +389,7 @@ flead2 = lead2.finalized() plot_and_label_modes(flead2, 1) -+save_figure('FAQPMC') ++save_figure('faq_pm2') plt.clf() -@@ -395,7 +423,8 @@ +@@ -395,7 +422,8 @@ idx = syst.id_by_site[lat(0, 0)] # look up index of site -print('wavefunction on lat(0, 0): ', wf[idx]) -+with open('FAQORD1.txt', 'w') as f: ++with open('faq_ord1.txt', 'w') as f: + print('wavefunction on lat(0, 0): ', wf[idx], file=f) lat = kwant.lattice.square(norbs=2) syst = make_system(lat) -@@ -408,4 +437,5 @@ +@@ -408,4 +436,5 @@ # to degrees of freedom on the same site. wf = wf.reshape(-1, 2) -print('wavefunction on lat(0, 0): ', wf[idx]) -+with open('FAQORD2.txt', 'w') as f: ++with open('faq_ord2.txt', 'w') as f: + print('wavefunction on lat(0, 0): ', wf[idx], file=f) diff --git a/doc/source/tutorial/FAQ.py b/doc/source/tutorial/faq.py similarity index 89% rename from doc/source/tutorial/FAQ.py rename to doc/source/tutorial/faq.py index e8ecbee6d4b0f88834c5999e5ca35d6c4678c5d4..3c981feada551b34f9a5ccf3a81576baf6001a51 100644 --- a/doc/source/tutorial/FAQ.py +++ b/doc/source/tutorial/faq.py @@ -11,7 +11,7 @@ matplotlib.rcParams['figure.figsize'] = (3.5, 3.5) ######## What is a Site? ############## -#HIDDEN_BEGIN_FAQ122 +#HIDDEN_BEGIN_site a = 1 lat = kwant.lattice.square(a) syst = kwant.Builder() @@ -20,13 +20,13 @@ syst[lat(1, 0)] = 4 syst[lat(1, 1)] = 4 kwant.plot(syst) -#HIDDEN_END_FAQ122 +#HIDDEN_END_site ################# What is a family? a tag? a lattice? ################## -#HIDDEN_BEGIN_FAQ123 +#HIDDEN_BEGIN_lattice # 2 Monatomic lattices primitive_vectors = [(1, 0), (0, 1)] lat1 = kwant.lattice.Monatomic(primitive_vectors, offset=(0, 0)) # equivalent to kwant.lattice.square() @@ -43,7 +43,7 @@ syst[lat1(0, 0)] = 4 # syst[subA(0, 0)] = 4 syst[lat2(0, 0)] = 4 # syst[subB(0, 0)] = 4 kwant.plot(syst) -#HIDDEN_END_FAQ123 +#HIDDEN_END_lattice ########## What is a hopping? ####################### @@ -54,15 +54,15 @@ syst = kwant.Builder() syst[lat(1, 0)] = 4 syst[lat(1, 1)] = 4 -#HIDDEN_BEGIN_FAQ124 +#HIDDEN_BEGIN_hopping syst[(lat(1, 0), lat(1, 1))] = -1 -#HIDDEN_END_FAQ124 +#HIDDEN_END_hopping kwant.plot(syst) ########### How to make a hole in a system? ###################" -#HIDDEN_BEGIN_FAQ2 +#HIDDEN_BEGIN_hole # Define the lattice and the (empty) system a = 2 lat = kwant.lattice.cubic(a) @@ -87,7 +87,7 @@ for site in filter(in_hole, list(syst.sites())): del syst[site] kwant.plot(syst) -#HIDDEN_END_FAQ2 +#HIDDEN_END_hole ################ How can we get access to the sites of our system? #################### @@ -95,32 +95,32 @@ kwant.plot(syst) builder = kwant.Builder() lat = kwant.lattice.square() builder[(lat(i, j) for i in range(3) for j in range(3))] = 4 -#HIDDEN_BEGIN_FAQ3 +#HIDDEN_BEGIN_sites1 # Before finalizing the system sites = list(builder.sites()) # sites() doe *not* return a list -#HIDDEN_END_FAQ3 -#HIDDEN_BEGIN_FAQ7 +#HIDDEN_END_sites1 +#HIDDEN_BEGIN_sites2 # After finalizing the system syst = builder.finalized() sites = syst.sites # syst.sites is an actual list -#HIDDEN_END_FAQ7 -#HIDDEN_BEGIN_FAQ72 +#HIDDEN_END_sites2 +#HIDDEN_BEGIN_sites3 i = syst.id_by_site[lat(0, 2)] # we want the id of the site lat(0, 2) -#HIDDEN_END_FAQ72 +#HIDDEN_END_sites3 ################ How to plot a polyatomic lattice with different colors? ##############" -#HIDDEN_BEGIN_FAQ8 +#HIDDEN_BEGIN_colors1 lat = kwant.lattice.kagome() syst = kwant.Builder() a, b, c = lat.sublattices # The kagome lattice has 3 sublattices -#HIDDEN_END_FAQ8 +#HIDDEN_END_colors1 -#HIDDEN_BEGIN_FAQ9 +#HIDDEN_BEGIN_colors2 # Plot sites from different families in different colors def plot_system(syst): @@ -151,14 +151,14 @@ syst[lat.neighbors()] = -1 ## Plotting the system plot_system(syst) -#HIDDEN_END_FAQ9 +#HIDDEN_END_colors2 -############### How to create every hoppings in a given direction using Hoppingkind? ################ +############### How to create all hoppings in a given direction using Hoppingkind? ################ # Monatomic lattice -#HIDDEN_BEGIN_FAQ4 +#HIDDEN_BEGIN_direction1 # Create hopping between neighbors with HoppingKind a = 1 @@ -168,7 +168,7 @@ syst[ (lat(i, j) for i in range(5) for j in range(5)) ] = 4 syst[kwant.builder.HoppingKind((1, 0), lat)] = -1 kwant.plot(syst) -#HIDDEN_END_FAQ4 +#HIDDEN_END_direction1 # Polyatomic lattice @@ -198,18 +198,18 @@ for i in range(4): syst[c(i, j)] = 4 # blue -#HIDDEN_BEGIN_FAQ13 +#HIDDEN_BEGIN_direction2 # equivalent to syst[kwant.builder.HoppingKind((0, 1), b)] = -1 syst[kwant.builder.HoppingKind((0, 1), b, b)] = -1 -#HIDDEN_END_FAQ13 +#HIDDEN_END_direction2 plot_system(syst) # Delete the hoppings previously created del syst[kwant.builder.HoppingKind((0, 1), b, b)] -#HIDDEN_BEGIN_FAQ14 +#HIDDEN_BEGIN_direction3 syst[kwant.builder.HoppingKind((0, 0), a, b)] = -1 syst[kwant.builder.HoppingKind((0, 0), a, c)] = -1 syst[kwant.builder.HoppingKind((0, 0), c, b)] = -1 -#HIDDEN_END_FAQ14 +#HIDDEN_END_direction3 plot_system(syst) @@ -217,7 +217,7 @@ plot_system(syst) # Monatomic lattice -#HIDDEN_BEGIN_FAQ5 +#HIDDEN_BEGIN_adjacent1 # Create hoppings with lat.neighbors() syst = kwant.Builder() @@ -231,14 +231,14 @@ del syst[lat.neighbors()] # Delete all nearest-neighbor hoppings syst[lat.neighbors(2)] = -1 kwant.plot(syst) -#HIDDEN_END_FAQ5 +#HIDDEN_END_adjacent1 # Polyatomic lattice #HIDDEN_BEGIN_FAQ6 # Hoppings using .neighbors() -#HIDDEN_BEGIN_FAQ10 +#HIDDEN_BEGIN_adjacent2 # Create the system lat = kwant.lattice.kagome() syst = kwant.Builder() @@ -251,19 +251,17 @@ for i in range(4): syst[c(i, j)] = 4 # blue syst[lat.neighbors()] = -1 -#HIDDEN_END_FAQ10 +#HIDDEN_END_adjacent2 plot_system(syst) del syst[lat.neighbors()] # Delete the hoppings previously created -#HIDDEN_BEGIN_FAQ11 +#HIDDEN_BEGIN_adjacent3 syst[a.neighbors()] = -1 -#HIDDEN_END_FAQ11 +#HIDDEN_END_adjacent3 plot_system(syst) del syst[a.neighbors()] # Delete the hoppings previously created -#HIDDEN_BEGIN_FAQ12A syst[lat.neighbors(2)] = -1 -#HIDDEN_END_FAQ12A plot_system(syst) del syst[lat.neighbors(2)] @@ -285,7 +283,7 @@ def plot_system(syst): kwant.plot(syst, site_lw=0.1, site_color=family_color) -#HIDDEN_BEGIN_FAQAA +#HIDDEN_BEGIN_different_lattice1 # Define the scattering Region L = 5 W = 5 @@ -297,10 +295,10 @@ syst = kwant.Builder() syst[(subA(i, j) for i in range(L) for j in range(W))] = 4 syst[(subB(i, j) for i in range(L) for j in range(W))] = 4 syst[lat.neighbors()] = -1 -#HIDDEN_END_FAQAA +#HIDDEN_END_different_lattice1 plot_system(syst) -#HIDDEN_BEGIN_FAQAB +#HIDDEN_BEGIN_different_lattice2 # Create a lead lat_lead = kwant.lattice.square() sym_lead1 = kwant.TranslationalSymmetry((0, 1)) @@ -308,36 +306,36 @@ sym_lead1 = kwant.TranslationalSymmetry((0, 1)) lead1 = kwant.Builder(sym_lead1) lead1[(lat_lead(i, 0) for i in range(2, 7))] = 4 lead1[lat_lead.neighbors()] = -1 -#HIDDEN_END_FAQAB +#HIDDEN_END_different_lattice2 plot_system(lead1) -#HIDDEN_BEGIN_FAQAC +#HIDDEN_BEGIN_different_lattice3 syst[(lat_lead(i, 5) for i in range(2, 7))] = 4 syst[lat_lead.neighbors()] = -1 # Manually attach sites from graphene to square lattice syst[((lat_lead(i+2, 5), subB(i, 4)) for i in range(5))] = -1 -#HIDDEN_END_FAQAC +#HIDDEN_END_different_lattice3 plot_system(syst) -#HIDDEN_BEGIN_FAQAD +#HIDDEN_BEGIN_different_lattice4 syst.attach_lead(lead1) -#HIDDEN_END_FAQAD +#HIDDEN_END_different_lattice4 plot_system(syst) ############# How to cut a finite system out of a system with translationnal symmetries? ########### -#HIDDEN_BEGIN_FAQccc +#HIDDEN_BEGIN_fill1 # Create 3d model. cubic = kwant.lattice.cubic() sym_3d = kwant.TranslationalSymmetry([1, 0, 0], [0, 1, 0], [0, 0, 1]) model = kwant.Builder(sym_3d) model[cubic(0, 0, 0)] = 4 model[cubic.neighbors()] = -1 -#HIDDEN_END_FAQccc +#HIDDEN_END_fill1 -#HIDDEN_BEGIN_FAQddd +#HIDDEN_BEGIN_fill2 # Build scattering region (white). def cuboid_shape(site): x, y, z = abs(site.pos) @@ -345,10 +343,10 @@ def cuboid_shape(site): cuboid = kwant.Builder() cuboid.fill(model, cuboid_shape, (0, 0, 0)); -#HIDDEN_END_FAQddd +#HIDDEN_END_fill2 kwant.plot(cuboid); -#HIDDEN_BEGIN_FAQeee +#HIDDEN_BEGIN_fill3 # Build electrode (black). def electrode_shape(site): x, y, z = site.pos - (0, 5, 2) @@ -361,13 +359,13 @@ electrode.fill(model, electrode_shape, (0, 5, 2)) # lead cuboid.fill(electrode, lambda s: abs(s.pos[0]) < 7, (0, 5, 4)) cuboid.attach_lead(electrode) -#HIDDEN_END_FAQeee +#HIDDEN_END_fill3 kwant.plot(cuboid); ###### How does Kwant order the propagating modes of a lead? ###### -#HIDDEN_BEGIN_PM +#HIDDEN_BEGIN_pm lat = kwant.lattice.square() lead = kwant.Builder(kwant.TranslationalSymmetry((-1, 0))) @@ -378,7 +376,7 @@ flead = lead.finalized() E = 2.5 prop_modes, _ = flead.modes(energy=E) -#HIDDEN_END_PM +#HIDDEN_END_pm def plot_and_label_modes(lead, E): # Plot the different modes @@ -437,7 +435,7 @@ def make_system(lat): return syst.finalized() -#HIDDEN_BEGIN_ORD1 +#HIDDEN_BEGIN_ord1 lat = kwant.lattice.square(norbs=1) syst = make_system(lat) scattering_states = kwant.wave_function(syst, energy=1) @@ -446,9 +444,9 @@ wf = scattering_states(0)[0] # scattering state from lead 0 incoming in mode 0 idx = syst.id_by_site[lat(0, 0)] # look up index of site print('wavefunction on lat(0, 0): ', wf[idx]) -#HIDDEN_END_ORD1 +#HIDDEN_END_ord1 -#HIDDEN_BEGIN_ORD2 +#HIDDEN_BEGIN_ord2 lat = kwant.lattice.square(norbs=2) syst = make_system(lat) scattering_states = kwant.wave_function(syst, energy=1) @@ -461,4 +459,4 @@ idx = syst.id_by_site[lat(0, 0)] # look up index of site wf = wf.reshape(-1, 2) print('wavefunction on lat(0, 0): ', wf[idx]) -#HIDDEN_END_ORD2 +#HIDDEN_END_ord2 diff --git a/doc/source/tutorial/FAQ.rst b/doc/source/tutorial/faq.rst similarity index 79% rename from doc/source/tutorial/FAQ.rst rename to doc/source/tutorial/faq.rst index 58dbc096fa6c03f8531cc60e3d59fd8138d8c248..13218cf243f3d0b5e374cf9c3f5cab5c62d215c0 100644 --- a/doc/source/tutorial/FAQ.rst +++ b/doc/source/tutorial/faq.rst @@ -33,11 +33,11 @@ combination of family and tag uniquely define a site. For example let us create an empty tight binding system and add two sites: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ122 - :end-before: #HIDDEN_END_FAQ122 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_site + :end-before: #HIDDEN_END_site -.. image:: ../images/FAQ122.* +.. image:: ../images/faq_site.* In the above snippet we added 2 sites: ``lat(1 ,0)`` and ``lat(0 , 1)``. Both of these sites belong to the same family, ``lat``, but have different tags: @@ -79,11 +79,11 @@ lattices do, however, have an attribute ``sublattices`` that is a list of For example: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ123 - :end-before: #HIDDEN_END_FAQ123 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_lattice + :end-before: #HIDDEN_END_lattice -.. image:: ../images/FAQ123.* +.. image:: ../images/faq_lattice.* Above, we created 2 ``Monatomic`` lattices (``lat1`` and ``lat2``). ``(1, 0)`` and ``(0, 1)`` are the primitive vectors and ``(0, 0)`` and ``(0.5, 0.5)`` are @@ -106,17 +106,17 @@ How do I plot a polyatomic lattice with different colors? ========================================================= In the following example we shall use a kagome lattice, which has 3 sublattices. -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ8 - :end-before: #HIDDEN_END_FAQ8 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_colors1 + :end-before: #HIDDEN_END_colors1 As we can see below, we create a new plotting function that assigns a color for each family, and a different size for the hoppings depending on the family of the two sites. Finally we add sites and hoppings to our system and plot it with the new function. -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ9 - :end-before: #HIDDEN_END_FAQ9 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_colors2 + :end-before: #HIDDEN_END_colors2 -.. image:: ../images/FAQ6B.* +.. image:: ../images/faq_colors.* What is a hopping? @@ -127,11 +127,11 @@ that makes up our tight-binding model. Starting from the example code from `What is a site?`_, we can add a hopping to our system in the following way: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ124 - :end-before: #HIDDEN_END_FAQ124 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_hopping + :end-before: #HIDDEN_END_hopping -.. image:: ../images/FAQ124.* +.. image:: ../images/faq_hopping.* Visually, we represent a hopping as a line that joins two sites. @@ -150,31 +150,31 @@ hoppings of the form ``(lat_a(x + (1, 0)), lat_b(x))``, where ``x`` is a tag The following example shows how this can be used: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ4 - :end-before: #HIDDEN_END_FAQ4 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_direction1 + :end-before: #HIDDEN_END_direction1 -.. image:: ../images/FAQ3.* +.. image:: ../images/faq_direction1.* Note that ``HoppingKind`` only works with site families so you cannot use them directly with ``Polyatomic`` lattices; you have to explicitly specify the sublattices when creating a ``HoppingKind``: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ13 - :end-before: #HIDDEN_END_FAQ13 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_direction2 + :end-before: #HIDDEN_END_direction2 Here, we want the hoppings between the sites from sublattice b with a direction of (0,1) in the lattice coordinates. -.. image:: ../images/FAQ10.* +.. image:: ../images/faq_direction2.* -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ14 - :end-before: #HIDDEN_END_FAQ14 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_direction3 + :end-before: #HIDDEN_END_direction3 Here, we create hoppings between the sites of the same lattice coordinates but from different families. -.. image:: ../images/FAQ11.* +.. image:: ../images/faq_direction3.* How do I create the hoppings between adjacent sites? @@ -183,33 +183,33 @@ How do I create the hoppings between adjacent sites? that returns a (or several) ``HoppingKind`` that connects sites with their (n-nearest) neighors: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ5 - :end-before: #HIDDEN_END_FAQ5 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_adjacent1 + :end-before: #HIDDEN_END_adjacent1 -.. image:: ../images/FAQ4.* -.. image:: ../images/FAQ5.* +.. image:: ../images/faq_adjacent1.* +.. image:: ../images/faq_adjacent2.* As we can see in the figure above, ``lat.neighbors()`` (on the left) returns the hoppings between the first nearest neighbors and ``lat.neighbors(2)`` (on the right) returns the hoppings between the second nearest neighbors. When using a ``Polyatomic`` lattice ``neighbors()`` knows about the different sublattices: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ10 - :end-before: #HIDDEN_END_FAQ10 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_adjacent2 + :end-before: #HIDDEN_END_adjacent2 -.. image:: ../images/FAQ7.* +.. image:: ../images/faq_adjacent3.* However, if we use the ``neighbors()`` method of a single sublattice, we will only get the neighbors *on that sublattice*: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ11 - :end-before: #HIDDEN_END_FAQ11 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_adjacent3 + :end-before: #HIDDEN_END_adjacent3 -.. image:: ../images/FAQ8.* +.. image:: ../images/faq_adjacent4.* Note in the above that there are *only* hoppings between the blue sites. This is an artifact of the visualisation: the red and green sites just happen to lie @@ -221,12 +221,12 @@ How do I make a hole in a system? To make a hole in the system, we use ``del syst[site]``. In the following example we remove all sites inside some "hole" region: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ2 - :end-before: #HIDDEN_END_FAQ2 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_hole + :end-before: #HIDDEN_END_hole -.. image:: ../images/FAQ1.* -.. image:: ../images/FAQ2.* +.. image:: ../images/faq_hole1.* +.. image:: ../images/faq_hole2.* ``del syst[site]`` also works after hoppings have been added to the system. If a site is deleted, then all the hoppings to/from that site are also deleted. @@ -240,9 +240,9 @@ what is a builder?`_ if you do not know the difference). We can access the sites of a ``Builder`` by using its `~kwant.builder.Builder.sites` method: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ3 - :end-before: #HIDDEN_END_FAQ3 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_sites1 + :end-before: #HIDDEN_END_sites1 The ``sites()`` method returns an *iterator* over the system sites, and in the above example we create a list from the contents of this iterator, which @@ -253,9 +253,9 @@ well be returned in a different order. After finalization, when we are dealing with a ``System``, the sites themselves are stored in a list, which can be accessed via the ``sites`` attribute: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ7 - :end-before: #HIDDEN_END_FAQ7 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_sites2 + :end-before: #HIDDEN_END_sites2 The order of sites in a ``System`` is fixed, and also defines the ordering of the system Hamiltonian, system wavefunctions etc. (see `How does Kwant order components of an individual wavefunction?`_ for details). @@ -263,9 +263,9 @@ the system Hamiltonian, system wavefunctions etc. (see `How does Kwant order com ``System`` also contains the inverse mapping, ``id_by_site`` which gives us the index of a given site within the system: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQ72 - :end-before: #HIDDEN_END_FAQ72 +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_sites3 + :end-before: #HIDDEN_END_sites3 How do I create a lead with a lattice different from the scattering region? @@ -275,19 +275,19 @@ which we want to connect to leads that contain sites from a square lattice. First we construct the central system: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQAA - :end-before: #HIDDEN_END_FAQAA +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_different_lattice1 + :end-before: #HIDDEN_END_different_lattice1 -.. image:: ../images/FAQAA.* +.. image:: ../images/faq_different_latticea1.* and the lead: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQAB - :end-before: #HIDDEN_END_FAQAB +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_different_lattice2 + :end-before: #HIDDEN_END_different_lattice2 -.. image:: ../images/FAQAB.* +.. image:: ../images/faq_different_latticea2.* We cannot simply use `~kwant.builder.Builder.attach_lead` to attach this lead to the system with the honeycomb lattice because Kwant does not know how sites from @@ -296,19 +296,19 @@ these two lattices should be connected. We must first add a layer of sites from the square lattice to the system and manually add the hoppings from these sites to the sites from the honeycomb lattice: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQAC - :end-before: #HIDDEN_END_FAQAC +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_different_lattice3 + :end-before: #HIDDEN_END_different_lattice3 -.. image:: ../images/FAQAC.* +.. image:: ../images/faq_different_latticea3.* ``attach_lead()`` will now be able to attach the lead: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQAD - :end-before: #HIDDEN_END_FAQAD +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_different_lattice4 + :end-before: #HIDDEN_END_different_lattice4 -.. image:: ../images/FAQAD.* +.. image:: ../images/faq_different_latticea4.* How do I cut a finite system out of a system with translational symmetries? @@ -322,29 +322,29 @@ will be repeated in the desired shape to create the final system. For example, say we want to create a simple model on a cubic lattice: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQccc - :end-before: #HIDDEN_END_FAQccc +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_fill1 + :end-before: #HIDDEN_END_fill1 We have now created our "template" ``Builder`` which has 3 translational symmetries. Next we will fill a system with no translational symmetries with sites and hoppings from the template inside a cuboid: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQddd - :end-before: #HIDDEN_END_FAQddd +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_fill2 + :end-before: #HIDDEN_END_fill2 -.. image:: ../images/FAQaaa.* +.. image:: ../images/faq_fill2.* We can then use the original template to create a lead, which has 1 translational symmetry. We can then use this lead as a template to fill another section of the system with a cylinder of sites and hoppings: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_FAQeee - :end-before: #HIDDEN_END_FAQeee +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_fill3 + :end-before: #HIDDEN_END_fill3 -.. image:: ../images/FAQbbb.* +.. image:: ../images/faq_fill3.* How does Kwant order the propagating modes of a lead? @@ -355,16 +355,16 @@ achieved with the `~kwant.system.InfiniteSystem.modes` method, which returns a pair of objects, the first of which contains the propagating modes of the system in a `~kwant.physics.PropagatingModes` object: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_PM - :end-before: #HIDDEN_END_PM +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_pm + :end-before: #HIDDEN_END_pm ``PropagatingModes`` contains the wavefunctions, velocities and momenta of the modes at the requested energy (2.5 in this example). In order to understand the order in which these quantities are returned it is often useful to look at the a section of the band structure for the system in question: -.. image:: ../images/FAQPM.* +.. image:: ../images/faq_pm1.* On the above band structure we have labelled the 4 modes in the order that they appear in the output of ``modes()`` at energy 2.5. Note that @@ -378,7 +378,7 @@ the modes are sorted in the following way: For more complicated systems and band structures this can lead to some possibly unintuitive orderings: -.. image:: ../images/FAQPMC.* +.. image:: ../images/faq_pm2.* How does Kwant order scattering states? @@ -400,10 +400,10 @@ When all the site families present in a system have only 1 degree of freedom per site (i.e. the all the onsites are scalars) then the index into a wavefunction defined over the system is exactly the site index: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_ORD1 - :end-before: #HIDDEN_END_ORD1 -.. literalinclude:: ../images/FAQORD1.txt +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_ord1 + :end-before: #HIDDEN_END_ord1 +.. literalinclude:: ../images/faq_ord1.txt We see that the wavefunction on a single site is a single complex number, as expected. @@ -415,10 +415,10 @@ to one another. In the case where all site families in the system have the wavefunction into a matrix, where the row number indexes the site, and the column number indexes the degree of freedom on that site: -.. literalinclude:: FAQ.py - :start-after: #HIDDEN_BEGIN_ORD2 - :end-before: #HIDDEN_END_ORD2 -.. literalinclude:: ../images/FAQORD2.txt +.. literalinclude:: faq.py + :start-after: #HIDDEN_BEGIN_ord2 + :end-before: #HIDDEN_END_ord2 +.. literalinclude:: ../images/faq_ord2.txt We see that the wavefunction on a single site is a *vector* of 2 complex numbers, as we expect. diff --git a/doc/source/tutorial/index.rst b/doc/source/tutorial/index.rst index bee5d10addfc6969f7164b0b2b3bfc56e5c77296..4fd4d188928b0716e23d3ac45d6e4aa429bf1f87 100644 --- a/doc/source/tutorial/index.rst +++ b/doc/source/tutorial/index.rst @@ -12,4 +12,4 @@ Tutorial: learning Kwant through examples plotting kpm discretize - FAQ + faq diff --git a/setup.py b/setup.py index 5888879be93179e814e0a8e73d696b5f6f97b79a..70a9f19ccddf0e001d0d76af6d7e22c21632d34a 100755 --- a/setup.py +++ b/setup.py @@ -242,7 +242,11 @@ class build_tut(Command): if not os.path.exists(tut_dir): os.mkdir(tut_dir) for in_fname in glob.glob('doc/source/tutorial/*.py'): - out_fname = os.path.join(tut_dir, os.path.basename(in_fname)) + basename = os.path.basename(in_fname) + if basename == 'faq.py': + # The FAQ script is not meant as an example. + continue + out_fname = os.path.join(tut_dir, basename) with open(in_fname, 'rb') as in_file: with open(out_fname, 'wb') as out_file: for line in in_file: