simudo.materials package¶
Submodules¶
simudo.materials.alloy_optics module¶
Composition-dependent optical properties for alloys.
NOT PART OF THE RELEASED PACKAGE. Simudo 0.7 ships measured optical data for
the binaries only. This module and its alloy_optics/ tables live in the
source tree but are deliberately excluded from the wheel and sdist (see
package_data in setup.py), and nothing in the library calls them: the two
alloy materials use a flat, composition-independent opt_cv/alpha instead.
Kept for future work. Two things need fixing before it can be wired up:
the data path is built from Path.cwd() rather than the package directory,
and optical_properties_table subscripts the 0-d array a
RegularGridInterpolator returns for a single point.
- class simudo.materials.alloy_optics.OpticsInterpolator(material: str)[source]¶
Bases:
object- U = <pint.registry.UnitRegistry object>¶
- fractions = []¶
- grid_values = {}¶
- initialize_data()[source]¶
Reads in optical data in a format well-suited for scipy.interpolate.RegularGridInterpolator. Requires alloy data to be named in the exact format A_x B_1-x C or A B_x C_1-x. Currently does not support quaternary alloys.
- optical_properties_table(alloy_fraction: float)[source]¶
Returns a table of optical properties identical in form to those used in non-alloy materials.
- wavelengths = None¶
simudo.materials.aluminumarsenide module¶
- class simudo.materials.aluminumarsenide.AluminumArsenideMaterial(**kwargs)[source]¶
Bases:
MaterialAlAs material data based on Palankovski
Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”,
- Springer-Verlag (2004).
Both gamma and X valley properties are included here. The CB energy level is still taken to be that of lowest valley
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'AluminumArsenide'¶
simudo.materials.aluminumgalliumarsenide module¶
- class simudo.materials.aluminumgalliumarsenide.AluminumGalliumArsenideAlloy(**kwargs)[source]¶
Bases:
MaterialAluminum-Gallium-Arsenide material data based on Palankovski.
This is for Ga_(1-x) Al_x As mole fraction should be specified by the MoleFractionX spatial rule.
V. Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”, Springer-Verlag (2004).
Default CB properties are with the Gamma valley. For usage in valley PV, need to update the dictionary for CB -> X valley, and IB -> Gamma valley
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'AluminumGalliumArsenide'¶
- required_spatial_params: list = ['MoleFractionX']¶
simudo.materials.galliumarsenide module¶
- class simudo.materials.galliumarsenide.GalliumArsenideMaterial(**kwargs)[source]¶
Bases:
MaterialGaAs material data based on Palankovski
Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”,
- Springer-Verlag (2004).
Both gamma and X valley properties are included here for later use in the valleyPV InGaAs alloy. The CB energy level is still taken to be that of the lowest valley
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'GalliumArsenide'¶
simudo.materials.galliumarsenidenitride module¶
- class simudo.materials.galliumarsenidenitride.GalliumArsenideNitrideAlloy(**kwargs)[source]¶
Bases:
MaterialGallium Arsenide Nitride material based off of Gallium Arsenide material data based on Palankovski and the band anticrossing model, with parameters from R. Kudrawiec et al, “Electronic Band Structure of GaNxPyAs1−x−y Highly Mismatched Alloys: Suitability for Intermediate-Band Solar Cells” Phys Rev App 2014
V. Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”, Springer-Verlag (2004).
Band structure comes from BAC but other parameters are found with Vegard’s law from GaAs and GaN
MoleFractionX is the Nitrogen fraction
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'GalliumArsenideNitride'¶
simudo.materials.galliumnitride module¶
- class simudo.materials.galliumnitride.GalliumNitrideMaterial(**kwargs)[source]¶
Bases:
Materialbeta-GaN (FCC lattice) material data based on Springer 2017
V. Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”, Springer-Verlag (2004). Both gamma and L valley properties are included here for later use in the valleyPV GaNAs alloy. The X valley is deliberately absent – its degeneracy is unknown, so none of it is exported. The CB energy level is still taken to be that of the lowest valley
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'GalliumNitride'¶
simudo.materials.germanium module¶
- class simudo.materials.germanium.GermaniumMaterial(**kwargs)[source]¶
Bases:
MaterialGermanium material data based on Palankovski.
V. Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”, Springer-Verlag (2004).
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'Germanium'¶
simudo.materials.helpers module¶
Helpers shared by the material files.
thermal_velocity() is used by every material that defines a vth;
Alloy by the alloys only.
Composition interpolation¶
Every alloy in this directory interpolates its parameters between two parent
binaries using the same two formulas, and until now each file carried its own
copy of both. The copies had drifted: only one of them tolerated a zero bowing
parameter, only one had a fallback for parameters missing from a parent, and
only one guarded the division in Alloy.mobility_bowing().
The two formulas, with x the mole fraction of the at_x1 parent:
Vegard’s law – linear interpolation plus a quadratic bowing term:
P(x) = P1 * x + P0 * (1 - x) + C * x * (1 - x)
C = 0 means no bowing.
Mobility bowing (Palankovski eq. 3.132) – harmonic, with the bowing parameter in the denominator:
mu(x) = [ (1 - x) / mu0 + x / mu1 + x * (1 - x) / C ]^-1
Here large ``C`` means negligible bowing and C = 0 is division by zero
– the opposite convention to Vegard’s law. Mixing the two up is easy and
silent, so Alloy.mobility_bowing() rejects C = 0 explicitly.
- class simudo.materials.helpers.Alloy(U, x, at_x0, at_x1, missing='raise')[source]¶
Bases:
objectInterpolates material parameters between two parent binaries.
- Parameters:
U (pint unit registry) – The alloy’s registry, used only for the dimensionless
1.x (mole fraction) – Fraction of the at_x1 parent. May be a plain number, a pint
Quantity, or a UFL expression wrapped in one.at_x0 (dict) –
get_dict()of the parent recovered atx = 0andx = 1respectively. Getting these the wrong way round inverts the alloy silently, so name them at the call site.at_x1 (dict) –
get_dict()of the parent recovered atx = 0andx = 1respectively. Getting these the wrong way round inverts the alloy silently, so name them at the call site.missing ({'raise', 'fallback'}) – What
vegard()does when param is absent from a parent.'raise'propagates theKeyError;'fallback'returns the value from whichever parent does define it, uninterpolated, preferring at_x0.
Examples
alloy = Alloy(U, X, at_x0=GalliumArsenide, at_x1=AluminumArsenide) vegard = alloy.vegard mobility_bowing = alloy.mobility_bowing
- mobility_bowing(param, C)[source]¶
Harmonic mobility interpolation, Palankovski eq. 3.132.
C is the alloy-scattering parameter and appears in the denominator, so a large C means negligible bowing.
C = 0is the Vegard convention carried over by mistake and is rejected rather than left to divide by zero.
- simudo.materials.helpers.thermal_velocity(U, T, m)[source]¶
Mean thermal speed of carriers of effective mass m, in units of m_e.

