diff --git a/CHANGELOG.md b/CHANGELOG.md index 4de1e4ea27..59049a5c7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Non-isothermal Charge simulations are now available. One can now run this type of simulations by using the `SteadyChargeDCAnalysis` as the `analysis_spec` of a `HeatChargeSimulation`. This type of simulations couple the heat equation with the drift-diffusion equations which allow to account for self heating behavior. - Because non-isothermal Charge simulations are now supported, new models for the effective density of states and bandgap energy have been introduced. These models are the following: `ConstantEffectiveDOS`, `IsotropicEffectiveDOS`, `MultiValleyEffectiveDOS`, `DualValleyEffectiveDOS`. - Added the Hurkx model for direct band-to-band tunneling `HurkxDirectBandToBandTunneling`. +- Added Selberherr's model for impact ionization `SelberherrImpactIonization`. ### Changed - `LayerRefinementSpec` defaults to assuming structures made of different materials are interior-disjoint for more efficient mesh generation. diff --git a/tests/test_components/test_heat_charge.py b/tests/test_components/test_heat_charge.py index 253bea8276..8944ca60a4 100644 --- a/tests/test_components/test_heat_charge.py +++ b/tests/test_components/test_heat_charge.py @@ -2382,3 +2382,13 @@ def test_generation_recombination(): E_0=1, sigma=2, ) + + # make sure we can build a SelberherrImpactIonization + _ = td.SelberherrImpactIonization( + alpha_n_inf=7.03e5, + alpha_p_inf=1.582e6, + E_n_crit=1.23e6, + E_p_crit=2.03e6, + beta_n=1, + beta_p=1, + ) diff --git a/tidy3d/__init__.py b/tidy3d/__init__.py index 60851bedbd..e6f4e82ac5 100644 --- a/tidy3d/__init__.py +++ b/tidy3d/__init__.py @@ -88,6 +88,7 @@ IsotropicEffectiveDOS, MultiValleyEffectiveDOS, RadiativeRecombination, + SelberherrImpactIonization, ShockleyReedHallRecombination, SlotboomBandGapNarrowing, TemperatureBC, @@ -685,6 +686,7 @@ def set_logging_level(level: str) -> None: "ScalarModeFieldCylindricalDataArray", "ScalarModeFieldDataArray", "Scene", + "SelberherrImpactIonization", "Sellmeier", "SemiconductorMedium", "ShockleyReedHallRecombination", diff --git a/tidy3d/components/tcad/generation_recombination.py b/tidy3d/components/tcad/generation_recombination.py index 0a6226f1cc..9b7b76bc78 100644 --- a/tidy3d/components/tcad/generation_recombination.py +++ b/tidy3d/components/tcad/generation_recombination.py @@ -282,3 +282,72 @@ class HurkxDirectBandToBandTunneling(Tidy3dBaseModel): "semiconductors sigma is typically 2.0, while for indirect " "semiconductors sigma is typically 2.5.", ) + + +class SelberherrImpactIonization(Tidy3dBaseModel): + """ + This class defines the parameters for the Selberherr impact ionization model as described in [1]_ and implemented in [2]_. + + Notes + ----- + + The impact ionization rate ``\\alpha_{\\nu}`` (for :math:`\\nu = p` (holes) and :math:`\\nu = n` (electrons)) is defined by: + + .. math:: + + \\alpha_{\\nu} = \\alpha_{\\nu}^\\infty \\cdot \\exp \\left( - \\left( \\frac{E_{\\nu}^{\\text{crit}} \\cdot |\\mathbf{J}_{\\nu}|}{E \\cdot \\mathbf{J}_{\\nu}} \\right)^{\\beta_{\\nu}} \\right) + + where :math:`\\alpha_{\\nu}^\\infty`, :math:`E_{\\nu}^{\\text{crit}}`, and :math:`\\beta_{\\nu}` are material-dependent parameters. + + Example + ------- + >>> import tidy3d as td + >>> default_Si = td.SelberherrImpactIonization( + ... alpha_n_inf=7.03e5, + ... alpha_p_inf=1.582e6, + ... E_n_crit=1.23e6, + ... E_p_crit=2.03e6, + ... beta_n=1, + ... beta_p=1 + ... ) + + References + ---------- + .. [1] Selberherr, Siegfried. Analysis and simulation of semiconductor devices. Springer Science & Business Media, 1984. + .. [2] Palankovski, Vassil, and RĂ¼diger Quay. Analysis and simulation of heterostructure devices. Springer Science & Business Media, 2004. + """ + + alpha_n_inf: pd.PositiveFloat = pd.Field( + ..., + title="Electron ionization coefficient at infinite field", + description="Electron ionization coefficient at infinite field.", + units="1/cm", + ) + alpha_p_inf: pd.PositiveFloat = pd.Field( + ..., + title="Hole ionization coefficient at infinite field", + description="Hole ionization coefficient at infinite field.", + units="1/cm", + ) + E_n_crit: pd.PositiveFloat = pd.Field( + ..., + title="Critical electric field for electrons", + description="Critical electric field for electrons.", + units="V/cm", + ) + E_p_crit: pd.PositiveFloat = pd.Field( + ..., + title="Critical electric field for holes", + description="Critical electric field for holes.", + units="V/cm", + ) + beta_n: pd.PositiveFloat = pd.Field( + ..., + title="Exponent for electrons", + description="Exponent for electrons.", + ) + beta_p: pd.PositiveFloat = pd.Field( + ..., + title="Exponent for holes", + description="Exponent for holes.", + ) diff --git a/tidy3d/components/tcad/types.py b/tidy3d/components/tcad/types.py index 3af63d122b..6040f22671 100644 --- a/tidy3d/components/tcad/types.py +++ b/tidy3d/components/tcad/types.py @@ -26,6 +26,7 @@ DistributedGeneration, HurkxDirectBandToBandTunneling, RadiativeRecombination, + SelberherrImpactIonization, ShockleyReedHallRecombination, ) from tidy3d.components.tcad.mobility import CaugheyThomasMobility, ConstantMobilityModel @@ -52,6 +53,7 @@ RadiativeRecombination, ShockleyReedHallRecombination, HurkxDirectBandToBandTunneling, + SelberherrImpactIonization, ] BandGapNarrowingModelType = Union[SlotboomBandGapNarrowing]