Compute Boltzman tranport properties
BoltzWann routines by G. Pizzi, D. Volja, B. Kozinsky, M. Fornari and N. Marzari August, 2012
Affiliations: THEOS, EPFL, Station 12, 1015 Lausanne (Switzerland) DMSE, MIT, 77 Massachusetts Ave, Cambridge, MA, 02139 Central Michigan University, Mount Pleasant, MI 48859 Robert Bosch LLC, Cambridge, MA, 02139
Please cite the following paper when publishing results obtained using the BoltzWann module:
[1] G. Pizzi, D. Volja, B. Kozinsky, M. Fornari, N. Marzari Comp. Phys. Comm. 185, 422 (2014) DOI: 10.1016/j.cpc.2013.09.015 (arXiv:1305.1587)
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | private, | parameter | :: | XX | = | 1 | |
integer, | private, | parameter | :: | XY | = | 2 | |
integer, | private, | parameter | :: | YY | = | 3 | |
integer, | private, | parameter | :: | XZ | = | 4 | |
integer, | private, | parameter | :: | YZ | = | 5 | |
integer, | private, | parameter | :: | ZZ | = | 6 | |
character(len=74), | private, | parameter | :: | pub_string_1 | = | "Please cite the following paper when publishing results obtained using " | |
character(len=74), | private, | parameter | :: | pub_string_2 | = | "the BoltzWann module: " | |
character(len=74), | private, | parameter | :: | pub_string_3 | = | "G. Pizzi, D. Volja, B. Kozinsky, M. Fornari, and N. Marzari, " | |
character(len=74), | private, | parameter | :: | pub_string_4 | = | "Comp. Phys. Comm. 185, 422 (2014); DOI:10.1016/j.cpc.2013.09.015 " |
This function calculates -dn(E)/dE, where n(E) is the Fermi distribution function.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in) | :: | E | |||
real(kind=dp), | intent(in) | :: | mu | |||
real(kind=dp), | intent(in) | :: | KT |
This is the main routine of the BoltzWann module. It calculates the transport coefficients using the Boltzmann transport equation.
This routine calculates the Transport Distribution Function (TDF) in units of 1/hbar^2 * eV*fs/angstrom, and possibly the DOS.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(out), | dimension(:, :, :) | :: | TDF | The TDF(i,EnIdx,spin) output array, where: - i is an index from 1 to 6 giving the component of the symmetric tensor , where 1=xx, 2=xy, 3=yy, 4=xz, 5=yz, 6=zz as defined by the module constants XX, XY, ... (in this way the mapping (i,j) -> i+((j-1)*j)/2 is satisfied for the packed storage of the upper triangle [i<=j]). - EnIdx is the index of the energies; the corresponding energy is given by TDFEnergyArray(EndIdx) array (in eV). - Spin may be only 1 if spin_decomp=.false. If it is instead true, 1 contains the total TDF, 2 the spin-up component and 3 the spin-up component |
|
real(kind=dp), | intent(in), | dimension(:) | :: | TDFEnergyArray | TDFEnergyArray The array with the energies for which the TDF is calculated, in eV |
This subroutine calculates the contribution to the TDF of a single k point
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in), | dimension(3) | :: | kpt | the three coordinates of the k point vector whose DOS contribution we want to calculate (in relative coordinates) |
|
real(kind=dp), | intent(in), | dimension(:) | :: | EnergyArray | array with the energy grid on which to calculate the DOS (in eV) It must have at least two elements |
|
real(kind=dp), | intent(in), | dimension(:) | :: | eig_k | array with the eigenvalues at the given k point (in eV) |
|
real(kind=dp), | intent(in), | dimension(:, :) | :: | deleig_k | array with the band derivatives at the given k point (in eV * angstrom / (2pi) as internally given by the code) already corrected in case of degeneracies, as returned by the wham_get_deleig_a routine |
|
real(kind=dp), | intent(out), | dimension(:, :, :) | :: | TDF_k | TDF_k array in which the contribution is stored. Three dimensions: TDF_k(ij, energyidx, spinidx), where: - ij indexes the components of the TDF (symmetric) tensor (1=XX, 2=XY, ...); see the global constants defined in the module - energyidx is the index of the energies, corresponding to the one of the EnergyArray array; - spinidx=1 contains the total dos; if if spin_decomp==.true., then spinidx=2 and spinidx=3 contain the spin-up and spin-down contributions to the DOS |