This is the mean speed of a Maxwell-Boltzmann distribution in a parabolic band, which is the average that belongs in an SRH capture coefficient
([Shockley1952a] 3.5) – the capture rate goes as cross-section times how
fast carriers move, irrespective of direction.Several other averages of the same distribution are also called “thermal velocity”, and they differ only in prefactor – all scale as
:quantity
value
vs sqrt(kT/m*)
mean speed (this function)
sqrt(8 kT / pi m*)
1.596
RMS speed
sqrt(3 kT / m*)
1.732
most probable speed
sqrt(2 kT / m*)
1.414
mean |v_z|
sqrt(2 kT / pi m*)
0.798
one-sided flux (Richardson)
sqrt(kT / 2 pi m*)
0.399
The last is the one thermionic emission across a heterojunction needs, and it is exactly
thermal_velocity(...) / 4. Seesimudo.physics.heterojunction.ThermionicHeterojunction.emission_velocity(), which applies that factor rather than having the material files export a secondvth.Valid in the non-degenerate (Boltzmann) limit only; for a degenerate band the mean speed rises toward the Fermi velocity and the sqrt(T) law fails.
- Parameters:
U (pint unit registry) –
T (temperature, with units) –
m (effective mass as a multiple of the free electron mass) – Which mass is correct depends on the band: the DOS mass for a single isotropic valley, the conductivity mass for an anisotropic one.
simudo.materials.ib_test_material module¶
Test material that exercises the v1 callable convention for material
get_dict() entries.
The material
provides scalar layer-properties for the I-region of a p-IB-n device AND
a callable σ(E) for an IBBeerLambert process named opt_ci.
- class simudo.materials.ib_test_material.IBTestMaterial(**kwargs)[source]¶
Bases:
MaterialMinimal IB-region material with a top-hat IB→CB cross-section.
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'IBTestMaterial'¶
simudo.materials.indiumaluminumarsenide module¶
- class simudo.materials.indiumaluminumarsenide.IndiumAluminumArsenideAlloy(**kwargs)[source]¶
Bases:
MaterialIndium-Aluminum-Arsenide material data based on Palankovski.
This is for Al_x In_(1-x) As mole fraction should be specified by the MoleFractionX spatial rule.
V. Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”, Springer-Verlag (2004).
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'IndiumAluminumArsenide'¶
simudo.materials.indiumarsenide module¶
- class simudo.materials.indiumarsenide.IndiumArsenideMaterial(**kwargs)[source]¶
Bases:
MaterialInAs material data based on Palankovski
Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”,
- Springer-Verlag (2004).
Both gamma and X valley properties are included here for later use in the valleyPV InGaAs alloy. The CB energy level is still taken to be that of the lowest valley
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'IndiumArsenide'¶
simudo.materials.silicon module¶
- class simudo.materials.silicon.SiliconMaterial(**kwargs)[source]¶
Bases:
MaterialSilicon material data based on Palankovski.
V. Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”, Springer-Verlag (2004).
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'Silicon'¶
- optical_properties_table()[source]¶
Optical properties from M.A. Green, “Self-consistent optical parameters of intrinsic silicon at 300 K including temperature coefficients”, Sol. Ener. Mat. and Sol. Cells., https://doi.org/10.1016/j.solmat.2008.06.009
simudo.materials.silicongermanium module¶
- class simudo.materials.silicongermanium.SiliconGermaniumAlloy(**kwargs)[source]¶
Bases:
MaterialSilicon-Germanium material data based on Palankovski.
This is for Si(1-x)Ge(x) strained to the Silicon lattice. mole fraction should be specified by the MoleFractionX spatial rule.
V. Palankovski and R. Quay, “Analysis and Simulation of Heterostructure Devices”, Springer-Verlag (2004).
- get_dict()[source]¶
Construct dictionary of material parameters.
- Returns:
Dictionary where keys are
add_rule()keys, and values are the values (expressions).- Return type:
dict
- name = 'SiliconGermanium'¶
Module contents¶
Library of Material subclasses and their
optical property data.
Intentionally empty of imports: each material module imports
simudo.physics, which pulls in dolfin, and the GUI deliberately inspects
these files with ast instead of importing them. Import the individual
modules directly (e.g. simudo.materials.galliumarsenide) if you need them.