bandstructure module

This module, bandstructure.py contains the setup and calculation of bandstructure related properties. This also include for instance the calculation of the density of states.

Contains routines to set up the bandstructure.

class bandstructure.Bandstructure(lattice, param, location=None, filename=None)

Bases: object

Handles the read in, generation and storrage of the bandstructure and its relevant parameters.

Parameters:
lattice : object

A Lattice() object.

param : object

A Param() object.

filename : string, optional

Filename and relative path for the input file that is to be read.

Notes

The YAML general and bandstructure configuration (param.yml and bandparams.yml, respectively by default) files are read and the setup of the bandstructure is determined from these files.

If an external band structure is supplied, i.e. from VASP (vasprun.xml is sufficient) the bandparams file is still needed as it contains parameters used to set up the scattering properties etc. at a later stage.

Presently the following combination is possible:

  • Parametrized bands (parabolic, non-parabolic, Kane and a k^4 model)
  • VASP input from the VASP XML file (only this file is needed)
  • Numpy input files

A combination of parametrized and tight binding bands is possible.

If another code is to be used to provide the bandstructure parameters, please consult interface and use that as a base to write a new bandstructure_yourcode function in that module and include a call to this function in the initializer below.

Todo

Add the posibility to add parameterized bands to the e.g. VASP bandstructure. Usefull for instance to investigate defects etc. that was not included in the calculation.

Todo

Add interfaces to other first principle codes.

apply_scissor_operator(self, energies=None)

Apply scissor operator to blue or redshift the conduction band energies.

Parameters:
energies : ndarray, optional
Dimension: (N,M)

The energy dispersion for N bands at M k-points. Defaults to the energies stored in the current Bandstructure() object.

Returns:
None

Notes

Warning

Please beware that this is a rather brutal (but usefull) operation. Make sure that the valence band maximum and conduction band minimum is fetched correctly. One way to check that this works is to plot the energies along a representative direction before and after the scissor operator have been executed.

calc_density_of_states(self, return_data=False, num_samples=None, auto_scale=False, transport=False, integral_method=None, interpol_method=None, interpol_type=None)

Calculate the density of states.

Parameters:
return_data : boolean, optional

If True, return the density of states data instead of storing it in the current Bandstructure() object. If False, set dos_energies, dos_partial and dos_total in the current Bandstructure() object.

num_samples : integers, optional

Number of energy samples. Necessary if auto_scale is set. Otherwise the dos_num_samples in the parameter file is used.

auto_scale : boolean, optional

If True, auto scale the energy axis to cover the supplied band structure. Otherwise the dos_e_min and dos_e_max from the parameter file is used to set up the energy range unless transport is set which overrides this.

transport : bool, optional

Set to True if the density of states calculated are to be used in transport calculations (i.e. to set up the scattering). This ensures that the energy range covers the requested range of chemical potential pluss / minus ‘transport_energycutband’ and is then padded with zeros for the remaining values down and up to the minimum and maximum values present in the energies entry of the Bandstructure() object. Using this option make it possible to calculate the density of states on a fine grid in the relevant transport region.

integral_method : string, optional

The integration method used to calculate the DOS:

“trapz” trapeziodal integration, uses scipy.integrate.trapz()
“simps” simpson integration, uses scipy.integrate.simps()
“romb” romberb integration, uses scipy.integrate.romb()
“tetra” tetrahedron method, uses the linear tetrahedron method implemented in Spglib (up to version 1.7.4) by A. Togo.

If not supplied, set according to dos_integrating_method in the general configuration file.

Returns:
dos_energies : ndarray
Dimension: (N)

Array containing the density of states energies, where N is num_samples or set by the sampling determined in the general configuration file if auto_scale is set to False.

dos_total : ndarray
Dimension: (N)

Array containing the total density of states per volume unit (units 1 / eV / AA ^ 3) at N sampled energy points, where N is determined from dos_energies.

dos_partial : ndarray
Dimension: (M, N)

Array containing the partial (for each band index M) density of states per volume unit (1 / eV / AA ^ 3) at N sampled energy points, where N is determined from dos_energies.

calc_effective_mass(self)

Calculates the effective mass tensor. Currently the effective mass tensor is not diagonalized.

Parameters:
None
Returns:
None

Notes

Upon complettion the effective mass is stored in the current Bandstructure() object.

Also, the velocities have to be precalculated before calling this routine.

