# w90_boltzwann Module

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:

 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)

## Variables

TypeVisibility AttributesNameInitial
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          "

## Functions

### private function MinusFermiDerivative(E, mu, KT)

This function calculates -dn(E)/dE, where n(E) is the Fermi distribution function.

#### Arguments

Type IntentOptional AttributesName
real(kind=dp), intent(in) :: E
real(kind=dp), intent(in) :: mu
real(kind=dp), intent(in) :: KT

## Subroutines

### public subroutine boltzwann_main()

This is the main routine of the BoltzWann module. It calculates the transport coefficients using the Boltzmann transport equation.

None

### private subroutine calcTDFandDOS(TDF, TDFEnergyArray)

This routine calculates the Transport Distribution Function (TDF) in units of 1/hbar^2 * eV*fs/angstrom, and possibly the DOS.

#### Arguments

Type IntentOptional AttributesName
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

### private subroutine TDF_kpt(kpt, EnergyArray, eig_k, deleig_k, TDF_k)

This subroutine calculates the contribution to the TDF of a single k point

#### Arguments

Type IntentOptional AttributesName
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