class kwant.solvers.common.SMatrix(data, lead_info, out_leads, in_leads, current_conserving=False)[source]#

Bases: BlockResult

A scattering matrix.

Transport properties can be easily accessed using the transmission method (don’t be fooled by the name, it can also compute reflection, which is just transmission from one lead back into the same lead.)

SMatrix however also allows for a more direct access to the result: The data stored in SMatrix is a scattering matrix with respect to lead modes and these modes themselves. The details of this data can be directly accessed through the instance variables data and lead_info. Subblocks of data corresponding to particular leads are conveniently obtained by submatrix.

SMatrix also respects the conservation laws present in the lead, such as spin conservation, if they are declared during system construction. If queried with length-2 sequence the first number is the number of the lead, and the second number is the index of the corresponding conserved quantity. For example smatrix.transmission((1, 3), (0, 2)) is transmission from block 2 of the conserved quantity in lead 0 to the block 3 of the conserved quantity in lead 1.


a matrix containing all the requested matrix elements of the scattering matrix.


NumPy array


a list containing kwant.physics.PropagatingModes for each lead. If a lead is a selfenergy lead, then the corresponding entry in lead_info is a selfenergy.


list of data

out_leads, in_leads

indices of the leads where current is extracted (out) or injected (in). Only those are listed for which SMatrix contains the calculated result.


sequence of integers


block_coords(lead_out, lead_in)[source]#

Return slices corresponding to the block from lead_in to lead_out.


Return the conductance matrix.

This is the matrix \(C\) such that \(I = CV\) where \(I\) and \(V\) are, respectively, the vectors of currents and voltages for each lead.

This matrix is useful for calculating non-local resistances. See Section 2.4 of the book by S. Datta.


Return a slice with the columns in the block corresponding to lead_in.


Return the number of propagating modes in the lead.


Return a slice with the rows in the block corresponding to lead_out.

submatrix(lead_out, lead_in)[source]#

Return the matrix elements from lead_in to lead_out.

transmission(lead_out, lead_in)[source]#

Return transmission from lead_in to lead_out.

If lead_in or lead_out are a length-2 sequence, the first number is the number of the lead, and the second number indexes the eigenvalue of the conserved quantity in that lead (e.g. spin) if it was specified.