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:

[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)


Uses

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

Used by

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

Contents


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.

Read more…

Arguments

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)


Subroutines

public subroutine boltzwann_main()

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

Read more…

Arguments

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.

Read more…

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

Read more…

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