calc_velocities(self, velocities=None, store=True)

Calculate the electron group velocities from the electron energy dispersion

Parameters:
velocities : ndarray, optional
Dimension: (N, M)

Contains the group velocity along a specific direction for N bands and M k-points. If supplied the velocities of the velocities are calculated, or more specifically the inverse effective mass tensor (without prefactor)

store : boolean, optional

If True, store the calculated velocities in the active Bandstructure() object, else return the velocity array. Defaults to True.

Returns:
velocities : ndarray, optional
Dimension: (N, 3, M)

The velocities of the velocity. Only returned if store is set to False.

Notes

Does not call any interpolation routines such that the velocities can be extracted directly from the electron energy dispersion by numerical differentiation. Uses the gradient() from NumPy.

Overwrites any entry of exising velocities in bs and sets gen_velocities to False if velocities is not supplied.

check_dos_energy_range(self, remin, remax)

Check that the energy grid of the density of states covers the range of the supplied paramters.

Parameters:
remin : float

The energy in eV for the lowest requested energy.

remax : float

The energy in eV for the highest requested energy.

Returns:
within : boolean

True if the endpoints are within the energy range of the stored density of states, False ortherwise.

check_energyshifts(self)

Check the energy shift parameters in the parameter file for consistency.

Parameters:
None
Returns:
None
check_velocities(self, cutoff=None)

Check that there exists realistic values for the band velocities.

Parameters:
cutoff : float, optional

Cutoff value for the test in eVAA units. Defaults to 0.01.

Returns:
boolean

True if values are above cutoff, False otherwise.

fetch_dos_energies(self, e_min=None, e_max=None, num_samples=None, auto_scale=False)

Set up the energy array for density of states calculations.

Parameters:
e_min : float

The mininum energy in eV.

e_max : float

The maximum energy in eV.

num_samples : integer

The N number of samples between e_min and e_max.

auto_scale : boolean

If True, set the energy scale from the supplied band structure, otherwise set the scale according to e_min and e_max.

Returns:
ndarray
Dimension: (N)

The N energies in eV where density of states calculations are to be performed.

fetch_energies_along_line(self, kstart, kend, samplings=None, itype=None, itype_sub=None)

Calculate the energy dispersions along specific k - points.

Parameters:
kstart : ndarray
Dimension: (3)

Direct k - point coordinate of the start point of line extraction.

kend : ndarray
Dimension: (3)

Direct k - point coordinate of the end point of line extraction.

samplings : int, optional

The number of N samples along the line. If not specified the variable is set to the the num_kpoints_along_line parameter in params.yml

itype : string, optional
Can be any of:
{“linearnd”, “interpn”, “rbf”, “wildmagic”, “skw”}

The type of interpolate method to use. If not set, the parameter dispersion_interpolate_method in the general configuration file sets this.

itype_sub : string, optional
Can be any of:
{“nearest”, “linear”}, when itype is set to interpn.
{“multiquadric”, “inverse_multiquadric”, “gaussian”, “linear”,
“cubic”, “quintic”, “thin_plate”}, when itype is set to rbf
and when the Scipy variety is used.
{“trilinear, tricubic_exact, tricubic_bspline, akima”},
when itype is set to wildmagic.

The subtype of the interpolation method.

Returns:
energies : ndarray
Dimension: (N, M)

The energy dispersions in eV along a line for N bands and M k - points, defined by the num_kpoints_along_line in the general configuration file.

kpts : ndarray
Dimension: (N, 3)

The k - point mesh for the line extraction in cartesian coordinates.

See also

interpolate

Notes

The routine interpolate() is used to perform the interpolation of the data along the line.

fetch_energies_at_kpoints(self, kpoint_mesh, itype=None, itype_sub=None)

Calculate the energy dispersions at specific k - points by interpolation.

Parameters:
kpoint_mesh : ndarray
Dimension: (N, 3)

The N k - point coordinates in cartesian coordinates.

itype : string, optional
Can be any of:
{“linearnd”, “interpn”, “rbf”, “wildmagic”, “skw”}

The type of interpolate method to use. If not set, the parameter dispersion_interpolate_method in the general configuration file sets this.

itype_sub : string, optional
Can be any of:
{“nearest”, “linear”}, when itype is set to interpn.
{“multiquadric”, “inverse_multiquadric”, “gaussian”, “linear”,
“cubic”, “quintic”, “thin_plate”}, when itype is set to rbf
and when the Scipy variety is used.
{“trilinear, tricubic_exact, tricubic_bspline, akima”},
when itype is set to wildmagic.

