tkwantoperator.EnergyCurrent

class tkwantoperator.EnergyCurrent(syst: kwant.system.FiniteSystem, where: Union[List[Tuple[int, int]], List[Tuple[kwant.builder.Site, kwant.builder.Site]]], unicode baseOperator: str = u'Kinetic+', customOnsite: Optional[Callable[[kwant.builder.Site, dict], complex]] = None, sum: bool = False)

An operator for calculating the local energy current between two sites.

The value of the energy current between two sites has no physical meaning as it is not uniquely defined. However, the total outgoing current from a site (i.e. the sum of the energy currents from a site \(i\) to all its neighbors \(j\)), calculated by the class EnergyCurrentDivergence, is uniquely defined.

Parameters
  • syst (FiniteSystem) – The finalized Kwant system for which energy currents will be calculated.

  • where (list [(int, int)] or list [(Site, Site)]) – The hoppings on which the current will be evaluated. It is saved in a normalized way, with the same order, in the where attribute of this class.

  • baseOperator (str) – Can be Hamiltonian, Kinetic+ or Custom (case unsensitive). It tells the operator which onsite term to use when calculating the energy current. Saved as an integer in operatorType

  • customOnsite (None (default) or (Site, dict) \(\rightarrow\) complex matrix-like object) – Overwrites the value of the energy operator \(ε\) on sites: \(\forall i \, \forall t \; ~ ε_{ii}(t) = \text{customOnsite}(i, t)\), but only when baseOperator is set to Custom. In practice, its signature should be customOnsite(site, params) where site is a Site instance and params is a dict containing the parameters values (including the current time). The method must return a matrix-like object (e.g. a tinyarray instance) of the right dimensions at each site (the same as the onsite Hamiltonian). It is saved in the customOnsite attribute of this class.

  • sum (bool) – Whether to sum the currents over each hoppings of the where list and return a single float result when called. Saved as an integer in the sum attribute of this class.

Notes

This operator is used to calculate the energy current between each pair of sites \((j, i)\) in where. At a given time \(t\), the energy current through a hopping \((j, i)\) (from site \(i\) to site \(j\)) writes:

\[I_{ji}^ε(t) = \sum_{\text{lead } α} \; \sum_{{\text{mode } m_α}} \int \frac{{\text{d}E}}{2\pi} f_α(E) \sum_{k} - \text{Im} \left [ \left [ ψ_k^{m_α E} \right ]^\dagger ε_{ki} ε_{ij} ψ_j^{m_α E} - \left [ ψ_k^{m_α E} \right ]^\dagger ε_{kj} ε_{ji} ψ_i^{m_α E} \right ]\]

The above formula has been derived in Reference article for single-orbital Hamiltonians. In practice, the operator EnergyCurrent has been implemented for generic multi-orbital Hamiltonian matrices but the physical meaning of the multi-orbital formula is not clear in general. It has not yet been investigated. \(ε\) is the energy operator derived from the system’s Hamiltonian:

  • Its values on hoppings coincide with the Hamiltonian \(\forall i \! \neq \! j \; ε_{ij}(t) = H_{ij}(t)\)

  • Its value on sites depends on what the user chooses for baseOperator:

    • Hamiltonian: \(\forall i \, \forall t \; ~ ε_{ii}(t) = H_{ii}(t)\)

    • Kinetic+: \(\forall i \, \forall t \; ~ ε_{ii}(t) = H_{ii}(t_0 - 1)\) where \(t_0\) is the instant at which the Hamiltonian starts being time-dependent, given by time_start (the \(-1\) has been added to avoid use-case problems with heaviside-like time-dependence).

    • Custom: \(\forall i \, \forall t \; ~ ε_{ii}(t) = W_{i}(t)\) where \(W\) is given by the user through customOnsite. Note that it is necessary to impose \(ε_{ii}(t) = H_{ii}(t_0 - 1)\) for all sites \(i\) (belonging to added_lead_sites) that were part of the leads and have been added into the central system. Be cautious that there is currently no implemented check to verify this condition and if it is not satisfied, the output result of Current might be wrong.

The index \(k\) runs formally over all sites in the whole system, but effectively only the sites connected to \(i\) and \(j\) (including \(i\) and \(j\)) give a non zero result.

Attributes

sum

Whether to sum the currents over each hoppings of the where list and return a single float result.

Type

int, \(0\) (no) or \(1\) (yes)

where_size

Number of hoppings in the where list: the size of its first dimension.

Type

int

operatorType

Translation to an integer of the baseOperator parameter of the class constructor: “Hamiltonian” \(\leftrightarrow 0\), “kinetic+” \(\leftrightarrow 1\) and “custom” \(\leftrightarrow 2\).

Type

int

syst

The finalized Kwant system on which energy currents will be calculated.

Type

FiniteSystem

customOnsite

Used as the value of the energy operator \(ε\) on sites: \(\forall i \, \forall t \; ~ ε_{ii}(t) = \text{customOnsite}(i, t)\), when operatorType = 2.

Type

None or (Site, dict) \(\rightarrow\) complex matrix-like object

time_name

The name the time parameter has in the params dictionary given to __call__. It is initialised with tkwant’s default name, which is time.

Type

str

time_start

The instant \(t_0\) at which time dependence starts in the Hamiltonian. Initialized with tKwant’s default value, which is 0.

Type

float

where

List of hoppings \((j, i)\) (accessed as j, i = where[n, 0], where[n, 1]) on which the energy current is calculated at each call.

Type

2D array of gint (a python int compatible type) of shape \(n \times 2\)

_neighbors_i

List of lists of the neighbors of each second site \(i\) of each hopping \((j, i)\) in where

Type

list of array of int

_neighbors_j

List of lists of the neighbors of each first site \(j\) of each hopping \((j, i)\) in where

Type

list of array of int

Methods

__call__()

Returns the contribution \(I_{ji}^ε(ψ, t)\) of psi to the expectation value of the current flowing through the hoppings given in where.

This method enables calling an instance A of this class like a function, with a wave function and the “params” dictionary as parameters :

>>> A(psi, params)

For each hopping \((j,i)\) it calculates the following sum, with psi written as “\(ψ\)” :

\[I_{ji}^ε(ψ, t) = \sum_{k} - \text{Im} \left [ ψ_k^\dagger ε_{ki} ε_{ij} ψ_j - ψ_k^\dagger ε_{kj} ε_{ji} ψ_i \right ]\]
Parameters
  • psi (array of complex values) – The wave function to use for calculation. Must have the same length as the total number of orbitals in the system.

  • params (dict, optional) – Dictionary of parameter names and their values.

Returns

List of the values fo the contribution of psi to the currents on each hopping \(\left [ I_{ji}^ε(ψ, t) \right ]_{(j,i) \in \text{where}}\), when sum \(= 0\). Otherwise the sum of these values \(\sum_{(j,i) \in \text{where}} I_{ji}^ε(ψ, t)\).

Return type

list [float] or float

Previous topic

tkwantoperator.EnergySiteValidator

Next topic

tkwantoperator.EnergySource

This Page