Classes#

For now, there is the LinearChain class including both the model and NEGF solver routines. This will be in future separated into a generic System class, with child classes of different specific systems (like LinearChain).

class fuNEGF.models.LinearChain(N=100, eps_0=0, t=1, a=1, H_impurity=None, make_H_periodic=False, plot_dispersion=True)#

Bases: object

Linear chain tight-binding model with NEGF solver. Include arbitrary on-site potential impurities.

G_R_fun(k, E, Sigma_0=None)#

The retarded Green’s function for a given k and energy E.

Parameters:
  • k (float) – the Bloch wave vector.

  • E (float) – Energy in eV.

  • Sigma_0 (N-by-N numpy array, optional) – The internal self-energy. Defaults to None.

Returns:

the retarded Green’s function in matrix form.

Return type:

N-by-N numpy array

Greens_functions_solver(k, E, D0_phase, D0_phase_momentum, N_sc=70)#
Self-consistent iterative NEGF solver in case where the phase and momentum relaxation

are defined in terms of the Green’s functions themselves (see Datta’s Lessons from Nanoelectronics B).

Parameters:
  • k (float) – the Bloch wave vector.

  • E (float) – Energy in eV.

  • D0_phase (float) – The phase relaxation parameter.

  • D0_phase_momentum (float) – The phase+momentum relaxation parameter.

  • N_sc (int, optional) – Number of self-consistent iteration steps: typically a value around 50 should be enough. Defaults to 70.

Returns:

the self-consistently solved Green’s functions (retarded, advanced, electron occupation), the internal self-energy Sigma_0,

and the in-scattering self-energy Sigma_in_0.

Return type:

N-by-N numpy arrays

add_H_impurity(H_impurity, plot_dispersion=False)#

Add an impurity Hamiltonian.

Parameters:
  • H_impurity (N-by-N numpy array) – The impurity Hamiltonian (typically an Anderson disorder).

  • plot_dispersion (bool, optional) – Plot the numerical and analytical dispersion. Defaults to False.

compare_dispersion_analytic_vs_numerical()#

Plots a comparison of the analytical and numerical dispersion.

construct_H(make_H_periodic=False, print_H_matrix=False)#

Construct the linear chain tight-binding Hamiltonian.

Parameters:
  • make_H_periodic (bool, optional) – If True, the Hamiltonian will be made periodic by adding t hopping to the [N-1, 0] and [0, N-1] sites. Defaults to False.

  • print_H_matrix (bool, optional) – If True, prints the Hamiltonian matrix. Defaults to False.

plot_occupation(D0_phase, D0_phase_momentum, N_sc=70, E_to_plot=0, show=True, ax=None)#
Plot the occupation f(j) of the sites j in the chain, which in the case f1=1, f2=0 corresponds to the

electrochemical potential mu(j) = qV f(j), where a potential V is imagined to be applied across the device and q is the electron charge.

Parameters:
  • D0_phase (float) – The phase relaxation parameter.

  • D0_phase_momentum (float) – The phase+momentum relaxation parameter.

  • N_sc (int, optional) – Number of self-consistent iteration steps: typically a value around 50 should be enough. Defaults to 70. N_sc=1 effectively turns off the phase/momentum relaxation.

  • E_to_plot (int, optional) – The energy at which to plot the occupation. Defaults to 0.

  • show (bool, optional) – If True, the plot will be shown. Defaults to True.

  • ax (_type_, optional) – If provided, the figure will be plotted to ax. Defaults to None.

plot_onsite_energy(ax=None)#

Plot the on-site energy as horizontal lines.

Parameters:

ax (matplotlib.pyplot axis object, optional) – If provided, the figure will be plotted to ax. Defaults to None.

plot_transmission(ax=None)#

Plots the transmission function T(E) given by T = Tr[Gamma_1 G_R Gamma_2 G_A].

Parameters:

ax (matplotlib.pyplot axis object, optional) – If provided, the figure will be plotted to ax. Defaults to None.