The subtype of the interpolation method.

Returns:
energies : ndarray
Dimension: (N, M)

The energies in eV for each of the N bands and M k - points.

See also

interpolate

Notes

The routine interpolate() is used to perform the interpolation.

fetch_min_max_energy(self)

Returns the min and max of the energy in the current Bandstructure() object.

Parameters:
None
Returns:
emin : float

The minimum energy in eV located in the current Bandstructure() object.

emax : float

The maximum energy in eV located in the current Bandstructure() object.

fetch_velocities_along_line(self, kstart, kend, itype=None, itype_sub=None)

Calculate the velocity dispersion along a line in reciprocal space.

Parameters:
kstart : ndarray, optional
Dimension: (3)

The start k - point in cartesian coordinates.

kend : ndarray
Dimension: (3)

The end k - point in cartesian coordinates.

itype : string, optional
Can be any of:
{“linearnd”, “interpn”, “rbf”, “wildmagic”, “skw”}

The type of interpolate method to use. If not set, the parameter dispersion_interpolate_method in the general configuration file sets this.

itype_sub : string, optional
Can be any of:
{“nearest”, “linear”}, when itype is set to interpn.
{“multiquadric”, “inverse_multiquadric”, “gaussian”, “linear”,
“cubic”, “quintic”, “thin_plate”}, when itype is set to rbf
and when the Scipy variety is used.
{“trilinear, tricubic_exact, tricubic_bspline, akima”},
when itype is set to wildmagic.

The subtype of the interpolation method.

Returns:
velocities : ndarray
Dimension: (N, 3, M)

The group velocity in units of eVAA along a line for N bands and M k - points, defined by the num_kpoints_along_line in the general configuration file.

kpts : ndarray
Dimension: (M, 3)

The kpoints where the group velocity was calculated.

See also

interpolate

Notes

The interpolate() is used to perform the interpolation of the data along the line.

Warning

The factor \\hbar^{-1} is not returned and need to be included externally.

fetch_velocities_at_kpoints(self, kpoint_mesh, itype=None, itype_sub=None)

Calculate the velocity dispersions at specific k - points.

Parameters:
kpoint_mesh : ndarray
Dimension: (N, 3)

The k - point mesh for extraction in cartesian coordinates.

itype : string, optional
Can be any of:
{“linearnd”, “interpn”, “rbf”, “wildmagic”, “skw”}

The type of interpolate method to use. If not set, the parameter dispersion_interpolate_method in the general configuration file sets this.

itype_sub : string, optional
Can be any of:
{“nearest”, “linear”}, when itype is set to interpn.
{“multiquadric”, “inverse_multiquadric”, “gaussian”, “linear”,
“cubic”, “quintic”, “thin_plate”}, when itype is set to rbf
and when the Scipy variety is used.
{“trilinear, tricubic_exact, tricubic_bspline, akima”},
when itype is set to wildmagic.

The subtype of the interpolation method.

Returns:
velocities : ndarray
Dimension: (N, 3, M)

The group velocity in units of eVAA at the N bands for M k - points.

See also

interpolate

Notes

The interpolate() is used to perform the interpolation.

Warning

The factor \\hbar^{-1} is not returned and need to be included externally.

gen_analytic_band(self, band)

Generate an analytical energy and velocity dispersion.

Parameters:
band : int

The band index used to fetch band parameters in bandparams.yml.

Returns:
energy : ndarray
Dimension: (M)

The energy dispersion in eV at M k-points.

velocity : ndarray
Dimension: (M,3)

The group velocity in eVAA of the energy dispersion (without the \\hbar^{-1} factor).

gen_bands(self)

Generates the set of energy and velocity dispersions.

Parameters:
None
Returns:
energies : ndarray
Dimension: (N,M)

Contains the energy dispersions in eV for N bands at M k-points.

velocities : ndarray
Dimension: (N,M,3)

Contains the group velocities in eVAA of the energy dispersions (without the \\hbar^{-1} factor).

tb_band : ndarray
Dimension: (N)

Contains boolean values of True for band indexes that are tight binding bands, False otherwise.

gen_dos(self)

Generates the density of states for the analytic models

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

Contains the density of states for N bands at M dos_num_samples from dos_e_min to dos_e_max. The number of samplings and their range is set it general configuration file. Units are per volume unit, 1/eV/AA^3.

