w90_boltzwann Module

module~~w90_boltzwann~~UsesGraph module~w90_boltzwann w90_boltzwann module~w90_parameters w90_parameters module~w90_parameters->module~w90_boltzwann module~w90_postw90_common w90_postw90_common module~w90_postw90_common->module~w90_boltzwann module~w90_utility w90_utility module~w90_utility->module~w90_boltzwann module~w90_dos w90_dos module~w90_dos->module~w90_boltzwann module~w90_comms w90_comms module~w90_comms->module~w90_boltzwann module~w90_comms->module~w90_postw90_common module~w90_io w90_io module~w90_io->module~w90_boltzwann module~w90_io->module~w90_parameters module~w90_io->module~w90_comms module~w90_constants w90_constants module~w90_constants->module~w90_boltzwann module~w90_constants->module~w90_parameters module~w90_constants->module~w90_postw90_common module~w90_constants->module~w90_utility module~w90_constants->module~w90_dos module~w90_constants->module~w90_comms module~w90_constants->module~w90_io

Compute Boltzman tranport properties

BoltzWann routines by
G. Pizzi, D. Volja, B. Kozinsky, M. Fornari and N. Marzari August, 2012

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)

Used By

module~~w90_boltzwann~~UsedByGraph module~w90_boltzwann w90_boltzwann program~postw90 postw90 module~w90_boltzwann->program~postw90


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          "


private function MinusFermiDerivative(E, mu, KT)

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


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

Return Value real(kind=dp)


public subroutine boltzwann_main()

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



private subroutine calcTDFandDOS(TDF, TDFEnergyArray)

This routine calculates the Transport Distribution Function $$\sigma_{ij}(\epsilon)$$ (TDF) in units of 1/hbar^2 * eV*fs/angstrom, and possibly the DOS.


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 $$ Sigma_{ij}(\eps) $$, 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


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