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
andcoulomb_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 inputSolverParams
will override any value provided in the corresponding kwargs of this Junction constructor.
- get_all_eig_energies()
Gets all the many-body eigenenergies
- Returns:
1d array – sorted array containing all the many-body eigenenergies.
- 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_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.