kp_6band{ }
Calling sequence
quantum{ region{ kp_6band{ } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
items: maximum 1
Functionality
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
Nested keywords
num_ev
Calling sequence
quantum{ region{ kp_6band{ num_ev = ... } } }
Properties
usage: \(\mathrm{\textcolor{WildStrawberry}{required}}\)
type: integer
values: \(z \geq 1\)
Functionality
Sets the number of eigenvalues to be calculated.
lapack{ }
Calling sequence
quantum{ region{ kp_6band{ lapack{ } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
items: maximum 1
Functionality
Triggers use of LAPACK eigensolver to solve dense matrix problem. It should be used for 1D and small 2D systems. For 1D simulations without periodic boundary conditions a tridiagonal LAPACK solver is used for the single-band Hamiltonian as default.
lapack{ accuracy }
Calling sequence
quantum{ region{ kp_6band{ lapack{ accuracy } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: real number
values: \(0.0 \leq r \leq 10^{-6}\)
default: \(r=0.0\)
unit: \(\mathrm{-}\)
Functionality
—
arpack{ }
Calling sequence
quantum{ region{ kp_6band{ arpack{ } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
items: maximum 1
Functionality
ARPACK eigensolver is used to solve eigenvalue problem using sparse matrix routines. It ARPACK should be faster for large matrices (N > 1000) where only a few eigenvalues are sought (~5-30). Memory usage of arpack (and also arpack_inv) only depends on the number of eigenvectors requested, and is not influenced by the type of preconditioner used.Essentially, for each requested eigenvector (i.e. wave function), additional temporary space corresponding to 2.5 eigenvectors is needed during runtime. Among the preconditioners, Chebyshev preconditioning and Legendre preconditioning are comparably fast, but require both the specification of a cutoff energy under (above) which all eigenvalues of interest are assumed to be located. If this assumption is violated, only spurious parts of the energy spectrum will be computed. On the other hand, setting the cutoff energy too generous will slow down convergence. Since the energy spectrum often shifts during the Quantum-Poisson iteration, a more generous initial cutoff energy is also needed for the first Quantum-Poisson iteration step. If this initial cutoff energy is not provided, much slower but more predictable polynomial preconditioning will be used for the first Quantum-Poisson iteration step instead of the specified Chebyshev / legendre preconditioner. Alternatively, this slower polynomial preconditioning can also be used for the entire Quantum-Poisson iteration. In this case, no cutoff energies need to be specified at all. Generally, it is advisable to use polynomial preconditioning when simulating a new structure until the distribution of the eigenvalues, the location of the Fermi level(s), and the required numbers of eigenvalues are better known. Performance of all preconditioners can be further tuned by changing the order of the respective polynomial used, with optimal values typically lying between 10 and 30. ARPACK will terminate once the desired accuracy has been reached or the specified number of iterations has been exceeded. In the latter case, not all requested eigenvectors may have been calculated, or convergence may be incomplete.
Warning
Too low cutoff energy, not enough number of states selected to compute, and residuals set too low for large systems are common reasons of failure of ARPACK eigensolver. The method may occur unstable for 8-band model in general.
Note
The default behavior of ARPACK eigensolver is the following: When the Schrödinger equation is solved for the first time, the polynomial preconditioner is used, because there is no suitable cutoff energy known. In all later Quantum-Poisson iterations the Chebyshev preconditioner will be used (up to two times faster) with a cutoff energy slightly above the highest eigenvalue, which was calculated in the last iteration.
arpack{ accuracy }
Calling sequence
quantum{ region{ kp_6band{ arpack{ accuracy } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: real number
values: \(10^{-16} \leq r \leq 10^{-6}\)
default: \(r=1e-10\)
unit: \(\mathrm{-}\)
Functionality
—
arpack{ iterations }
Calling sequence
quantum{ region{ kp_6band{ arpack{ iterations } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: integer
values: no constraints
default: \(z=100000\)
Functionality
—
arpack{ energy_cutoff }
Calling sequence
quantum{ region{ kp_6band{ arpack{ energy_cutoff } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: real number
values:
[1e-3, ...)
default: \(r=0.3\)
unit: \(\mathrm{eV}\)
Functionality
—
arpack{ initial_energy_cutoff }
Calling sequence
quantum{ region{ kp_6band{ arpack{ initial_energy_cutoff } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: real number
values: no constraints
unit: \(\mathrm{eV}\)
Functionality
—
arpack{ preconditioner }
Calling sequence
quantum{ region{ kp_6band{ arpack{ preconditioner } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: choice
values:
polynomial
orchebyshev
orlegendre
default:
chebyshev
Functionality
The Polynomial preconditioner is the slowest but does not require to specify cutoff energy whereas Chebyshev or Legendre preconditioners requires you to specify cutoff energy.
arpack{ order_polynomial }
Calling sequence
quantum{ region{ kp_6band{ arpack{ order_polynomial } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: integer
values: \(z \geq 0\)
default: \(z=20\)
Functionality
Order of the polynomial used for polynomial preconditioning.
forward_differences
Calling sequence
quantum{ region{ kp_6band{ forward_differences = "..." } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: choice
values:
yes
orno
default:
no
Functionality
If set to yes
then forward and backward differences are used for the first derivative discretization of the Kane parameter \(P\) in the the 8-band k.p Hamiltonian.
By default, set to no
, centered differences are used.
This parameter might affect spurious solutions of the wave functions.
See eq. (1.50) and eq. (1.51) of PhD thesis T. Andlauer for more details.
kp_parameters{ }
Calling sequence
quantum{ region{ kp_6band{ kp_parameters{ } } } }
Properties
—
Functionality
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.
kp_parameters{ use_Luttinger_parameters }
Calling sequence
quantum{ region{ kp_6band{ kp_parameters{ use_Luttinger_parameters } } } }
Properties
—
Functionality
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
orno
- default:
no
kp_parameters{ approximate_kappa } }
Calling sequence
quantum{ region{ kp_6band{ kp_parameters{ approximate_kappa } } } }
Properties
—
Functionality
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
orno
- default:
no
k_integration{ }
Calling sequence
quantum{ region{ kp_6band{ k_integration{ } } } }
Properties
—
Functionality
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.
k_integration{ relative_size }
Calling sequence
quantum{ region{ kp_6band{ k_integration{ relative_size } } } }
Properties
—
Functionality
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
k_integration{ symmetry }
Calling sequence
quantum{ region{ kp_6band{ k_integration{ symmetry } } } }
Properties
usage: \(\mathrm{\textcolor{ForestGreen}{optional}}\)
type: choice
values:
none
;C2
;C4
;D2
;D4
;C6
;D6`
default:
none
Functionality
If symmetry = none
then the solver does not reduce number of \(\mathbf{k_{||}}\) points.
If symmetry = C2
then the solver assumes \(C_2\) symmetry of Brillouin zone to reduce number of \(\mathbf{k_{||}}\) points.
Analogously for the other choices.
k_integration{ num_points }
Calling sequence
quantum{ region{ kp_6band{ k_integration{ num_points } } } }
Properties
—
Functionality
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
k_integration{ num_subpoints }
Calling sequence
quantum{ region{ kp_6band{ k_integration{ num_subpoints } } } }
Properties
—
Functionality
number of points between two \(\mathbf{k_{||}}\) points, where wave functions and eigenvalues will be interpolated.
- value:
integer >= 1
- default:
5
k_integration{ force_k0_subspace }
Calling sequence
quantum{ region{ kp_6band{ k_integration{ force_k0_subspace } } } }
Properties
—
Functionality
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
orno
- default:
no
dispersion{ }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ } } } }
Properties
—
Functionality
These groups provide keywords to define a path for computation of \(\mathbf{k_{||}}\) and \(\mathbf{k_{\tiny{superlattice}}}\) (if applicable) dispersions.
The energy dispersion E(k) along the specified paths and for the specified k space resolutions are completely independent from the k space resolution that was used within the self-consistent cycle where the k.p density has been calculated.
The latter is specified in k_integration{ }
.
dispersion{ lines{ } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ lines{ } } } } }
Properties
—
Functionality
Calculates dispersions along some predefined paths of high symmetry in k-space, e.g. [100], [110], [111] and their equivalents (in total maximally 13).
dispersion{ lines{ name } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ lines{ name } } } } }
Properties
—
Functionality
- value:
string
Is a name of the dispersions which also defines the names of the output files.
dispersion{ lines{ k_max } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ lines{ k_max } } } } }
Properties
—
Functionality
- value:
float
Specifies a maximum absolute value (radius) for the k-vector in \(nm^{-1}\).
dispersion{ lines{ spacing } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ lines{ spacing } } } } }
Properties
—
Functionality
- value:
float
Specifies approximate spacing for intermediate points in the path segments in \(nm^{-1}\).
dispersion{ path{ } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ path{ } } } } }
Properties
—
Functionality
Calculates dispersion along custom path in k-space. Multiple instances are allowed.
dispersion{ path{ name } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ path{ name } } } } }
Properties
—
Functionality
Is a name of the dispersions which also defines the names of the output files.
- value:
string
dispersion{ path{ point{ } } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ path{ point{ } } } } } }
Properties
—
Functionality
Specifies points in the path through k-space. At least two k points have to be defined. Line between two such points is called segment.
dispersion{ path{ point{ k } } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ path{ point{ k } } } } } }
Properties
—
Functionality
- value:
3D float vector
Is a k-point represented by vector \([k_x, k_y, k_z]\). The units are \(nm^{-1}\).
For 1D simulation the \(\mathbf{k_{||}}\) space is a \(k_y-k_z\) plane so \(k_y\), \(k_z\) can be freely choosed. \(k_x\) can only be different from zero, if a periodic boundary condition along the x-direction is defined and the quantum region extends over the whole x-domain.
for 2D simulation the \(\mathbf{k_{||}}\) space is a \(k_z\) axis so \(k_z\) can be freely choosed. \(kx\) can only be different from zero if a periodic boundary condition along the x-direction is defined and the quantum region extends over the whole x-domain. \(k_y\) can only be different from zero if a periodic boundary condition along the y-direction is defined and the quantum region extends over the whole y-domain.
for 3D simulation the \(\mathbf{k_{||}}\) space is empty. \(k_x\) can only be different from zero if a periodic boundary condition along the x-direction is defined and the quantum region extends over the whole x-domain. \(k_y\) can only be different from zero if a periodic boundary condition along the y-direction is defined and the quantum region extends over the whole y-domain. \(k_z\) can only be different from zero if a periodic boundary condition along the z-direction is defined and the quantum region extends over the whole z-domain.
dispersion{ path{ spacing } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ path{ spacing } } } } }
Properties
—
Functionality
- value:
float
Specifies approximate spacing for intermediate points in the path segments in \(nm^{-1}\). Excludes num_points
.
dispersion{ path{ num_points } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ path{ num_points } } } } }
Properties
—
Functionality
- value:
integer > 1
Specifies number of points (intermediate + two corner points) for each single path segment. Excludes spacing
.
dispersion{ full{ } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ full{ } } } } }
Properties
—
Functionality
Calculates dispersion in 1D/2D/3D k-space depending on simulation dimensionality and pereodic boundary conditions.
dispersion{ full{ name } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ full{ name } } } } }
Properties
—
Functionality
- value:
string
Is a name of the dispersion which also defines the name of the output file.
dispersion{ full{ kxgrid{ }, … } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ full{ kxgrid{ } } } } } }
quantum{ region{ kp_6band{ dispersion{ full{ kygrid{ } } } } } }
quantum{ region{ kp_6band{ dispersion{ full{ kzgrid{ } } } } } }
Properties
—
Functionality
Specifies a grid{...}
in k-space for a 1D/2D/3D plot of the energy dispersion E(kx, ky, kz).
Allowed only, if simulation is periodic along x-direction and current quantum region extends over the whole x-domain.
The options are same as grid{ }
dispersion{ full{ kxgrid{ line{ } }, … } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ full{ kxgrid{ line{ } } } } } } }
quantum{ region{ kp_6band{ dispersion{ full{ kygrid{ line{ } } } } } } }
quantum{ region{ kp_6band{ dispersion{ full{ kzgrid{ line{ } } } } } } }
Properties
—
Functionality
—
dispersion{ full{ kxgrid{ line{ pos } }, … } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ full{ kxgrid{ line{ pos } } } } } } }
quantum{ region{ kp_6band{ dispersion{ full{ kygrid{ line{ pos } } } } } } }
quantum{ region{ kp_6band{ dispersion{ full{ kzgrid{ line{ pos } } } } } } }
Properties
—
Functionality
—
dispersion{ full{ kxgrid{ line{ spacing } }, … } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ full{ kxgrid{ line{ spacing } } } } } } }
quantum{ region{ kp_6band{ dispersion{ full{ kygrid{ line{ spacing } } } } } } }
quantum{ region{ kp_6band{ dispersion{ full{ kzgrid{ line{ spacing } } } } } } }
Properties
—
Functionality
—
dispersion{ superlattice{ } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ superlattice{ } } } } }
Properties
—
Functionality
Is a convenience group to calculate superlattice dispersion \(E(k_{SL})\) along periodic directions. The intervals are set automatically to \([-\pi/L_i, \pi/L_i]\), where \(L_i\) is the simulation domain range along periodic directions with \(i = x,y,z\).
dispersion{ superlattice{ name } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ superlattice{ name } } } } }
Properties
—
Functionality
- value:
string
Is a name of the dispersion which also defines the name of the output file.
dispersion{ superlattice{ num_points } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ superlattice{ num_points } } } } }
Properties
—
Functionality
Is a convenience keyword to specifies number of points along all appropriate directions in k space.
- value:
any integer > 1
dispersion{ superlattice{ num_points_x, … } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ superlattice{ num_points_x } } } } }
quantum{ region{ kp_6band{ dispersion{ superlattice{ num_points_y } } } } }
quantum{ region{ kp_6band{ dispersion{ superlattice{ num_points_z } } } } }
Properties
—
Functionality
- value:
any integer > 1
Specifies number of points along x direction in k space where dispersion is calculated. The simulation must be periodic along the x direction in direct space. Specifies number of points along y direction in k space where dispersion is calculated. The simulation must be periodic along the y direction in direct space. Specifies number of points along z direction in k space where dispersion is calculated. The simulation must be periodic along the z direction in direct space.
dispersion{ output_dispersions{ } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ output_dispersions{ } } } } }
Properties
—
Functionality
Outputs all defined dispersions.
dispersion{ output_dispersions{ max_num } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ output_dispersions{ max_num } } } } }
Properties
—
Functionality
Is a number of bands to print out
- value:
any integer between 1 and 9999
dispersion{ output_masses{ } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ output_masses{ } } } } }
Properties
—
Functionality
Outputs effective masses \(m^*\) calculated from the dispersions, expressed in masses of a free electron \(m_0\), following the formula:
where \(k\) is a “distance” along the path onto which the related band structure is computed.
dispersion{ output_masses{ max_num } }
Calling sequence
quantum{ region{ kp_6band{ dispersion{ output_masses{ max_num } } } } }
Properties
—
Functionality
Outputs effective masses calculated from the dispersions.
- value:
any integer between 1 and 9999
Last update: 2025-08-13