dos_energies : ndarray
Dimension: (M)

Contains the energy samplings of which dos was calculated in units of eV.

Notes

Currently only the parabolic models are implemented.

Todo

Also implement the non-parabolic alpha models

interpolate(self, iksampling=None, ienergies=True, ivelocities=False, itype=None, itype_sub=None, kpoint_mesh=None, store_inter=False, energies=None)

Interpolates the energies and velocity dispersion.

Parameters:
iksampling : ndarray, optional
Dimension: (3)

Contains the interpolated k - point mesh sampling values. Does not have to be set if line extraction performed (full grid is instead supplied in line_mesh).

ienergies : boolean

If True, interpolate the energies, if not, do not.

ivelocities : boolean

If True, interpolate the velocities, if not, do not

itype : string, optional

Can be any of: {“linearnd”, “interpn”, “rbf”, “wildmagic”, “skw”} The type of interpolate method to use. If not set, the parameter dispersion_interpolate_method in the general configuration file sets this.

itype_sub : string, optional
Can be any of:
{“nearest”, “linear”}, when itype is set to interpn.
{“multiquadric”, “inverse_multiquadric”, “gaussian”, “linear”,
“cubic”, “quintic”, “thin_plate”}, when itype is set to rbf
and when the Scipy variety is used.
{“trilinear, tricubic_exact, tricubic_bspline, akima”},
when itype is set to wildmagic.

The subtype of the interpolation method.

kpoint_mesh : ndarray, optional
Dimension: (M, 3)

Supplied k - point grid for extraction as an alternative to iksampling. Should be supplied in cartesian coordinates and should not extend the border of the original grid. Usefull for line extraction etc.

store_inter : boolean, optional

Store the new interpolated energies and velocities in the supplied object. Also modifies the current Lattice() object with the new grid etc. if that has been modified. Defaults to False.

energies : ndarray, optional
Dimension: (N,J)

An input array containing the energies (or some other) quantity that can fly through with the same structure, e.g. the velocities along a certain direction for N bands and J k-points.

Returns:
ien, ivel : ndarray, ndarray
Dimension: (N,M), (N,3,M)

The energy dispersions in eV, and group velocities in eVAA along indexes each axis of the reciprocal basis are returned for N bands and M new k - points if velocities is supplied, or if the gen_velocities tag is set to True in the current Bandstructure() object.

ien, False, False, False : ndarray, boolean, boolean, boolean
Dimension: (N,M)

The energy dispersions in eV for N bands and M new k-points if velocities is not supplied or gen_velocities is set to False.

See also

linearnd
interpn
rbf

Notes

Todo

DOCUMENT THE DIFFERENT INTERPOLATION SCHEMES, OR AT LEAST ADD PROPER REFERENCES.

locate_band_gap(self)

Calculate the band gap.

Parameters:
None
Returns:
float

The band gap in eV

locate_bandgap(self, energies=None, occ=None)

Locate the band gap.

Parameters:
energies : ndarray, optional
Dimension: (N,M)

The energy dispersion in eV for N bands at M k-points. Defaults to the energies stored in the current Bandstructure() object.

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

The occupancy for N bands at M k-points. Defaults to the occ stored in the current Bandstructure() object.

Returns:
vbm_energy : float

The valence band maximum in eV.

bandgap : float

The band gap in eV.

locate_cbm(self, energies, occ)

Locate the conduction band minimum.

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

The energy dispersion in eV for N bands at M k-points.

occ : ndarray
Dimension: (N,M)

The occupancy for N bands at M k-points.

Returns:
energy : float

The conduction band minimum in eV.

band : int

The band index of the conduction band minimum.

kpoint : int

The kpoint index of the conduction band minimum.

locate_vbm(self, energies, occ)

Locate the valence band maximum.

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

The energy dispersion in eV for N bands at M k-points.

occ : ndarray
Dimension: (N,M)

The occupancy for N bands at M k-points.

Returns:
energy : float

The valence band maximum in eV

band : int

The band index of the valence band maximum.

kpoint : int

The kpoint index of the valence band maximum.

bandstructure.gaussian(energy, energy_ref, smearing)

Returns the value of a Gaussian function.

Parameters:
energy : float

The energy in eV.

energy_ref : float

The reference energy in eV.

smearing : float

The smearing factor in eV.

