optmat.solid.udm#
Franta’s universal dispersion model (UDM) of a solid’s dielectric function.
The UDM builds the complex dielectric function from contributions whose imaginary
parts are simple models of the joint density of states, each normalised to unit
transition strength (its Thomas-Reiche-Kuhn integral), and whose real parts are their
Kramers-Kronig transforms in closed form (Franta, Nečas, Ohlídal & Giglia, Proc. SPIE
9628, 96281U (2015), Eqs. (1)-(47); the curated record franta_2015b):
with the interband transitions (a symmetric term and excitonic terms, Eqs. 4-27), the higher-energy excitations of the valence electrons (Eqs. 28-31), the Urbach tail (Eqs. 32-40), and Gaussian-broadened peaks for localised states and phonons (Eqs. 41-47). Energies are photon energies in eV; the transition strengths N are in eV^2. The model is causal and passive by construction, and every term is a closed-form, piecewise-analytic function of E: it can be differentiated to any order away from the few band edges where its joint density of states has a kink.
The parameters come from Franta et al.’s newAD2 parameter files, whose values the source records hold as the terms of their formulas (TC-320). Two details of those files follow the authors’ program, which reproduces their published tables, rather than the paper (TC-321): the Urbach tail’s upper energy, and the wavenumber-to-energy conversion of the phonon terms.
First derivatives are exact (complex-step differentiation of the closed forms).
Module Attributes
newAD2's conversion of a wavenumber in cm^-1 to a photon energy in eV. |
Functions
|
Build a model from a newAD2 parameter file. |
|
Build a model from a parameter file's attributes and values. |
|
Return the attributes of a newAD2 parameter file's first line. |
|
Read the text of a newAD2 UDM parameter file. |
|
Read a newAD2 UDM parameter file. |
Classes
|
One contribution of Eq. |
|
A dielectric function in Franta et al.'s universal dispersion model. |
- class optmat.solid.udm.Term(kind, strength, shape, lowest=0.0)[source]#
Bases:
objectOne contribution of Eq. (1).
- Attributes:
- kindstr
“interband”, “exciton”, “higher”, “urbach” or “gaussian”.
- strengthfloat
Its transition strength N, eV^2.
- shapetuple of float
Its shape parameters, eV: (E_g, E_h); (E_g, E_h, E_c, B_c); (E_xi,); (E_u, E_g, E_h); or (centre, rms width).
- lowestfloat
Its lowest characteristic energy, below which the real part is the moment series (0 for a Gaussian peak).
- optmat.solid.udm.UDM_WAVENUMBER_TO_EV: Final = 0.0001239841905763867#
newAD2’s conversion of a wavenumber in cm^-1 to a photon energy in eV.
- class optmat.solid.udm.UniversalDispersionModel(terms)[source]#
Bases:
objectA dielectric function in Franta et al.’s universal dispersion model.
Build one from a newAD2 parameter file with
from_file().- Attributes:
- termstuple
The contributions, each with its kind, transition strength (eV^2) and shape parameters (eV).
- dpermittivity_denergy(energy)[source]#
Return d epsilon / dE, exact to rounding (complex-step differentiation).
- Parameters:
- energynumpy.ndarray
Photon energies, eV, > 0, away from the terms’ band edges.
- Returns:
- numpy.ndarray
The derivative, per eV.
- permittivity(energy)[source]#
Return the complex dielectric function at photon energies.
- Parameters:
- energynumpy.ndarray
Photon energies, eV, > 0.
- Returns:
- numpy.ndarray
The permittivity epsilon_r + i epsilon_i, with epsilon_i >= 0 for absorption.
Examples
>>> from optmat.solid.models.formulas import published_models >>> model = published_models()["franta_2016/udm_lithosil_q2"].udm >>> f"{model.transition_strength():.1f}" '1116.0' >>> n = np.sqrt(model.permittivity(np.array([1.5498]))) >>> f"{n.real[0]:.5f}" '1.45355'
- optmat.solid.udm.from_file(path)[source]#
Build a model from a newAD2 parameter file.
- Parameters:
- pathpathlib.Path
The
.parfile.
- Returns:
- UniversalDispersionModel
The model.
- optmat.solid.udm.from_parameters(attributes, values)[source]#
Build a model from a parameter file’s attributes and values.
- Parameters:
- attributestuple of str
The model’s attributes (
he,ut,ex=n,loc=n,ph=n).- valuesmapping of str to float
The parameters, in newAD2’s names and units (eV, eV^2, cm^-1).
- Returns:
- UniversalDispersionModel
The model.
- Raises:
- DataError
If a parameter the attributes call for is missing.
- optmat.solid.udm.parse_attributes(line, where)[source]#
Return the attributes of a newAD2 parameter file’s first line.
- Parameters:
- linestr
The line, such as
he:ex=10:ut:ph=52.- wherestr
What the line belongs to, for the error message.
- Returns:
- tuple of str
The attributes.
- Raises:
- DataError
If an attribute is one this implementation does not support.
Examples
>>> parse_attributes("he:ex=10:ut:ph=52", "Lithosil Q2") ('he', 'ex=10', 'ut', 'ph=52')
- optmat.solid.udm.parse_parameters(text, where)[source]#
Read the text of a newAD2 UDM parameter file.
- Parameters:
- textstr
The file’s text: a first line of attributes (
he:ex=10:ut:ph=52), thenname = valuelines, then the site’s free-text description.- wherestr
What the text belongs to, for the error message.
- Returns:
- tuple
The attributes, and the parameters by name.
Examples
>>> attributes, values = parse_parameters("he:ut\nEg = 8.36\nEh = 39.6\n", "x") >>> attributes, values["Eg"] (('he', 'ut'), 8.36)
- optmat.solid.udm.read_parameter_file(path)[source]#
Read a newAD2 UDM parameter file.
- Parameters:
- pathpathlib.Path
The
.parfile (parse_parameters()).
- Returns:
- tuple
The attributes, and the parameters by name.