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
bsobject

A Band() object.

latticeobject

A Lattice() object.

paramobject

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
temperaturefloat

The temperature in K.

chempotfloat

The chemical potential in eV.

dosndarray, 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_energiesndarray, optional
Dimension: (M)

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

band_decompboolean

Return a band decomposed carrier concentration or not.

defect_ionizationboolean

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_typendarray
Dimension: (N)

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

p_typendarray
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
bsA Band() object containing the band structure.
temperaturesndarray, optional
Dimension: (N)

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

chempotsndarray, 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, lorenzndarray, 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
storeboolean, optional

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

Returns
chempotndarray
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
chempotndarray
Dimension: (N)

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

temperaturefloat

The temperature in K.

Returns
etandarray
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
trobject, 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
storeboolean, 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
dosndarray
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_energiesndarray
Dimension: (M)

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

select_scatteringndarray
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
numberfloat

Number of acceptors.

energyfloat

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

degenfloat

The acceptor degeneration number.

e_fermifloat

The Fermi level in eV.

betafloat

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
numberfloat

Number of donors.

energyfloat

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

degenfloat

The donor degeneration number.

e_fermifloat

The Fermi level in eV.

betafloat 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
efloat

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

e_fermifloat

The Fermi level in eV.

betafloat

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
temperaturefloat

The temperature in K.

etasndarray
Dimension: N

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

Returns
chempotsndarray
Dimension: N

The chemical potentials in units of eV.