qtcad.transport.junction module

Defines the Junction class which is central to transport simulations in the sequential tunneling regime.

class qtcad.transport.junction.Junction(dot=None, lead1=None, lead2=None, many_body_solver_params=None, single_body_solver_params=None, temperature=None, contact_labels=None, solve_many_body=True)

Bases: Junction

Junction object consisting of two leads and a quantum dot sytem, all coupled in a linear fashion (lead1 - dot sytem - lead2). The Junction class requires that the transport direction be along x, y, or z if the WKB approximation is used to compute currents.

Attributes:
  • dot (device object) – contains information about the dot in the junction.

  • lead1 (lead object) – the first lead. Wavefunctions approximated using the WKB approximation

  • lead2 (lead object) – the second lead. Wavefunctions approximated using the WKB approximation

  • contact_labels (list) – a list of strings labeling the source, drain, and gates.

  • mbs (Solver) – The many-body solver used to model the dot region.

  • ham_hop (complex/real 2d-array) – noninteracting Hamiltonian between single-body orbitals.

  • coulomb_mat (4d real/complex array) – interaction V_ijkl, where ijkl are the single-body orbitals.

  • sp_list (list) – list of subspace objects

  • biases (1D array) – The biases (in volts) applied at each electrical contact, including the source and drain. The first and last entries of the biases vector are assumed to correspond to source and drain biases, respectively. All entries in between correspond to gates. The biases are given with respect to the reference potentials, i.e., the potentials applied at boundaries when electrostatics was solved.

  • energies (ndarray) – 1d array containing the single-particle energies updated by the gate biases according to the lever arm matrix

  • spectrum (real array) – energy difference between each pair of many-body eigen-states.

  • device (Device object) – defines quantum dot

  • alpha (float or ndarray) – lever arm of the gate potentials on the dot levels. If a float is used, a single lever arm is assumed to shift all single-energy levels simultaneously, and it is assumed that the quantum dot system has a single gate. The lever arms of the source and drain on the dot system are also neglected in this case. If a 2d array is used, then it defines a lever arm matrix whose rows correspond to single-electron eigenstates and whose columns correspond to electrical contacts. The first and last columns must then correspond to the source and drain, respectively.

  • chem_potentials (1d array) – Chemical potentials for transition from N to N+1 electrons

  • coulomb_peak_pos (1d array) – Positions of Coulomb peaks.

  • WKB (boolean) – If True, broadening function computed using the WKB approximation. If False the broadening function is featureless and should not quantitatively accurate. The featureless version should only be used for visualization purposes.

__init__(dot=None, lead1=None, lead2=None, many_body_solver_params=None, single_body_solver_params=None, temperature=None, contact_labels=None, solve_many_body=True)

Constructor for the Junction class.

Parameters:
  • dot (device object, optional) – quantum dot system in the middle of the junction

  • lead1 (lead object, optional) – contains the information about the first lead in the junction

  • lead2 (lead object, optional) – contains the information about the second lead in the junction

  • many_body_solver_params (SolverParams, optional) – A many-body SolverParams object to pass as an optional argument to the many-body solver contained in the Junction object.

  • single_body_solver_params (SolverParams, optional) – A Schrödinger SolverParams object to pass as an optional argument to the many-body solver contained in the Junction object.

  • temperature (float, optional) – The temperature of the junction. If None, use the temperature stored in the input Device (dot).

  • contact_labels (list or None, optional) – A list of strings labeling contacts (including source and drain). This list is optional if a single gate lever arm is provided, but must be provided otherwise. In this case the first and last entries of the list must label the source and drain, respectively, even if the lever arm matrix does not contain columnes for the source and drain. In this case, the lever arm matrix will be padded with columns of zeros.

  • solve_many_body (bool, optional) – Whether to solve the many-body problem contained in the junction upon instantiation.

Note

If no Device object is provided through the dot argument, energies and coulomb_mat must be provided to define the many-body problem to be solved in the Junction.

Some optional arguments of the Junction class are also attributes of many-body SolverParams objects. When such an object is passed as a kwarg of this Junction constructor, attributes of the input SolverParams will override any value provided in the corresponding kwargs of this Junction constructor.

get_tunneling_mat_elem(E, dot_state, lead_state, lead_num, kind=2)

