Multi-band models in quantum{ region{ } }

quantum{ region{ kp_6band{ } } }

solves 6-band \(\mathbf{k} \cdot \mathbf{p}\) Schrödinger equation for the ** heavy, light and split-off hole** valence band. The options are the same as Gamma{} with some additional options, which are

kp_parameters{}

advanced manipulation of \(\mathbf{k} \cdot \mathbf{p}\) parameters from the database.

Attention

The groups use_Luttinger_parameters and approximate_kappa are available only for simulations with zincblende crystal symmetry.

use_Luttinger_parameters

By default the solver uses the DKK (Dresselhaus-Kip-Kittel) parameters (L, M, N). If enabled then it uses Luttinger parameters (\(\gamma_1\), \(\gamma_2\), \(\gamma_3\)) instead.

value:

yes or no

default:

no

approximate_kappa

By default the \(\kappa\) for zincblende crystal structure is taken from the database or input file. If this is enabled then the solver is forced to approximate kappa through others 6-band \(\mathbf{k} \cdot \mathbf{p}\) parameters, even though kappa is given in database or input file.

value:

yes or no

default:

no

lapack{}

LAPACK eigensolver: solves dense matrix problem (for 1D and small 2D systems only)

arpack{}

ARPACK eigensolver (default) ARPACK should be faster for large matrices (N > 1000) where only a few eigenvalues are sought (~5-30).

k_integration{}

Provides options for integration over \(\mathbf{k_{||}}\) space for \(\mathbf{k} \cdot \mathbf{p}\) density calculations (for 1D and 2D only). By default the quantum mechanical charge density is calculated (no_density = no). Therefore, k_integration{} is required. If you do not need a quantum mechanical density, e.g. because you are not interested in a self-consistent simulation, the calculation is much faster if you use (no_density = yes). Then you can omit k_integration{} and only the eigenstates for \(\mathbf{k_{||}} = (k_y,k_z) = (0,0) = 0\) are calculated.

relative_size

Range of \(\mathbf{k_{||}}\) integration relative to size of Brillouin zone. Often a value between 0.1-0.2 is sufficient.

value:

float between 0.0 and 1.0

default:

1.0

num_points

number of \(\mathbf{k_{||}}\) points, where Schrödinger equation has to be solved (in one direction). In 1D, the number of Schrödinger equations that have to be solved depends quadratically on num_points. In 2D, the number of Schrödinger equations that have to be solved depends linearly on num_points.

value:

integer > 1

default:

10

num_subpoints

number of points between two \(\mathbf{k_{||}}\) points, where wave functions and eigenvalues will be interpolated.

value:

integer >= 1

default:

5

max_symmetry

If max_symmetry = no then the solver does not use symmetry of Brillouin zone to reduce number of \(\mathbf{k_{||}}\) points.

If max_symmetry = C2 then the solver uses up to \(C_2\) symmetry of Brillouin zone to reduce number of \(\mathbf{k_{||}}\) points.

If max_symmetry = full then the solver uses full symmetry of Brillouin zone to reduce number of \(\mathbf{k_{||}}\) points. For example for a cubic k space the 1/8th of the zone.

value:

1 or no 2 or C2 3 or full

default:

full

force_k0_subspace

If set to yes, \(k_\parallel\) integration in quantum{ } is modified in that only states for point \(k=0\) are computed exactly, whereas all other k points are computed in the subspace of the \(k=0\) wave functions. As a result of this approximation, computational speed is much improved (you may even be able to also enlarge the number of eigenvalues). In case you are planning to use this approximation for final results, please make sure to check whether the resulting loss of accuracy in density is acceptable.

value:

yes or no

default:

no

quantum{ region{ kp_8band{ } } }

It solves 8-band \(\mathbf{k} \cdot \mathbf{p}\) Schrödinger equation for the Gamma conduction band and the heavy, light and split-off hole valence bands.

num_electrons

value:

integer >= 0

default:

0

number of electron eigenvalues

num_holes

value:

integer >= 0

default:

0

number of hole eigenvalues

accuracy

value:

any float > 0

default:

1e-7

accuracy of eigenvalue

iterations

value:

any integer > 1

default:

500

number of iterations for eigenvalue solver

