Mobility¶
- class Mobility(configuration, electron_phonon_coupling=None, kpoints=None, method=None, temperature=None, phonon_modes=None, electron_bands=None, fermi_shift=None, energies=None, inverse_relaxation_time=None, mobility_object=None, integration_method=None, refinement=None, relaxation_time_approximation=None, calculate_hall_coefficients=None, use_kpoint_symmetry=None, energy_broadening=None)¶
Analysis class for calculating the mobility for a bulk configuration.
- Parameters:
configuration (
BulkConfiguration
) – The bulk configuration for which to calculate the mobility.electron_phonon_coupling (
ElectronPhononCoupling
) – An electron-phonon coupling object used for calculating mobilities. Whenmethod=Full
,electron_phonon_coupling
must be provided.method (
Full
|Isotropic
.) – Keyword specifying if the results should be calculated with the full electron-phonon coupling including angular dependence (Full
) or with an isotropic scattering rate (Isotropic
). Whenmethod=Full
,electron_phonon_coupling
must be provided. Whenmethod=Isotropic
,kpoints
must be provided together withenergies
andinverse_relaxation_time
.kpoints – List of fractional k-points. When
method=Isotropic
,kpoints
must be provided. Default: The Monkhorst-Pack grid used for the self-consistent calculation.temperature (PhysicalQuantity of type temperature) – The temperature for the thermal smearing of the Bose and Fermi distributions. Default:
300 * Kelvin
phonon_modes (list of ints |
All
) – Phonon modes to include as a list of indices orAll
. Default:All
(Include all phonon modes available in theelectron_phonon_coupling
)electron_bands (list of int |
All
) – The band indices of the Bloch states to include. Default:All
(Include all bands available in theelectron_phonon_coupling
)fermi_shift (PhysicalQuantity of type energy) – The Fermi shift. Default:
0.0 * eV
energies (PhysicalQuantity of type energy) – List of energies for which to define the scattering rate. This parameter is only used, if
method=Isotropic
. Default:numpy.linspace(-0.5,0.5,100)*eV
inverse_relaxation_time (PhysicalQuantity of type energy) – List of scattering rates corresponding to the provided energies, or a constant scattering rate. If a list is provided the length must be the same as the
energies
. If amobility_object
is also provided, theinverse_relaxation_time
will be added to the scattering rate obtained from themobility_object
. This parameter is only used ifmethod=Isotropic
. Default:0.0/Second
mobility_object (
Mobility
) – A mobility object calculated with theFull
method. This can be used to calculate the scattering rate. If ainverse_relaxation_time
is also provided, theinverse_relaxation_time
will be added to the scattering rate obtained from themobility_object
.integration_method (
GaussianBroadening()
|TetrahedronMethod
) – The method to use for calculating the q-integral. Default:GaussianBroadening(3e-2 * eV)
refinement (Positive int) – The number of times the q-grid is refined in each direction. Default:
1
(no interpolation)calculate_hall_coefficients (bool) – Boolean to determine if the Hall coefficients should be calculated or not. Default:
True
use_kpoint_symmetry (bool) – Boolean to determine if symmetries are used to reduce k-point sampling. Only used for
method=Isotropic
,method=Full
uses electron phonon coupling. Default:True
.energy_broadening (PhysicalQuantity of type energy) – The width of the Gaussian function approximating the delta-function. Default:
3e-2 * eV
Deprecated: from v2018.0relaxation_time_approximation (not used) – Deprecated: from v2017.0, should no longer be used.
- calculateThermalVelocity(contribution=None, direction=None, fermi_shift=None, temperature=None)¶
Calculates the thermal velocity of electrons and holes.
- Parameters:
contribution (
Hole
|Electron
|All
) – The contribution to the thermal velocity. This can be eitherAll
,Hole
orElectron
. IfAll`
, results forHole
andElectron
will be returned. Default:All
direction (list or numpy.array of length 3.) – The direction of the velocity in Cartesian coordinates. Default: [1, 0, 0]
fermi_shift (PhysicalQuantity of type energy) – Parameter to change the Fermi energy in the calculation of the thermal velocity.
temperature (
PhysicalQuantity
of type temperature) – The temperature for the thermal smearing of the Fermi distribution. Default: The temperature set on this Mobility object.
- Returns:
(v, n, band_edges), where v is the calculated thermal velocity, n is the carrier concentration, and band_edges is the energy difference between the Fermi level (including the specified fermi shift) and carrier band edge (conduction band for electrons and valence band edge for holes.) If contribution=``All`` results are returned for Hole, Electron contribution as the first and second index.
- Return type:
PhysicalQuantity of unit length per time, PhysicalQuantity of unit inverse volume, PhysicalQuantity of unit energy.
- carrierDensities(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the carrier density. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated carrier density. If ‘contribution’ is
Hole
orElectron
, the hole or electron carrier density is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron carrier densities as the first and second element. In case ofSum
, the total carrier density is returned.- Return type:
PhysicalQuantity with the unit
Meter**-3
- conductivity(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the conductivity. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated conductivity. If ‘contribution’ is
Hole
orElectron
, the hole or electron conductivity is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron conductivities as the first and second element. In case ofSum
, the total conductivity is returned.- Return type:
PhysicalQuantity with the unit
Siemens / Meter
- conductivityTensor(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the conductivity tensor. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated conductivity tensor. If ‘contribution’ is
Hole
orElectron
, the hole or electron conductivity tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron conductivity tensors as the first and second element. In case ofSum
, the total conductivity tensor is returned.- Return type:
PhysicalQuantity with the unit
Siemens / Meter
- conductivityTensorConstantMeanFreePath(mean_free_path, contribution=None)¶
- Parameters:
mean_free_path (PhysicalQuantity of unit length) – The constant mean-free-path.
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the conductivity tensor obtained from a constant mean-free-path. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated conductivity tensor assuming a constant mean-free-path. If ‘contribution’ is
Hole
orElectron
, the hole or electron conductivity tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron conductivity tensors as the first and second element. In case ofSum
, the total conductivity tensor is returned.- Return type:
PhysicalQuantity with the unit
Meter / Siemens
- conductivityTensorConstantRelaxationTime(relaxation_time, contribution=None)¶
- Parameters:
relaxation_time (PhysicalQuantity of unit time) – The constant relaxation_time.
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the conductivity tensor obtained from a constant relaxation time. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated conductivity tensor assuming a constant relaxation time. If ‘contribution’ is
Hole
orElectron
, the hole or electron conductivity tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron conductivity tensors as the first and second element. In case ofSum
, the total conductivity tensor is returned. second element. In case ofSum
, the total conductivity tensor is returned.- Return type:
PhysicalQuantity with the unit
Meter / Siemens
- conductivityTensorOverConstantMeanFreePath(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the conductivity tensor/MFP, where MFP is the constant mean-free-path. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated conductivity tensor/MFP. If ‘contribution’ is
Hole
orElectron
, the hole or electron conductivity tensor/MFP is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron conductivity tensors/MFP as the first and second element. In case ofSum
, the total conductivity tensor is returned.- Return type:
PhysicalQuantity with the unit
Siemens / Meter^2
- conductivityTensorOverConstantRelaxationTime(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the conductivity tensor/tau, where tau is the constant relaxation time. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated conductivity tensor/tau. If ‘contribution’ is
Hole
orElectron
, the hole or electron conductivity tensor/tau is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron conductivity tensors/tau as the first and second element. In case ofSum
, the total conductivity tensor is returned.- Return type:
PhysicalQuantity with the unit
Siemens / (Meter * Second)
- eigenvaluesK()¶
- Returns:
The electron Bloch state energies for each k-point. The shape is (spin, k-points, electron bands).
- Return type:
PhysicalQuantity of type energy
- electronBands()¶
- Returns:
The band indices of the Bloch states included in the electron-phonon coupling calculation.
- Return type:
list of non-negative ints
- energies()¶
- Returns:
The user inputted energies list with shape (n_energies).
- Return type:
PhysicalQuantity of type energy.
- energyBroadening()¶
- Returns:
The width of the Gaussian function approximating the delta-function, if the integration method is GaussianBroadening. If the TetrahedronMethod is used, it returns 0.0*eV.
- Return type:
PhysicalQuantity of type energy
- energyZero()¶
The energy zero is equal to the Fermi level. For fixed spin moment calculations it is the average of the Fermi level for spin up and spin down.
- Returns:
The energy zero.
- Return type:
PhysicalQuantity
of type energy
- evaluate()¶
- Returns:
The calculated hole- and electron mobilities as the first and second element, respectively.
- Return type:
PhysicalQuantity with the unit
Meter**2 / (Volt * Second)
- fermiLevel(spin=None)¶
- Parameters:
spin (
Spin.Up
|Spin.Down
|Spin.All
) – The spin the Fermi level should be returned for. Must be eitherSpin.Up
,Spin.Down
, orSpin.All
. Only when the band structure is calculated with a fixed spin moment will the Fermi level depend on spin. Default:Spin.Up
- Returns:
The Fermi level in absolute energy.
- Return type:
PhysicalQuantity
of type energy
- fermiShift()¶
- Returns:
The Fermi shift.
- Return type:
PhysicalQuantity of type energy
- firstMomentTensor(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the first moment tensor. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated first moment tensor. If ‘contribution’ is
Hole
orElectron
, the hole or electron first moment tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron first moment tensors as the first and second element. In case ofSum
, the total first moment tensor is returned.- Return type:
PhysicalQuantity with the unit
Volt * Siemens / (Meter * Kelvin)
- generateEnergyDependentInverseLifeTime(energies, energy_broadening=None, mode_resolved=None)¶
Generator method for the inverse life time as a function of energy.
- Parameters:
energies (PhysicalQuantity of type energy) – The energies to calculate the scattering rate for, given as an energy list.
energy_broadening (PhysicalQuantity of type energy) – The energy broadening of delta-functions. Default:
3.0e-2*eV
mode_resolved (bool.) – Boolean determining if the phonon mode resolved data should be returned together with the mode summed result. Default: False.
- Returns:
The inverse life time. The shape is (n_energies,), where n_energies is the number of energies. If
mode_resolved
isTrue
, the phonon-mode resolved inverse life time will be returned as well with shape (n_modes, n_energies)- Return type:
PhysicalQuantity of type inverse time.
- generateEnergyDependentInverseMeanFreePath(energies, energy_broadening=None, use_life_time=None, mode_resolved=None)¶
Generator method for the inverse mean free path in the k-grid and as a function of energy.
- Parameters:
energies (PhysicalQuantity of type energy) – The energies to calculate the scattering rate for, given as an energy list.
energy_broadening (PhysicalQuantity of type energy) – The energy broadening of delta-functions. Default:
3.0e-2*eV
use_life_time (bool) – Boolean determining if the inverse life time should be used for calculating the mean free path. If
False
, the inverse relaxation time will be used. Default: False.mode_resolved (bool) – Boolean determining if the phonon mode resolved data should be returned together with the mode summed result. Default: False.
- Returns:
The inverse mean free path. The shape is (n_energies,), where n_energies is the number of energies. If
mode_resolved
isTrue
, the phonon-mode resolved inverse relaxation time will be returned as well with shape (n_modes, n_energies)- Return type:
PhysicalQuantity of type inverse length.
- generateEnergyDependentInverseRelaxationTime(energies, energy_broadening=None, mode_resolved=None)¶
Generator method for the inverse relaxation time as a function of energy.
- Parameters:
energies (PhysicalQuantity of type energy) – The energies to calculate the scattering rate for, given as an energy list.
energy_broadening (PhysicalQuantity of type energy) – The energy broadening of delta-functions. Default:
3.0e-2*eV
mode_resolved (bool.) – Boolean determining if the phonon mode resolved data should be returned together with the mode summed result. Default: False.
- Returns:
The inverse relaxation time. The shape is (n_energies,), where n_energies is the number of energies. If
mode_resolved
isTrue
, the phonon-mode resolved inverse relaxation time will be returned as well with shape (n_modes, n_energies)- Return type:
PhysicalQuantity of type inverse time.
- hallCoefficientTensor()¶
- Returns:
The calculated hole- and electron Hall-coefficient tensors as the first and second element of the first entry, respectively. The shape is (carrier type, induced electric field direction, applied charge current density direction, applied magnetic field direction).
- Return type:
PhysicalQuantity with the unit
Meter**3 / Coulomb
- hallConductivityTensor()¶
- Returns:
The calculated hole- and electron Hall-conductivity tensors as the first and second element of the first entry, respectively. The shape is (carrier type, charge current density direction, electric field direction, magnetic field direction).
- Return type:
PhysicalQuantity with the unit
Meter / Coulomb * Siemens**2
- integrationMethod()¶
:returns:The method to use for calculating the q-integral. :rtype
GaussianBroadening()
|TetrahedronMethod
- inverseLifeTime()¶
- Returns:
The calculated inverse life time with the shape (spin, phonon modes, k-points, electron bands).
- Return type:
PhysicalQuantity of type inverse time
- inverseMeanFreePath(use_life_time=None)¶
Calculates the inverse mean free path due to electron-phonon coupling.
- Parameters:
use_life_time (bool.) – Boolean determining if the inverse life time should be used for calculating the mean free path. If
False
, the inverse relaxation time will be used. Default: False.- Returns:
A phonon mode, k-point, and electron band resolved mean free time.
- Return type:
PhysicalQuantity of type inverse time of shape (phonon modes, k-points, electron bands).
- inverseRelaxationTime()¶
- Returns:
The calculated inverse relaxation time with the shape (spin, phonon modes, k-points, electron bands).
- Return type:
PhysicalQuantity of type inverse time
- inverseRelaxationTimeEnergyDependent()¶
- Returns:
The calculated or user inputted inverse relaxation time with the shape (n_energies).
- Return type:
PhysicalQuantity of type inverse time
- kpoints()¶
- Returns:
The fractional k-points. The shape is (k-points, 3).
- Return type:
list of lists of floats
- kpointsWeights()¶
- Returns:
The unreduced fractional k-points. The shape is (k-points).
- Return type:
list of lists of floats
- metatext()¶
- Returns:
The metatext of the object or None if no metatext is present.
- Return type:
str | None
- method()¶
- Returns:
The method used for the calculation. Either
Full
orIsotropic
.- Return type:
NLFlag
- mobility(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
.) – The contribution to the mobility. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated mobility. If ‘contribution’ is
Hole
orElectron
, the hole or electron mobility is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron mobilities as the first and second element. In case ofSum
, the total mobility is returned. Notice that the summed mobility is not necessarily equal to the sum of Hole and Electron contributions.- Return type:
PhysicalQuantity with the unit
Meter**2 / (Volt * Second)
- mobilityTensor(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the mobility tensor. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated mobility tensors. If ‘contribution’ is
Hole
orElectron
, the hole or electron mobility tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron mobility tensors as the first and second element. In case ofSum
, the total mobility tensor is returned. Notice that the summed mobility tensor is not necessarily equal to the sum of Hole and Electron contributions.- Return type:
PhysicalQuantity with the unit
Meter**2 / (Volt * Second)
- nlprint(stream=None)¶
Print a string containing an ASCII table useful for plotting the AnalysisSpin object.
- Parameters:
stream (python stream) – The stream the table should be written to. Default:
NLPrintLogger()
- phononEnergies()¶
- Returns:
The phonon energies. The shape is (phonon modes in electron-phonon coupling, q-points).
- Return type:
PhysicalQuantity of type energy
- phononModes()¶
- Returns:
The phonon modes included in the mobility calculation.
- Return type:
list of non-negative ints
- qpoints()¶
- Returns:
The unreduced fractional q-points. The shape is (q-points, 3).
- Return type:
list of lists of floats
- refinement()¶
- Returns:
The number of times the q-grid is refined in each direction.
- Return type:
Positive float
- resistivityTensor(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the resistivity tensor. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated resistivity tensor. If ‘contribution’ is
Hole
orElectron
, the hole or electron resistivity tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron resistivity tensors as the first and second element. In case ofSum
, the total resistivity tensor is returned.- Return type:
PhysicalQuantity with the unit
Meter / Siemens
- resistivityTensorConstantMeanFreePath(mean_free_path, contribution=None)¶
- Parameters:
mean_free_path (PhysicalQuantity of unit length.) – The constant mean-free-path.
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the resistivity tensor obtained from a constant mean-free-path. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated resistivity tensor assuming a constant mean-free-path. If ‘contribution’ is
Hole
orElectron
, the hole or electron resistivity tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron resistivity tensors as the first and second element. In case ofSum
, the total resistivity tensor is returned.- Return type:
PhysicalQuantity with the unit
Meter / Siemens
- resistivityTensorConstantRelaxationTime(relaxation_time, contribution=None)¶
- Parameters:
relaxation_time (PhysicalQuantity of unit time) – The constant relaxation_time.
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the resistivity tensor obtained from a constant relaxation time. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated resistivity tensor assuming a constant relaxation time. If ‘contribution’ is
Hole
orElectron
, the hole or electron resistivity tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron resistivity tensors as the first and second element. In case ofSum
, the total resistivity tensor is returned. second element. In case ofSum
, the total resistivity tensor is returned.- Return type:
PhysicalQuantity with the unit
Meter / Siemens
- resistivityTensorTimesConstantMeanFreePath(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the resistivity tensor*MFP, where MFP is the constant mean-free-path. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated resistivity tensor*MFP. If ‘contribution’ is
Hole
orElectron
, the hole or electron resistivity tensor*MFP is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron resistivity tensors*MFP as the first and second element. In case ofSum
, the total resistivity tensor*MFP is returned.- Return type:
PhysicalQuantity with the unit
Meter^2 / Siemens
- resistivityTensorTimesConstantRelaxationTime(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the resistivity tensor*tau, where tau is the constant relaxation time. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated resistivity tensor*tau. If ‘contribution’ is
Hole
orElectron
, the hole or electron resistivity tensor*tau is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron resistivity tensors*tau as the first and second element. In case ofSum
, the total resistivity tensor*tau is returned.- Return type:
PhysicalQuantity with the unit
Meter * Second / Siemens
- seebeckCoefficient(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the Seebeck coefficient. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated Seebeck coefficient. If ‘contribution’ is
Hole
orElectron
, the hole or electron Seebeck coefficient is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron Seebeck coefficient as the first and second element. In case ofSum
, the total Seebeck coefficient is returned.- Return type:
PhysicalQuantity with the unit
Volt / Kelvin
- seebeckCoefficientTensor(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the Seebeck coefficient tensor. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated Seebeck coefficient tensor. If ‘contribution’ is
Hole
orElectron
, the hole or electron Seebeck coefficient tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron Seebeck coefficient tensor as the first and second element. In case ofSum
, the total Seebeck coefficient tensor is returned.- Return type:
PhysicalQuantity with the unit
Volt / Kelvin
- setMetatext(metatext)¶
Set a given metatext string on the object.
- Parameters:
metatext (str | None) – The metatext string that should be set. A value of “None” can be given to remove the current metatext.
- temperature()¶
- Returns:
The temperature for the thermal smearing of the Bose and Fermi distributions.
- Return type:
PhysicalQuantity of type temperature
- thermalConductivity(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the electronic thermal conductivity. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated electronic thermal conductivity. If ‘contribution’ is
Hole
orElectron
, the hole or electron thermal conductivity is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron thermal conductivities as the first and second element. In case ofSum
, the total thermal conductivity is returned.- Return type:
PhysicalQuantity with the unit
J / (Second * Meter * Kelvin)
- thermalConductivityTensor(contribution=None)¶
- Parameters:
contribution (
All
|Sum
|Hole
|Electron
) – The contribution to the electronic thermal conductivity tensor. This can be eitherAll
,Sum
,Hole
, orElectron
. Default:All
- Returns:
The calculated electronic thermal conductivity tensor. If ‘contribution’ is
Hole
orElectron
, the hole or electron thermal conductivity tensor is returned. If ‘contribution’ isAll
, a list is returned with the calculated hole- and electron thermal conductivity tensors as the first and second element. In case ofSum
, the total thermal conductivity tensor is returned.- Return type:
PhysicalQuantity with the unit
J / (Second * Meter * Kelvin)
- uniqueString()¶
Return a unique string representing the state of the object.
- updateTransportCoefficients(energies=None, inverse_relaxation_time=None, mobility_object=None, temperature=None, fermi_shift=None, energy_broadening=None)¶
Function for updating the transport coefficients (mobility, conductivity, resistivity, Seebeck coefficient, Hall conductivity). This function can only be used if method=Isotropic.
Note that by calling this function you will change variables on the object it-self.
- Parameters:
energies (PhysicalQuantity of type energy) – List of energies for which to define the scattering rate.
inverse_relaxation_time (PhysicalQuantity of type energy) – List of scattering rates corresponding to the provided energies, or a constant scattering rate. If a list is provided the length must be the same as the
energies
. If amobility_object
is also provided, theinverse_relaxation_time
will be added to the scattering rate obtained from themobility_object
.mobility_object (
Mobility
) – A mobility object calculated with theFull
method. This can be used to calculate the scattering rate. If ainverse_relaxation_time
is also provided, theinverse_relaxation_time
will be added to the scattering rate obtained from themobility_object
.temperature (PhysicalQuantity of type temperature) – The temperature to use.
fermi_shift (PhysicalQuantity of type energy) – The Fermi shift.
energy_broadening (PhysicalQuantity of type energy.) – The energy broadening of delta-functions to use
- Returns:
Dictionary with all the updated transport coefficients, or list of dictionaries if the input temperature and/or fermi_shift was a list (also returns the combined index list of fermi_shifts, temperature in this case).
- Return type:
dict.
- useKpointSymmetry()¶
- Returns:
Whether the used k-points should be reduced by symmetries.
- Return type:
bool
- velocitiesK()¶
- Returns:
The electron Bloch velocities for each k-point. The shape is (spin, k-points, electron bands, velocity components).
- Return type:
PhysicalQuantity with the unit
Meter / Second
Usage Examples¶
Calculate the mobility of graphene including the full angular dependence of the scattering rates and with the electron-phonon coupling and relaxation time calculated from first-principles:
# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------
lattice = Hexagonal(2.4612*Angstrom, 6.709*Angstrom)
elements = [Carbon, Carbon]
fractional_coordinates = [[0.0 , 0.0 , 0.5],
[0.333333333333, 0.666666666667, 0.5]]
bulk_configuration = BulkConfiguration(
bravais_lattice=lattice,
elements=elements,
fractional_coordinates=fractional_coordinates
)
# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
numerical_accuracy_parameters = NumericalAccuracyParameters(
k_point_sampling=(5, 5, 1),
)
calculator = LCAOCalculator(
numerical_accuracy_parameters=numerical_accuracy_parameters,
)
bulk_configuration.setCalculator(calculator)
bulk_configuration.update()
# -------------------------------------------------------------
# Hamiltonian derivatives
# -------------------------------------------------------------
hamiltonian_derivatives = HamiltonianDerivatives(
bulk_configuration,
repetitions=(5, 5, 1),
)
# -------------------------------------------------------------
# Dynamical matrix
# -------------------------------------------------------------
dynamical_matrix = DynamicalMatrix(
bulk_configuration,
repetitions=(5, 5, 1),
max_interaction_range=10*Angstrom,
)
# -------------------------------------------------------------
# Electron Phonon Coupling
# -------------------------------------------------------------
k_a = numpy.linspace(0.323333, 0.343333, 11)
k_b = numpy.linspace(0.323333, 0.343333, 11)
k_c = numpy.linspace(0, 0, 1)
kpoints = [[a, b, c] for a in k_a for b in k_b for c in k_c]
q_a = numpy.linspace(-0.02, 0.02, 11)
q_b = numpy.linspace(-0.02, 0.02, 11)
q_c = numpy.linspace(0, 0, 1)
qpoints = [[a, b, c] for a in q_a for b in q_b for c in q_c]
electron_phonon_coupling = ElectronPhononCoupling(
configuration=bulk_configuration,
dynamical_matrix=dynamical_matrix,
hamiltonian_derivatives=hamiltonian_derivatives,
kpoints_fractional=kpoints,
qpoints_fractional=qpoints,
electron_bands=[3, 4],
phonon_modes=All,
energy_tolerance=0.03*eV,
initial_state_energy_range=[-100,100]*eV,
store_dense_coupling_matrices=False,
)
# -------------------------------------------------------------
# Mobility
# -------------------------------------------------------------
mobility = Mobility(
configuration=bulk_configuration,
method=Full,
electron_phonon_coupling=electron_phonon_coupling,
)
nlsave('graphene_method_full.nc', mobility)
Note that the above script only shows the principal work flow for calculating the mobility. For converged calculations, one will often need to use more k-points and q-points in the ElectronPhononCoupling object - see the paper [1] for details. In order to perform a mobility calculation using the Full
method, one needs to input an ElectronPhononCoupling object. While this will result in accurate calculations including the full angular dependece of the scattering rates and relaxation time, it is also a numerically challenging task because the ElectronPhononCoupling object needs to be calculated with many k- and q-points and in addition one needs the DynamicalMatrix and HamiltonianDerivatives objects.
An alternative approach to mobility calculations is available in QuantumATK. By specifying the method keyword to Isotropic
and providing an inverse relaxation time like:
mobility = Mobility(
bulk_configuration,
method=Isotropic,
kpoints=MonkhorstPackGrid(10, 10, 10),
energies=numpy.linspace(-0.5, 0.5, 100)*eV,
inverse_relaxation_time=1e10*Second**-1)
it is possible to perform much faster calculations, since it is not required to have an ElectronPhononCoupling. Using the Isotropic
method the calculation of both the DynamicalMatrix and HamiltonianDerivatives objects can also be avoided.
Using the Isotropic
method will require knowledge of the inverse relaxation time (or scattering rate). This can either be specified as a constant inverse_relaxation_time=1e10 * Second**-1
or as an array with the same length as the provided energies inverse_relaxation_time=numpy.linspace(0, 1e12, 100) * Second**-1
. Knowledge of the inverse relaxation time can be obtained from the literature or it can be approximated from a previous Mobility calculation using the Full
method, i.e. calculated from an ElectronPhononCoupling object. This can be obtained as:
# Load a mobility object calculated with the Full method.
mobility = nlread('graphene_method_full.nc', Mobility)[0]
# Define an energy range.
energies=numpy.linspace(-0.5, 0.5, 100)*eV
# Calculate the inverse relaxation time.
inverse_relaxation_time = mobility.generateEnergyDependentInverseRelaxationTime(energies=energies)
The obtained inverse relaxation time can be input directly to a new Mobility calculation with the Isotropic
method. Alternatively, the old Mobility object can be provided as input to a new Mobility calculation:
# Load a mobility object calculated with the Full method.
mobility_full = nlread('graphene_method_full.nc', Mobility)[0]
# Perform and new mobility calculation with the Isotropic method.
mobility = Mobility(
bulk_configuration,
method=Isotropic,
energies=numpy.linspace(-0.5,0.5,100)*eV,
mobility_object=mobility_full)
If both the inverse_relaxation_time
and mobility_object
are provided, the resulting inverse relaxation time will be the sum of the provided and the one generated from the mobility_object
.
A full script for a Mobility calculation using the Isotropic
method is provided below using the constant inverse relaxation time approximation:
# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------
lattice = Hexagonal(2.4612*Angstrom, 6.709*Angstrom)
elements = [Carbon, Carbon]
fractional_coordinates = [[0.0 , 0.0 , 0.5],
[0.333333333333, 0.666666666667, 0.5]]
bulk_configuration = BulkConfiguration(
bravais_lattice=lattice,
elements=elements,
fractional_coordinates=fractional_coordinates
)
# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
numerical_accuracy_parameters = NumericalAccuracyParameters(
k_point_sampling=(5, 5, 1),
)
calculator = LCAOCalculator(
numerical_accuracy_parameters=numerical_accuracy_parameters,
)
bulk_configuration.setCalculator(calculator)
bulk_configuration.update()
# -------------------------------------------------------------
# Mobility
# -------------------------------------------------------------
kpoint_grid = RegularKpointGrid(
ka_range=[0.32, 0.34],
kb_range=[0.32, 0.34],
kc_range=[0.0, 0.0],
na=15,
nb=15,
nc=1,
)
mobility_constant_relaxation_time = Mobility(
configuration=bulk_configuration,
method=Isotropic,
energies=numpy.linspace(-0.05, 0.05, 100)*eV,
inverse_relaxation_time=1e12*Second**-1,
electron_bands=[3,4],
kpoints=kpoint_grid,
temperature=300*Kelvin,
)
nlsave('graphene_constant_relaxation_time.nc', mobility_constant_relaxation_time)
mobility_isotropic_scattering_rate.py
The script below shows an example of how to calculate the mobility with an energy dependent inverse relaxation time:
# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------
lattice = Hexagonal(2.4612*Angstrom, 6.709*Angstrom)
elements = [Carbon, Carbon]
fractional_coordinates = [[0.0 , 0.0 , 0.5],
[0.333333333333, 0.666666666667, 0.5]]
bulk_configuration = BulkConfiguration(
bravais_lattice=lattice,
elements=elements,
fractional_coordinates=fractional_coordinates
)
# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
numerical_accuracy_parameters = NumericalAccuracyParameters(
k_point_sampling=(5, 5, 1),
)
calculator = LCAOCalculator(
numerical_accuracy_parameters=numerical_accuracy_parameters,
)
bulk_configuration.setCalculator(calculator)
bulk_configuration.update()
# -------------------------------------------------------------
# Mobility
# -------------------------------------------------------------
kpoint_grid = RegularKpointGrid(
ka_range=[0.32, 0.34],
kb_range=[0.32, 0.34],
kc_range=[0.0, 0.0],
na=15,
nb=15,
nc=1,
)
# Setup energy list.
energies = numpy.linspace(-0.05, 0.05, 100)*eV,
# Setup inverse relaxation time as an array with the same length as the energies.
inverse_relaxation_time = abs(numpy.linspace(-1e12, 1e+12, 100))*Second**-1
mobility_linear_relaxation_time = Mobility(
configuration=bulk_configuration,
method=Isotropic,
energies=energies,
inverse_relaxation_time=inverse_relaxation_time,
electron_bands=[3,4],
kpoints=kpoint_grid,
temperature=300*Kelvin,
)
nlsave('graphene_linear_relaxation_time.nc', mobility_linear_relaxation_time)
Notes¶
The mobility module in QuantumATK enables you to calculate the phonon-limited mobility using the semi-classical Boltzmann transport equation (BTE). There are two principle methods to use:
In order to calculate the mobility from first-principles including the full angular dependence of the electron-phonon scattering, you must use the
Full
method. In that case you need a BulkConfiguration and a ElectronPhononCoupling object. See Ref. [1] to get a description of the background theory and results obtained with the Mobility object.Assuming an isotropic inverse relaxation time, one can avoid integrations over k,q-space and instead integrate over energy. This leads to much faster mobility calculations since the ElectronPhononCoupling object is no longer needed. Instead you need to provide an inverse relaxation time to the Mobility calculation. The implementation in QuantumATK of the isotropic scattering rate method essentially follows BoltzTrap, Ref. [2]. Major differences to the description in Ref. [2] are:
QuantumATK allows for an energy dependent inverse relaxation time.
The band velocities in QuantumATK are calculated using first order pertubation theory and are thus exact and without any problems at band crossings.
The energy integrations are performed using the tetrahedron method [3].