Returns:
float

The value in eV.

bandstructure.non_parabolic_energy_1(k, effmass, a, scale, e0=0.0, kshift=None)

Calculates a energy dispersion, both parabolic and non-parabolic.

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point coordinates (cartesian) where the dispersion is to be evaluated.

effmass : ndarray
Dimension: (3)

Contains the effective mass along the three k-point directions. Only the diagonal components of the effective mass tensor is used. In units of the free electron mass.

a : ndarray
Dimension: (3)

The non parabolic coefficients in front of each k^2 direction which translates to a^2k^4 in the one dimensional case.

scale : float

The scale factor in front of the non-parabolic correction

e0 : float, optional

Shift of the energy scale in eV.

kshift : ndarray, optional
Dimension: (3)

The shift along the respective k-point vectors in cartesian coordinates.

Returns:
ndarray
Dimension: (N)

Contains the energy dispersion in eV at each N k-points.

Notes

This routines calculates the energy dispersion according to

System Message: WARNING/2 (E=\\frac{\\hbar^2 k^2}{2m}+ak^4. )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...=\\frac{\\hbar^2 k^2}{2m}+ak^4.\end{split} ! Missing { inserted. <inserted text> { l.14 ...=\\frac{\\hbar^2 k^2}{2m}+ak^4.\end{split} ! Missing } inserted. <inserted text> } l.14 ...=\\frac{\\hbar^2 k^2}{2m}+ak^4.\end{split} ! Missing { inserted. <inserted text> { l.14 ...=\\frac{\\hbar^2 k^2}{2m}+ak^4.\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 444 bytes). Transcript written on math.log.

Setting a to zero yields a parabolic dispersion.

bandstructure.non_parabolic_energy_2(k, effmass, a)

Calculates a non-parabolic energy dispersion.

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point cartesian coordinates where the dispersion is to be evaluated.

effmass : float

The effective mass in units of the free electron mass.

a : float

The \\alpha factor.

Returns:
ndarray
Dimension: (N)

Contains the energy in eV at each N k-points for each direction defined by the direction of the k-point unit axis.

Notes

This routine calculates the energy dispersion according to

System Message: WARNING/2 (E(1+\\alpha E)=\\frac{\\hbar^2k^2}{2m}, )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...pha E)=\\frac{\\hbar^2k^2}{2m},\end{split} ! Missing { inserted. <inserted text> { l.14 ...pha E)=\\frac{\\hbar^2k^2}{2m},\end{split} ! Missing } inserted. <inserted text> } l.14 ...pha E)=\\frac{\\hbar^2k^2}{2m},\end{split} ! Missing { inserted. <inserted text> { l.14 ...pha E)=\\frac{\\hbar^2k^2}{2m},\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 456 bytes). Transcript written on math.log.

where \\alpha is a parameter that adjust the non-parabolicity

Note that if m is negative (valence bands), the square root is undefined for k^2>=m/(2\\alpha \\hbar), which is a rather limited k-space volume. Consider (either m or \\alpha negative).

m=m_e, \\alpha=1.0 (E_g=1.0 \\mathrm{eV})
\\rightarrow |\\vec{k}| \\geq 0.26 \\mathrm{AA^{-1}}

m=0.1m_e, \\alpha=1.0 \\rightarrow |\\vec{k}|
\\geq 0.081 \\mathrm{AA^{-1}}

m=10m_e, \\alpha=1.0 \\rightarrow |\\vec{k}|
\\geq 0.81 \\mathrm{AA^{-1}}

m=m_e, \\alpha=10.0 (E_g=0.1 \\mathrm{eV})
\\rightarrow |\\vec{k}| \\geq 0.81 \\mathrm{AA^{-1}}

m=m_e, \\alpha=0.1 (E_g=10 \\mathrm{eV})
\\rightarrow |\\vec{k}| \\geq 0.081 \\mathrm{AA^{-1}}

For a simple cell of 10 \\mathrm{AA}, the BZ border is typically at 0.31 \\mathrm{AA^{-1}} and for a smaller cell, e.g. 3.1 \\mathrm{AA}, the BZ border is here at 1.0 \\mathrm{AA^{-1}}.

Warning

In order to be able to use all values of a, we return a linear E(\\vec{k}) in the undefined region (the last defined value of E(\\vec{k}) is used). This is highly unphysical, so we print a warning to notice the user