kp_parameters{}

Provides options for advanced manipulation of k.p parameters from database.

Attention

The groups use_Luttinger_parameters and approximate_kappa are available only for simulations with zincblende crystal symmetry.

use_Luttinger_parameters

By default the solver uses the DKK (Dresselhaus-Kip-Kittel) parameters (L, M, N). If enabled then it uses Luttinger parameters (\(\gamma_1\), \(\gamma_2\), \(\gamma_3\)) instead.

value:

yes or no

default:

no

from_6band_parameters

By default the 8-band \(\mathbf{k} \cdot \mathbf{p}\) parameters are taken from database or input file. If enabled then it evaluates the 8-band \(\mathbf{k} \cdot \mathbf{p}\) parameters from 6-band \(\mathbf{k} \cdot \mathbf{p}\) parameters, Kane parameter

\(E_P\) and temperature dependent band gap \(E_g\). :value: yes or no :default: no

approximate_kappa

By default the \(\kappa\) for zinc blende crystal structure is taken from the database or input file. If this is enabled then the solver is forced to approximate kappa through others 8-band \(\mathbf{k} \cdot \mathbf{p}\) parameters, even though kappa is given in database or input file.

value:

yes or no

default:

no

evaluate_S

By default \(S\) (\(S_1\), \(S_2\) for wurtzite) \(\mathbf{k} \cdot \mathbf{p}\) parameter(s) is (are) taken from database or input file. If enabled it evaluates \(S\) (\(S_1\), \(S_2\) for wurtzite) \(\mathbf{k} \cdot \mathbf{p}\) parameter(s) from effective mass \(m_e\) (\(m_{e,par}\), \(m_{e,perp}\) for wurtzite), Kane parameter(s), spin-orbit coupling(s) and temperature dependent band gap.

value:

yes or no

default:

no

rescale_S_to