Computes the matrix element relevant for tunneling from a lead to a dot in Fermi’s golden rule. This matrix element is computed using an approximate form of the lead wavefunction which is based on the WKB approximation. We also assume that the Schrodinger equation describing the lead is separable.

Parameters:
  • E (float) – Total energy of the lead wavefunction.

  • dot_state (int) – Label for dot eigenstate we wish to tunnel into.

  • lead_state (tuple) – a tuple of integers (n1, n2), where n1 is the quantum number for confinement along the first perpendicular direction, and n2 is the quantum number for confinement along the second perpendicular direction.

  • lead_num (int, 1 or 2) – If we are considering tunneling the first or second lead

  • kind (int) – Order of interpolation for the lead eigenfunction. Default is 2.

Returns:

(float) – The tunneling matrix element, i.e., the matrix element of the perturbing potential that is needed to compute the Fermi golden rule rate for tunneling from lead to dot.

setVd(vd)

Sets the drain potential.

Parameters:

vd (float) – drain potential (in volts)

setVg(vg_in_v)

Sets the gate bias in a system with a single gate.

Parameters:

vg_in_v (float) – gate bias (in volts)

Note

The biases applied at gates are given with respect to the reference gate potentials, i.e., the potentials applied at the boundaries of the device when electrostatics was initially solved.

setVs(vs)

Sets the source potential

Parameters:

vs (float) – source potential (in volts)

set_bias(contact, bias, verbose=True)

Sets the bias of a contact identified by a string label.

Parameters:
  • contact (string) – The label of the contact on which to apply the bias.

  • bias (float) – The value of the bias to be applied (in volts).

  • verbose (bool, optional) – Verbosity of the underlying solvers.

Note

When setting biases for multiple contacts at the same time, it is recommended to use the qtcad.transport.junction.Junction.set_biases() method instead. Indeed, setting biases may result in re-diagonalization of the many-body Hamiltonian for the new set of biases; doing this only once will save significant time.

In addition, the biases applied at contacts are given with respect to the reference contact potentials, i.e., the potentials applied at the boundaries of the device when electrostatics was initially solved.

set_bias_vector(biases, verbose=True)

General setter for the biases controling the junction.

Parameters:
  • biases (1D array) – The bias applied at each electrical contact, including the source and drain, (in volts).

  • verbose (bool, optional) – Verbosity of the underlying many-body solver. Default: True.

Note

The first and last entries of the biases vector are assumed to correspond to source and drain biases, respectively. All entries in between correspond to gates. The length of the biases vector should match the number of columns in the lever arm matrix alpha, except if alpha is a float, in which case a single gate bias is assumed.

In addition, the biases applied at contacts are given with respect to the reference contact potentials, i.e., the potentials applied at the boundaries of the device when electrostatics was initially solved.

set_biases(contacts, biases, verbose=True)

Sets the biases of contacts identified by a list of string labels.

Parameters:
  • contacts (list) – A list containing the labels of the contacts on which to apply the biases.

  • biases (list or ndarray) – The values of the biases to be applied (in volts).

  • verbose (bool, optional) – Verbosity of the underlying solvers.

Note

The biases applied at contacts are given with respect to the reference contact potentials, i.e., the potentials applied at the boundaries of the device when electrostatics was initially solved.

set_chem_potential(mu)

Sets both lead chemical potentials to a single value.

Parameters:

mu (float) – chemical potential

set_drain_broad_func(broad_func)

Sets the constant broadening function of the drain within the featureless approximation.

Parameters:

broad_func (float) – The constant value of the broadening function in Hz.

set_source_broad_func(broad_func)

Sets the constant broadening function of the source within the featureless approximation.

Parameters:

broad_func (float) – The constant value of the broadening function in Hz.

set_temperature(tmp)

Setter for the lead temperatures

Parameters:

tmp (float) – temperature

solve_many_body(compute_coulomb_integrals=True, verbose=True)

Solves the many-body problem for the quantum dot system and stores results in this junction.

Parameters:
  • compute_coulomb_integrals (bool, optional) – Whether to compute the coulomb matrix from the wavefunctions or not. Turning to off is useful when solving again the many-body problem for multiple single-particle energies but without changing the wave functions. Default: True.

  • verbose (bool, optional) – Verbosity of the underlying many-body solver. Default: True.