qtcad.device.leverarm_matrix module

Tool to calculate the lever arm matrix of a multiple dot system.

class qtcad.device.leverarm_matrix.Solver(dvc, labels, potentials, dot_region=None, pot_solver=None, solver_params=None)

Bases: Solver

This class provides a convenient way to calculate the lever arm matrix of a device containing multiple gates.

Attributes:
  • dvc (Device) – The device for which we want to find the lever arm matrix.

  • subdvc (Device or SubDevice) – The subdevice over which Schrödinger’s equation is solved. By default, solve over the entire device.

  • labels (list) – List of names of objects for which we want the lever arm. The object can correspond either to a boundary at which a potential \(\varphi_{a}\) is applied, or a region in which the Fermi level is shifted by \(-e\varphi_{a}\).

  • potentials (1d array) – Applied potential on each object in reference configuration.

  • dot_region (string, SubMesh or list) – Submesh corresponding to the dot region, or string or list of strings labeling region of the device (Gmsh physical groups), or list of tuples defining two corners of a box where the dot is defined and the Schrodinger calculation will be performed. If None, use the entire device.

  • pot_solver (Solver object or None, optional) – Solver that will solve for the electric/confinement potential. Possible options are the Solver objects from the poisson, schrodinger_poisson, or quantum_well modules. If None, the Non-Linear PoissonSolver is used.

  • pot_solver_params (SolverParams object) – Parameters to pass to the solver that solves for the electric/confinement potential.

  • schrod_params (SolverParams object) – Solver parameters for Schrodinger solver.

  • _submesh (SubMesh) – The submesh over which we solve Schrodinger’s equation, if any.

__init__(dvc, labels, potentials, dot_region=None, pot_solver=None, solver_params=None)

Constructor of the lever arm matrix solver.

Parameters:
  • dvc (Device) – The device for which we want to find the lever arm matrix.

  • labels (list) – List of names of objects for which we want the lever arm. The object can correspond either to a boundary at which a potential \(\varphi_{a}\) is applied, or a region in which the Fermi level is shifted by \(-e\varphi_{a}\).

  • potentials (1d array) – Applied potential on each object in reference configuration.

  • pot_solver (Solver object or None, optional) – Solver that will solve for the electric/confinement potential. Possible options are the Solver objects from the poisson, schrodinger_poisson, or quantum_well modules. If None, the Non-Linear PoissonSolver is used.

  • dot_region (string, SubMesh or list) – Submesh corresponding to the dot region, or string or list of strings labeling region of the device (Gmsh physical groups), or list of tuples defining two corners of a box where the dot is defined and the Schrodinger calculation will be performed. If None, use the entire device.

  • solver_params (SolverParams object, optional) – Solver parameters for lever arm solver.

get_ref_device()

Gets the Device object over which Poisson was solved in the reference configuration.

Returns:

Device – The Device object with Poison solved in the reference configuration.

Note

Must be called after running the solve method.

get_ref_subdevice()

Gets the SubDevice object over which Schrödinger was solved in the reference configuration.

Returns:

SubDevice – The SubDevice object with Schrödinger solved in the reference configuration.

Note

Must be called after running the solve method.

set_ref_potentials(potentials, verbose=True)

Sets the gate potentials in the reference configuration, and solves Poisson and Schrödinger again under updated biases.

Parameters:
  • potentials (1d array) – Applied potential on each object in reference configuration.

  • verbose (bool, optional) – Verbosity level. Default:True.

Returns:

1d array – The energies in the reference configuration in SI units (Joules). 2d array: The wave functions in the reference configuration in SI units (\(\mathrm{m}^-3\)). First index: global node. Second index: eigenvalue index.

solve(bias_increment=1e-06, ref_only=False)

Calculates the lever arm matrix.

Parameters:
  • bias_increment (float, optional) – The bias increment to apply to each gate to calculate the lever arm matrix by finite difference. Default: 1e-6.

  • ref_only (bool, optional) – If True, only solves Poisson and Schrodinger in the reference configuration and skips the lever arm calculation. Default: False.

Returns:

2D array – The lever arm matrix. The first index labels single-particle eigenstates. The second index labels gates or leads.

class qtcad.device.leverarm_matrix.SolverParams(inp_dict=None)

Bases: SolverParams

Parameters to pass to a lever arm solver.

Attributes:
  • pot_solver_params (SolverParams object) – Parameters to pass to the solver that solves for the electric/confinement potential.

  • schrod_solver_params (SolverParams object) – Parameters to pass to the Schrodinger solver.

  • pot_args (list) – Arguments to pass to the solver that solves for the electric/confinement potential.

  • pot_kwargs (dict) – Keyword arguments to pass to the solver that solves for the electric/confinement potential.

__init__(inp_dict=None)

Instantiate the SolverParams object.

Parameters:

inp_dict (dict, optional) – Dictionary specifying certain solver parameters to be used instead of their default values.