qtcad.device.kp module

D-matrices and \(\mathbf k\cdot \mathbf p\) models employed by the single-particle Schrödinger solver.

class qtcad.device.kp.KPModel(D=None)

Bases: KPModel

\(\mathbf k \cdot \mathbf p\) model for an arbitrary material.

Attributes:

d_matrix (4d array) – The D matrix for the material.

Note

This class is used for band structure calculations but not in finite-element modeling. For example, use this class to calculate an effective mass for each band in the bulk material (3D). Default d_matrix is that of free electrons. The D matrix must be given for only one position, i.e., no node indexing is allowed. The D matrix is given in units of \(\hbar^2/m_e\).

__init__(D=None)

Constructor of the KPModel class.

angular_effective_mass(theta, phi, dk=1768.9252894404003)

Calculate the inverse angular effective mass \(f(\theta,\phi)\) for given direction.

Parameters:
  • theta (float) – Polar angle.

  • phi (float) – Azimuthal angle.

  • dk (float, optional) – Finite-difference increment in the calculation of derivatives. Default: \(10^{-6}\times 1/a\), where \(a\) is the lattice constant of gallium arsenide.

Returns:

1d array – Inverse angular effective mass of each band, in units of \(1/me\).

Note

Angular effective mass is defined by \(m(\theta,\phi) = \frac{1}{f(\theta,\phi)}\), where \(f(\theta,\phi) = \frac{me}{\hbar^2} \left.\frac{\partial^2 E}{\partial k_r^2} \right|_{\mathbf k=0}\), and where \(E\) is the energy, and \(k_r\) is the component of the wave vector in the radial direction.

dos_effective_mass()

Computes density-of-states effective mass of each band in the model.

Returns:

1darray – The DOS effective mass for each band in units of \(m_e\).

energies(k)

Eigenenergies of the k.p model.

Parameters:

k (1d array) – The wave vector.

Returns:

2d array – The \(\mathbf k \cdot \mathbf p\) Hamiltonian (kinetic term only) evaluated at the input wave vector.

Note

This assumes translational invariance of the system along all three Cartesian directions. In other words, this method gives the \(\mathbf k \cdot \mathbf p\) Hamiltonian for the bulk material. The dimension of the Hamiltonian is \(N_\mathrm{bands}\times N_\mathrm{bands}\), where \(N_\mathrm{bands}\) is the number of bands considered in this \(\mathbf k \cdot \mathbf p\) model.

hamiltonian(k)

Hamiltonian for a given wave vector and D matrix.

Parameters:

k (1d array) – The wave vector.

class qtcad.device.kp.LuttingerKohnModel(gamma_1, gamma_2, gamma_3)

Bases: KPModel

Luttinger-Kohn model. This class is used for band structure calculations but not in finite-element modeling. For example, use this class to calculate an effective mass for each band.

Note

Inherits from the KPModel class but uses the D matrix for Luttinger-Kohn.

__init__(gamma_1, gamma_2, gamma_3)

Construct k.p model from Luttinger-Kohn parameters \(gamma_1\), \(gamma_2\), and \(gamma_3\).

Parameters:
  • gamma_1 (float) – 1st Luttinger-Kohn parameter.

  • gamma_2 (float) – 2nd Luttinger-Kohn parameter.

  • gamma_3 (float) – 3rd Luttinger-Kohn parameter.

qtcad.device.kp.luttinger_kohn_foreman(gamma_1, gamma_2, gamma_3, *additional_args)

Compute D matrix for the Luttinger-Kohn (LK) model in a heterojunction according to Foreman. Phys. Rev. B 48, 4964 (1993).

Parameters:
  • gamma_1 (1d array) – First LK parameter at each global node.

  • gamma_2 (1d array) – Second LK parameter at each global node.

  • gamma_3 (1d array) – Third LK parameter at each global node.

Returns:

tuple – The first element is a 5D array representing the D matrix for the LK model at each global node. The second element is a 2D array which is a 6x6 matrix describing energy splittings in bands at k=0. In the four-band model, all the entries of this array are 0.

Note

The first index is the global node or element index. The next two indices of the D matrix are the x, y, z direction indices. The last two indices are the band indices. The D matrix is given in units of \(\hbar^2/m_e\). This model assumes that the growth direction is along the z axis—in other words, all discontinuities in the Luttinger-Kohn parameters due to, e.g., distinct materials layers, happen along z.

qtcad.device.kp.luttinger_kohn_foreman_6band(gamma_1, gamma_2, gamma_3, Delta)

Compute D matrix for the 6 band Luttinger-Kohn (LK) model in a heterojunction according to Foreman. Phys. Rev. B 48, 4964 (1993).

Parameters:
  • gamma_1 (1d array) – First LK parameter at each global node.

  • gamma_2 (1d array) – Second LK parameter at each global node.

  • gamma_3 (1d array) – Third LK parameter at each global node.

  • Delta (float) – Spin-orbit splitting. Units: J

Returns:

tuple – The first element is a 5D array representing the D matrix for the LK model at each global node. The second element is a 2D array which is a 6x6 matrix describing energy splittings in bands at k=0. There is a k=0 splitting between of the split-off band characterized by the spin-orbit coupling.

Note

The first index is the global node or element index. The next two indices of the D matrix are the x, y, z direction indices. The last two indices are the band indices. The D matrix is given in units of \(\hbar^2/m_e\). This model assumes that the growth direction is along the z axis—in other words, all discontinuities in the Luttinger-Kohn parameters due to, e.g., distinct materials layers, happen along z.

qtcad.device.kp.luttinger_kohn_foreman_no_mix(gamma_1, gamma_2, gamma_3, *additional_args)

Compute D matrix for the Luttinger-Kohn (LK) model in a heterojunction according to Foreman. Phys. Rev. B 48, 4964 (1993). Neglect all band-mixing terms.

Parameters:
  • gamma_1 (1d array) – First LK parameter at each global node.

  • gamma_2 (1d array) – Second LK parameter at each global node.

  • gamma_3 (1d array) – Third LK parameter at each global node.

Returns:

tuple – The first element is a 5D array representing the D matrix for the LK model at each global node. The second element is a 2D array which is a 6x6 matrix describing energy splittings in bands at k=0. In the four-band model, all the entries of this array are 0.

Note

The first index is the global node or element index. The next two indices of the D matrix are the x, y, z direction indices. The last two indices are the band indices. The D matrix is given in units of \(\hbar^2/m_e\).