transport module

This module, transport.py contains the setup and checks necessary to execute the calculation of the transport coefficients. It also execute those routines.

Contains routines to set up the calculation of the charge carrier transport coefficients.

class transport.Transport(bs)

Bases: object

Involves all transport related routines.

Parameters:
bs : object

A Band() object.

lattice : object

A Lattice() object.

param : object

A Param() object.

calc_carrier_concentration(self, temperature, chempot, dos=None, dos_energies=None, band_decomp=False, defect_ionization=False)

Returns the charge carrier concentration.

Parameters:
temperature : float

The temperature in K.

chempot : float

The chemical potential in eV.

dos : ndarray, optional
Dimension: (N,M)

Contains the band decomposed density of states for each band N and energy M. If not supplied, set to the dos_partial parameter of the current Bandstructure() object.

dos_energies : ndarray, optional
Dimension: (M)

The energies in eV where the density of states are sampled.

band_decomp : boolean

Return a band decomposed carrier concentration or not.

defect_ionization : boolean

Selects if defect ionization compensation should be included. The donor_number, donor_energy, donor_degen_fact, acceptor_number, acceptor_energy and acceptor_degen_fact need to be set in the general configuration file.

Returns:
n_type : ndarray
Dimension: (N)

Contains the n-type carrier concentration for each band index N in units of 10^{21} \mathrm{cm}^{-3}.

p_type : ndarray
Dimension: (N)

Contains the p-type carrier concentration for each band index N in units of 10^{21} \mathrm{cm}^{-3}.

calc_transport_tensors(self, bs=None, temperatures=None, chempots=None, method=None)

Selects which method to use when calculating the transport coefficients.

Parameters:
bs : A Band() object containing the band structure.
temperatures : ndarray, optional
Dimension: (N)

Contains N different temperatures in K. If not supplied the temperature from the active Transport() object is used.

chempots : ndarray, optional
Dimension: (M)

Contains M different chemical potentials in eV. If not supplied the chempot from the active Transport() object is used.

method : {“closed”, “numeric”, “numerick”}

If method is not supplied is defaults to “numeric” unless bandstructure data is read numerically or generated (all cases where the closed Fermi Dirac integrals cannot be used) when it defaults to “numerick”.

“closed” evaluates the closed Fermi integrals where only
one scattering mechanism is possible per band. Only valid
for systems where one can strictly rely on a parametrized
parabolic bandstructure based on effective mass models.
Parameters (e.g. effective masses for each band) are set
in the bandstructure configuration file.
The driver routine is lbtecoeff.parabolic_closed()
“numeric” similar to “closed, but evaluates the Fermi
integrals in an open form (e.g. it is possible to
concatenate the scattering mechanisms, which is not
possible for the closed Fermi integrals).
The driver routine is lbtecoeff.parabolic_numeric()
“numerick” evaluates the transport integrals more generally
as an integral over the k-points. It is less restrictive
than the two other options, but also more prone to
convergence issues etc. However, for bandstructures
read from datafiles, this is the only option.
The driver routine is lbtecoeff.numerick()
Returns:
sigma, seebeck, lorenz : ndarray, ndarray, ndarray
Dimension: (N,M,3,3), (N,M,3,3), (N,M,3,3)

Returns the electrical condcutivity, Seebeck coefficient and Lorenz tensor for N temperature and M chemical potential steps in units of \\mathrm{S}/\\mathrm{m}, \\mu \\mathrm{V}/\\mathrm{K}, \\mathrm{V^2}/\\mathrm{K^2}. These are stored in the current Transport() object.

fetch_chempots(self, store=True)

Set up the chemical potential.

Parameters:
store : boolean, optional

If given and set to True, the chempot array is in addition to being returned also stored in the current Transport() object.

Returns:
chempot : ndarray
Dimension: (N)

Contains N chemical potential linear samplings in units of eV. The parameters transport_chempot_min, transport_chempot_max and transport_chempot_samples in param.yml set the maximum and minimum chemical potential and its number of samples.

fetch_etas(self, chempot, temperature)

Calculate the reduced chemical potential

Parameters:
chempot : ndarray
Dimension: (N)

Contains N samples of the chemical potential in units of eV.

temperature : float

The temperature in K.

Returns:
eta : ndarray
Dimension: (N)

Contains N samples of the reduced chemical potential

fetch_relevant_bands(self, tr=None)

Locate bands that will be included in the transport integrals.

Parameters:
tr : object, optional

A Transport() object.

Returns:
None

Notes

The included bands are located by considering the input range of chemical potentials from transport_chempot_min and transport_chempot_max padded with the value transport_energycutband on each side (see the general configuration file).

fetch_temperatures(self, store=True)

Set up the temperatures.

Parameters:
store : boolean, optional

If given and set to True, the temperature array is in addition to being returned also stored in the active Transport() object.

Returns:
temperature : (N) ndarray

Contains N temperature linear samplings in units of K. The parameters temperature_min, temperature_max and temperature_steps in param.yml set the maximum and minimum temperature and its number of steps.

setup_scattering(self, dos=None, dos_energies=None, select_scattering=None)

Selects which how to set up the carrier scattering.

Parameters:
dos : ndarray
Dimension: (N,M)

Array containing the partial density of states in units of 1/eV/AA^3, where N is the band index and M is the energy index.

dos_energies : ndarray
Dimension: (M)

Array containing the energy in eV at M samplings where the density of states is calculated.

select_scattering : ndarray
Dimension: (12)

Array containing integers. Set to 1 to select the scattering, 0 to exclude. The variables in select_scattering are set in the bandstructure configuration file, one value for each scattering and band. See notes below for the currrently available scattering mechnisms.

Returns:
None
transport.acceptor_ionization(number, energy, degen, e_fermi, beta)

Returns the number of ionized acceptors.

Parameters:
number : float

Number of acceptors.

energy : float

The energy in eV where the acceptor compensation is to be evaluated.

degen : float

The acceptor degeneration number.

e_fermi : float

The Fermi level in eV.

beta : float

The beta (1/kT) factor in eV.

Returns:
float

The acceptor ionization compensation.

transport.donor_ionization(number, energy, degen, e_fermi, beta)

Returns the number of ionized donors.

Parameters:
number : float

Number of donors.

energy : float

The energy in eV where the donor compensation is to be evaluated.

degen : float

The donor degeneration number.

e_fermi : float

The Fermi level in eV.

beta : float The beta (1/kT) factor in eV.
Returns:
float

The donor ionization compensation.

transport.fermi_dist(e, e_fermi, beta)

Returns the Fermi Dirac distribution function (without spin degeneracy).

Parameters:
e : float

The energy in eV where the Fermi Dirac distribution is to be evaluated.

e_fermi : float

The Fermi level in eV.

beta : float

The beta factor (1/kT) in eV.

Returns:
float

The value of the Fermi function (without spin degeneracy).

transport.fetch_chempot_from_etas(temperature, etas)

Calculate the chemical potential from eta and the temperature.

Parameters:
temperature : float

The temperature in K.

etas : ndarray
Dimension: N

The unitless chemical potential, \\eta for N steps.

Returns:
chempots : ndarray
Dimension: N

The chemical potentials in units of eV.