bandstructure.non_parabolic_energy_3(k, effmass, a, scale, e0=0.0, kshift=None)

Calculates a k^2 + k^6 energy dispersion.

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point coordinates (cartesian) where the dispersion is to be evaluated.

effmass : ndarray
Dimension: (3)

Contains the effective mass along the three k-point directions. Only the diagonal components of the effective mass tensor is used. In units of the free electron mass.

a : ndarray
Dimension: (3)

The non parabolic coefficients in front of each k^2 direction which translates to a^4k^8 in the one dimensional case.

scale : float

The scale factor in front of the non-parabolic correction

e0 : float, optional

Shift of the energy scale in eV.

kshift : ndarray, optional
Dimension: (3)

The shift along the respective k-point vectors in cartesian coordinates.

Returns:
ndarray
Dimension: (N)

Contains the energy dispersion in eV at each N k-points.

Notes

This routines calculates the energy dispersion according to

System Message: WARNING/2 (E=\\frac{\\hbar^2 k^2}{2m}+a^3k^6. )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...\frac{\\hbar^2 k^2}{2m}+a^3k^6.\end{split} ! Missing { inserted. <inserted text> { l.14 ...\frac{\\hbar^2 k^2}{2m}+a^3k^6.\end{split} ! Missing } inserted. <inserted text> } l.14 ...\frac{\\hbar^2 k^2}{2m}+a^3k^6.\end{split} ! Missing { inserted. <inserted text> { l.14 ...\frac{\\hbar^2 k^2}{2m}+a^3k^6.\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 460 bytes). Transcript written on math.log.

Setting a to zero yields a parabolic dispersion.

bandstructure.non_parabolic_energy_4(k, effmass, a, scale, e0=0.0, kshift=None)

Calculates a k^2 + k^8 energy dispersion.

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point coordinates (cartesian) where the dispersion is to be evaluated.

effmass : ndarray
Dimension: (3)

Contains the effective mass along the three k-point directions. Only the diagonal components of the effective mass tensor is used. In units of the free electron mass.

a : ndarray
Dimension: (3)

The non parabolic coefficients in front of each k^2 direction which translates to a^4k^8 in the one dimensional case.

scale : float

The scale factor in front of the non-parabolic correction

e0 : float, optional

Shift of the energy scale in eV.

kshift : ndarray, optional
Dimension: (3)

The shift along the respective k-point vectors in cartesian coordinates.

Returns:
ndarray
Dimension: (N)

Contains the energy dispersion in eV at each N k-points.

Notes

This routines calculates the energy dispersion according to

System Message: WARNING/2 (E=\\frac{\\hbar^2 k^2}{2m}+a^4k^8. )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...\frac{\\hbar^2 k^2}{2m}+a^4k^8.\end{split} ! Missing { inserted. <inserted text> { l.14 ...\frac{\\hbar^2 k^2}{2m}+a^4k^8.\end{split} ! Missing } inserted. <inserted text> } l.14 ...\frac{\\hbar^2 k^2}{2m}+a^4k^8.\end{split} ! Missing { inserted. <inserted text> { l.14 ...\frac{\\hbar^2 k^2}{2m}+a^4k^8.\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 460 bytes). Transcript written on math.log.

Setting a to zero yields a parabolic dispersion.

bandstructure.non_parabolic_energy_5(k, _, a, scale, e0=0.0, kshift=None)

Calculates a linear energy dispersion.

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point coordinates (cartesian) where the dispersion is to be evaluated.

_ : A dummy.
a : ndarray
Dimension: (3)

The coefficients in front of each k^2 direction which translates to \\sqrt(a)k in the one dimensional case.

scale : float

The scale factor in front of the linear expression.

e0 : float, optional

Shift of the energy scale in eV.

kshift : ndarray, optional
Dimension: (3)

The shift along the respective k-point vectors in cartesian coordinates.

Returns:
ndarray
Dimension: (N)

Contains the energy dispersion in eV at each N k-points.

Notes

This routines calculates the energy dispersion according to (in one dimension)

E=a\\sqrt(k^2).

Multiplied by the scale factor in front of this.

bandstructure.non_parabolic_velocity_1(k, effmass, a, scale, kshift=None)

Calculates the group velocity for the energy dispersion generated in non_parabolic_energy_1().

For both parabolic and non-parabolic bands.

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point in cartesian coordinates where the dispersion is to be evaluated.

effmass : ndarray
Dimension: (3)

Contains the effective mass along the three k-point directions. Only the diagonal components of the effective mass tensor is used. In units of the free electron mass.

a : ndarray
Dimension: (3)

The non parabolic coefficients in front of each k^2 direction which translates to a^2k^4 in the one dimensional case.

scale : float

The scale factor in front of the non-parabolic correction

kshift : ndarray, optional
Dimension: (3)

The shift along the respective k-point vectors in cartesian coordinates.

Returns:
vx, vy, vz : ndarray, ndarray, ndarray
Dimension: (N),(N),(N)

Contains the group velocity at each N k-points for each direction defined by the direction of the k-point unit axis. Units of eVAA.

Notes

This routines calculates the group velocity according to

System Message: WARNING/2 (v=\\frac{\\partial E}{\\partial \\vec{k}}, )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing { inserted. <inserted text> { l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing } inserted. <inserted text> } l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing { inserted. <inserted text> { l.14 ...partial E}{\\partial \\vec{k}},\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 388 bytes). Transcript written on math.log.

where

System Message: WARNING/2 (E=\\frac{\\hbar^2 k^2}{2m}+ak^4. )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...=\\frac{\\hbar^2 k^2}{2m}+ak^4.\end{split} ! Missing { inserted. <inserted text> { l.14 ...=\\frac{\\hbar^2 k^2}{2m}+ak^4.\end{split} ! Missing } inserted. <inserted text> } l.14 ...=\\frac{\\hbar^2 k^2}{2m}+ak^4.\end{split} ! Missing { inserted. <inserted text> { l.14 ...=\\frac{\\hbar^2 k^2}{2m}+ak^4.\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 444 bytes). Transcript written on math.log.

Setting a to zero yields a parabolic dispersion and thus its group velocity.

Warning

The factor \\hbar^{-1} is not returned and need to be included externally.

bandstructure.non_parabolic_velocity_2(k, effmass, a)

Calculates the group velocity for the energy dispersion generated in non_parabolic_energy_2().

For both parabolic and non-parabolic.

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point in cartesian coordinates where the dispersion is to be evaluated.

effmass : float

The effective mass in units of the free electron mass.

a : ndarray
Dimension: (3)

The \\alpha factor.

Returns:
vx, vy, vz : ndarray, ndarray, ndarray
Dimension: (N), (N), (N)

The group velocity along each axis in the reciprocal unit cell. In units of eVAA.

Notes

Consult comments in non_parabolic_energy_1()

Warning

The factor \\hbar^{-1} is not returned and need to be included externally.

bandstructure.non_parabolic_velocity_3(k, effmass, a, scale, kshift=None)

Calculates the group velocity for the energy dispersion generated in non_parabolic_energy_3().

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point in cartesian coordinates where the dispersion is to be evaluated.

effmass : ndarray
Dimension: (3)

Contains the effective mass along the three k-point directions. Only the diagonal components of the effective mass tensor is used. In units of the free electron mass.

a : ndarray
Dimension: (3)

The non parabolic coefficients in front of each k^2 direction which translates to a^4k^8 in the one dimensional case.

scale : float

The scale factor in front of the non-parabolic correction

kshift : ndarray, optional
Dimension: (3)

The shift along the respective k-point vectors in cartesian coordinates.

Returns:
vx, vy, vz : ndarray, ndarray, ndarray
Dimension: (N),(N),(N)

Contains the group velocity at each N k-points for each direction defined by the direction of the k-point unit axis. Units of eVAA.

Notes

This routines calculates the group velocity according to

System Message: WARNING/2 (v=\\frac{\\partial E}{\\partial \\vec{k}}, )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing { inserted. <inserted text> { l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing } inserted. <inserted text> } l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing { inserted. <inserted text> { l.14 ...partial E}{\\partial \\vec{k}},\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 388 bytes). Transcript written on math.log.

where

System Message: WARNING/2 (E=\\frac{\\hbar^2 k^2}{2m}+a^3k^6. )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...\frac{\\hbar^2 k^2}{2m}+a^3k^6.\end{split} ! Missing { inserted. <inserted text> { l.14 ...\frac{\\hbar^2 k^2}{2m}+a^3k^6.\end{split} ! Missing } inserted. <inserted text> } l.14 ...\frac{\\hbar^2 k^2}{2m}+a^3k^6.\end{split} ! Missing { inserted. <inserted text> { l.14 ...\frac{\\hbar^2 k^2}{2m}+a^3k^6.\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 460 bytes). Transcript written on math.log.

Setting a to zero yields a parabolic dispersion and thus its group velocity.

Warning

The factor \\hbar^{-1} is not returned and need to be included externally.

bandstructure.non_parabolic_velocity_4(k, effmass, a, scale, kshift=None)

Calculates the group velocity for the energy dispersion generated in non_parabolic_energy_4().

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point in cartesian coordinates where the dispersion is to be evaluated.

effmass : ndarray
Dimension: (3)

Contains the effective mass along the three k-point directions. Only the diagonal components of the effective mass tensor is used. In units of the free electron mass.

a : ndarray
Dimension: (3)

The non parabolic coefficients in front of each k^2 direction which translates to a^4k^8 in the one dimensional case.

scale : float

The scale factor in front of the non-parabolic correction

kshift : ndarray, optional
Dimension: (3)

The shift along the respective k-point vectors in cartesian coordinates.

Returns:
vx, vy, vz : ndarray, ndarray, ndarray
Dimension: (N),(N),(N)

Contains the group velocity at each N k-points for each direction defined by the direction of the k-point unit axis. Units of eVAA.

Notes

This routines calculates the group velocity according to

System Message: WARNING/2 (v=\\frac{\\partial E}{\\partial \\vec{k}}, )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing { inserted. <inserted text> { l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing } inserted. <inserted text> } l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing { inserted. <inserted text> { l.14 ...partial E}{\\partial \\vec{k}},\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 388 bytes). Transcript written on math.log.

where

System Message: WARNING/2 (E=\\frac{\\hbar^2 k^2}{2m}+a^4k^8. )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...\frac{\\hbar^2 k^2}{2m}+a^4k^8.\end{split} ! Missing { inserted. <inserted text> { l.14 ...\frac{\\hbar^2 k^2}{2m}+a^4k^8.\end{split} ! Missing } inserted. <inserted text> } l.14 ...\frac{\\hbar^2 k^2}{2m}+a^4k^8.\end{split} ! Missing { inserted. <inserted text> { l.14 ...\frac{\\hbar^2 k^2}{2m}+a^4k^8.\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 460 bytes). Transcript written on math.log.

Setting a to zero yields a parabolic dispersion and thus its group velocity.

Warning

The factor \\hbar^{-1} is not returned and need to be included externally.

bandstructure.non_parabolic_velocity_5(k, _, a, scale, kshift=None)

Calculates the group velocity for the energy dispersion generated in non_parabolic_energy_5().

Parameters:
k : ndarray
Dimension: (N,3)

Contains the N k-point in cartesian coordinates where the dispersion is to be evaluated.

_ : A dummy.
a : ndarray
Dimension: (3)

The coefficients in front of each k^2 direction which translates to \\sqrt(a)k in the one dimensional case.

scale : float

The scale factor in front of the linear expression.

kshift : ndarray, optional
Dimension: (3)

The shift along the respective k-point vectors in cartesian coordinates.

Returns:
vx, vy, vz : ndarray, ndarray, ndarray
Dimension: (N),(N),(N)

Contains the group velocity at each N k-points for each direction defined by the direction of the k-point unit axis. Units of eVAA.

Notes

This routines calculates the group velocity according to

System Message: WARNING/2 (v=\\frac{\\partial E}{\\partial \\vec{k}}, )

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2017-04-15> Babel <3.18> and hyphenation patterns for 84 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/utf8x.def)) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty (/usr/share/texlive/texmf-dist/tex/latex/ucs/data/uni-global.def)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/ucs/ucsencs.def) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Missing } inserted. <inserted text> } l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing { inserted. <inserted text> { l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing } inserted. <inserted text> } l.14 ...partial E}{\\partial \\vec{k}},\end{split} ! Missing { inserted. <inserted text> { l.14 ...partial E}{\\partial \\vec{k}},\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 388 bytes). Transcript written on math.log.

where

E=a\\sqrt(k^2).

Multiplied by the scale factor in front of this.

Warning

The factor \\hbar^{-1} is not returned and need to be included externally.

bandstructure.parabolic_effective_mass(effmass_t)

Checks if the supplied effective mass array is parabolic.

Parameters:
effmass_t : ndarray

The effective mass tensor in units of the free electron mass.

Returns:
boolean

True if parabolic tensors, False otherwise.