set \(S\) for zinc blende crystal structure to specified value and rescale \(E_P\), \(L'\), \(N^{+}\) in order to preserve electron’s effective mass.

set \(S_1\), \(S_2\) for wurtzite crystal structure to specified values respectively and rescale \(E_{P1}\), \(E_{P2}\), \(L_{1}'\), \(L_{2}'\), \(N^+_1\), \(N^+_2\) in order to preserve electron’s effective masses.

value:

float for zinc blende crystal structure

2D float vector for wurtzite crystal structure

k_integration{}

Provides options for integration over \(\mathbf{k_{||}}\) space for \(\mathbf{k} \cdot \mathbf{p}\) density calculations (for 1D and 2D only) same as kp_6band{ k_integration{}}

lapack{}

LAPACK eigensolver: solves dense matrix problem (for 1D and small 2D systems only)

arpack_inv{}

ARPACK shift invert eigensolver. ARPACK should be faster for large matrices (N > 1000) where only a few eigenvalues are sought (~5-30).

davidson{}

When called, the Davidson solver is used to solve Schrödinger equation.

Hint

The Davidson solver for 8-band k.p offers both better speed as well as increased stability compared to ARPACK inverse in 2D and 3D.

Warning

This routine is still under development, therefore, should be considered as an experimental feature.

For example, it has the tendency to fail in the presence of degenerate eigenvalues (e.g. Pauli or k.p quantum mechanics without magnetic field). In this case, breaking the degeneracies by slightly changing the geometry of the system or adding a weak magnetic field can be tried. Alternatively, switching back to ARPAPCK inverse or, in 1D or smaller 2D systems, to LAPACK may be considered.

shift_window

value:

integer

default:

0

When LAPACK is used, shifts the window of computed states by the specified number of states up (for positive integers) or down (for negative integers). Adjust when the computed states are not centered around the band gap.

shift

value:

float >=0

default:

0.1 # [eV]

energy shift relative to band edges in arpack_inv.

abs_shift

value:

float >=0

default:

0.0 # [eV]

energy shift on an absolute energy scale in arpack_inv.

linear_solver{}

Provides parameters for linear equation solver in arpack_inv shift invert preconditioner

iterations
value:

integer > 1

default:

10000

number of iterations in arpack_inv. Occasionally, using even larger values than 10000 may be necessary to avoid diagonalization failure.

abs_accuracy
value:

float between 0.0 and 0.01

default:

1e-8

absolute accuracy in arpack_inv.

rel_accuracy
value:

float between 0.0 and 0.01

default:

1e-8

relative accuracy in arpack_inv.

use_cscg
value:

yes or no

default:

no

When arpack_inv is used, forces the slower but occasionally more robust CSCG (Composite Step Conjugate Gradient ) linear solver to be used rather than the cg (Conjugate Gradient) linear solver. May occasionally prevent a diagonalization failure.

force_diagonal_preconditioner
value:

yes or no

default:

no

When arpack_inv is used, forces the use of a slower but more robust diagonal preconditioner. As result, total runtime and stability of the arpack_inv solver may actually become much better and diagonalization failures may be avoided.

shift_min_CB

value:

float

default:

0.0

(relevant only if classify_kspace = 0) Shifts the minimum of the conduction band to manipulate cutoff energy and thereby the quantum density classification.

shift_max_VB

value:

float

default:

0.0

(relevant only if classify_kspace = 0) Shifts the maximum of the valence band to manipulate cutoff energy and thereby the quantum density classification.

tunneling

value:

yes or no

default:

yes

(relevant only if classify_kspace = 0) Choice of the (position-dependent) cutoff energy. yes defines the cutoff energy at max((minimum of the conduction band in the structure), (position-dependent valence band edge)), while no sets it to min((maximum of the valence band in the structure), (position-dependent conduction band edge)).

classify_kspace

value:

0, 1, 2, or 3

default:

0

Choice of the classification method in the 8-band k.p quantum density calculation.

  • classify_kspace = 0: Eigenstates are classified by comparing the zone-center eigenvalues with the (possibly position-dependent) cutoff energies. For the definition of cutoff energies, see shift_min_CB, shift_max_VB, and tunneling.

  • classify_kspace = 1: Eigenstates are classified by comparing the zone-center spinor composition with threshold_classification.

  • classify_kspace = 2: Eigenstates are classified at each in-plane k vector (1D simulation) and at each k value (2D simulation) using spinor composition averaged with the neighbouring k points.

  • classify_kspace = 3: Eigenstates are classified at each in-plane k vector (1D simulation) and at each k value (2D simulation) using spinor composition averaged with the neighbouring k points, but skipping the average if any of the neighbouring k points has the opposite sign of charge. The resulting quantum density will be different from the case classify_kspace = 2 if electron-hole hybridization occurs (e.g. type-II broken-gap superlattices).

threshold_classification

value:

0.0 <= float <= 1.0

default:

0.5

(relevant only if classify_kspace >= 1) Classify states to electrons if the electron spinor composition is greater than this threshold and otherwise to holes.

full_band_density

value:

yes or no

default:

no

Calculate density by filling all states above Fermi level with holes and subtracting a negative background charge (lapack only). This ignores classify_kspace.

spurious_handling

value:

six dimensional double vector

default:

[0.0, 1.0, -1.0, 1.0, 0.0, 0.0]

  • first component: If value > 0, forward-/backward differences are used for the first derivative discretization of the P material parameter (Kane parameter) in the 8-band k.p Hamiltonian. Default is 0 (= FALSE), i.e. centered differences are used instead. This parameter might affect spurious solutions of the wave functions. See eq. (1.50) and eq. (1.51) of PhD thesis T. Andlauer.

  • second component: far-band contribution to electrons = value - 1.0 (conduction band g factor, should be a material parameter but it is not) (default is: 1.0) S = 1 + farband contribution, by default farband contribution = 0. This corresponds to setting S=1. It can be useful to set this value to 0.0 (farband contribution = -1). Then it corresponds to setting S=0. Otherwise, the default is rescaling to that S=1.

  • third component: correction for electron g factor [eV] (default is: -1.0)

  • fourth component: If value > 0, rescale everywhere (default is: 1 = TRUE)

  • fifth component: If value > 0, upwinding is TRUE (default is: 0 = FALSE) ==> It seems that upwinding is not used at all.

  • sixth component: If value > 0, avoid spurious solutions. (default is: 0 = FALSE)

To avoid spurious solutions, an example configuration could be given by spurious_handling = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0].