Each derived object of the type ValleyType should represent one group of valleys of the analytical band structure of a semiconductor. It is assumed that each subvalley contained in that group possesses the same effective masses in its ellipse coordinate system. If only one valley is required the function getDegeneracyFactor() should return 1. Additionally, for anisotropical effective masses the Herring Vogt transformation is used throughout this code.
Valleys stem from the analytical band structure, which uses parabolic and non-parabolic functions to approximate the full band structure of a given material. The idea is that particles close to extrema of the conduction / valence band, behave like free particles with an adapted effective mass m*. Each approximated extremum of the bands is then called valley, additionally valleys that possess the same effective masses are usually grouped and also called valley. One example for a group of valleys would be the X-valleys in silicon, which have a degeneracy of 6 (as can be seen here).
Further informations on the analytical band structure are given in the following references:
-
Simplified Band Structure Models and Carrier Dynamics: A PDF that describes the ideas behind analytical band structures.
-
Analytical Bandstructure in Dissertation of Dr. Sergey Smirnov: A description of analytical band structures including the ideas of the Herring-Vogt transformation.
-
Silicon Band Structure Models in Dissertation of Dr. Wilfried Wessner : A short overview on how to approximate the band structure of silicon.
ValleyType is an abstract class that presents all the functionalities that are needed for the implementation of one specific valley or type of valley. In the following the functions and the ideas behind it will be explained:
The effective mass m*, which can either be isotropical (direction-independent) or anisotropical is one of the main characteristics of a valley.
In case the effective mass is isotropical m* is a scalar value, which is returned by the functions getEffMassDOS() and getEffMassCond(). Also, the transformation to and out of the ellipse coordinate system is unnecessary as the effective mass in all coordinate systems can be represented by the given scalar value.
In case the effective mass is anisotropical the effective mass is a matrix. This case is a little more complicated. Even though, the mass is a matrix, there still exists one coordinate system, in which this matrix only has non-zero diagonal entries of the form
The coordinate system, which fulfills this condition is then called ellipse coordinate system (ECS) and it has to be noted that this system is not always the same as the device coordinate system (DCS), which is used within the simulation. The effective mass of each subvalley is then defined uniquely by the determination of the three values
where m is either mostly either the DOS effective mass or the conduction effective mass. In case the valley is isotrop
The degeneracy of the valley, which is retruned by the function getDegeneracyFactor is the number of subvalleys that is contained in this group of valleys and should thereby be an integer. As mentioned in the beginning if only one valley should be simulated this fucntion should return 1.
The bottom energy of the valley is the energy at extremum of the valley in
The non-parabolicity factor (alpha) determines the amount of non-parabolicity of that valley and is given in
here an isotropical effective mass is assumed and the relation between those two parameter is usually called dispersion relation. If
The additional functions that are implemented in valleyType, are:
-
getNormWaveVec(energy): This function calculates the norm of the wave vector
$k$ of a particle based on a given energy using the dispersion relation. - getEnergy(waveVector): This function calculates the energy of a particle based on its given wavevector. This calculation is again based on the dispresion relation.
-
getGamma(energy): This function returns
$\gamma(k) := E (1 + \alpha E)$ . -
getVelocity(waveVector, energy, idxSubValley): returns the group velocity
$v$ if a particle assigned to a specific valley, which is given by$$v = \nabla_{k}E(k)/\hbar$$
The implementation of the valleys in this code is based on the description of the valleys in the thesis "Generalized Monte Carlo Tool for Investigating Low-Field and High Field Properties of Materials Using Non-parabolic Band Structure Model" by Raguraj Hathwar, which can be found here.