Implement generalized local densities / current densities
Presently, Kwant has very nice support for calculating transport properties and manipulating the scattering matrix of a system. There is, however, less support for dealing with locally-defined quantities such as charge and current densities. For systems with a single degree of freedom (DOF) per site there is only one sensible density, but for systems with >1 DOF per site one could imagine more exotic densities (e.g. spin density for spin DOF, charge/quasiparticle density for electron/hole DOF in superconductors...).
In general the density on a site
i can be written as:
ψ⁺_i ρ_i ψ_i
ψ_i is a vector containing the wavefunction components on site
ρ_i is a Hermitian matrix that defines the density operator for site
i (it may be useful to have a density operator that varies from site to site, e.g. for defining spin density with a quantization axis perpendicular to some applied B field, for example).
Using the continuity equation one can define a general current operator from the
ρ for the current flowing between two sites
It would be nice to have support in Kwant for creating such density and current operators. The idea would be that such operators could then be applied to the scattering states calculated by
kwant.wave_function and the output could be plotted with
kwant.plotter.map (for densities) or
kwant.plotter.vector_map (for current densities)(see #5 (closed)).
class Density: """Generalized density operator that can act on wavefunctions.""" def __init__(self, density): """ parameters ---------- density: ndarray or function A Hermitian matrix that defines the density operator for a single site. If the density operator is different for different sites, a function can be provided. It should take a single Site object and return a Hermitian matrix for the given site. """ # TODO: implement this pass def __call__(self, wavefunction): """Calculate the expectation value of this operator with a wavefunction.""" # TODO: implement this pass class CurrentDensity: """Generalized current operator that can act on wavefunctions""" def __init__(self, density): """ parameters ---------- density: Density or ndarray or functions see the __init__ docstring for Density """ def __call__(self, wavefunction): """Calculate the expectation value of this operator with a wavefunction.""" # TODO: implement this pass