Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
10 changes: 10 additions & 0 deletions tests/test_components/test_heat_charge.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)
2 changes: 2 additions & 0 deletions tidy3d/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
IsotropicEffectiveDOS,
MultiValleyEffectiveDOS,
RadiativeRecombination,
SelberherrImpactIonization,
ShockleyReedHallRecombination,
SlotboomBandGapNarrowing,
TemperatureBC,
Expand Down Expand Up @@ -685,6 +686,7 @@ def set_logging_level(level: str) -> None:
"ScalarModeFieldCylindricalDataArray",
"ScalarModeFieldDataArray",
"Scene",
"SelberherrImpactIonization",
"Sellmeier",
"SemiconductorMedium",
"ShockleyReedHallRecombination",
Expand Down
69 changes: 69 additions & 0 deletions tidy3d/components/tcad/generation_recombination.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
)
2 changes: 2 additions & 0 deletions tidy3d/components/tcad/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
DistributedGeneration,
HurkxDirectBandToBandTunneling,
RadiativeRecombination,
SelberherrImpactIonization,
ShockleyReedHallRecombination,
)
from tidy3d.components.tcad.mobility import CaugheyThomasMobility, ConstantMobilityModel
Expand All @@ -52,6 +53,7 @@
RadiativeRecombination,
ShockleyReedHallRecombination,
HurkxDirectBandToBandTunneling,
SelberherrImpactIonization,
]
BandGapNarrowingModelType = Union[SlotboomBandGapNarrowing]

Expand Down