Skip to content
Merged
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
78 changes: 78 additions & 0 deletions tidy3d/components/tcad/generation_recombination.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,3 +282,81 @@ 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. Two formulations are available that
depend on the driving field, as described in [1]_ (:math:`\\| E \\|`) and [2]_ (:math:`E \\cdot J_{\\nu} / \\| E \\|` for :math:`\\nu = n,p`).

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,
... formulation='PQ'
... )

References
----------
.. [1] Selberherr, Siegfried. Analysis and simulation of semiconductor devices. Springer Science & Business Media, 1984.
.. [2] Vassil Palankovski 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.",
)

formulation: str = pd.Field(
"PQ",
title="Formulation",
description="Formulation used for impact ionization. Options are 'Selberherr' "
"or 'PQ' for Selberherr and Palankovski and Quay formulations, respectively.",
)
Comment on lines +357 to +362
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: The formulation field should have validation to ensure only 'Selberherr' or 'PQ' are accepted. Use Literal['Selberherr', 'PQ'] or add a validator to prevent invalid values.

Prompt To Fix With AI
This is a comment left during a code review.
Path: tidy3d/components/tcad/generation_recombination.py
Line: 357:362

Comment:
**logic:** The `formulation` field should have validation to ensure only 'Selberherr' or 'PQ' are accepted. Use `Literal['Selberherr', 'PQ']` or add a validator to prevent invalid values.

How can I resolve this? If you propose a fix, please make it concise.

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