Skip to content

Commit 12998d9

Browse files
committed
feat: Allow nonlinearity with custom medium
1 parent 4f18e7a commit 12998d9

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3232
- Added support for `.lydrc` files for design rule checking in the `klayout` plugin.
3333
- Added a Gaussian inverse design filter option with autograd gradients and complete padding mode coverage.
3434
- Added support for argument passing to DRC file when running checks with `DRCRunner.run(..., drc_args={key: value})` in klayout plugin.
35+
- Added support for `nonlinear_spec` in `CustomMedium` and `CustomDispersiveMedium`.
3536

3637
### Breaking Changes
3738
- Edge singularity correction at PEC and lossy metal edges defaults to `True`.

tidy3d/components/nonlinear.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,25 @@ class NonlinearModel(ABC, Tidy3dBaseModel):
2727

2828
def _validate_medium_type(self, medium: AbstractMedium) -> None:
2929
"""Check that the model is compatible with the medium."""
30-
from .medium import AbstractCustomMedium, DispersiveMedium, Medium
30+
from .medium import (
31+
AbstractCustomMedium,
32+
CustomDispersiveMedium,
33+
CustomMedium,
34+
DispersiveMedium,
35+
Medium,
36+
)
3137

32-
if isinstance(medium, AbstractCustomMedium):
38+
if medium.is_time_modulated:
3339
raise ValidationError(
3440
f"'NonlinearModel' of class '{type(self).__name__}' is not currently supported "
35-
f"for medium class '{type(medium).__name__}'."
41+
f"for time-modulated medium class '{type(medium).__name__}'."
3642
)
37-
if medium.is_time_modulated:
43+
if isinstance(medium, AbstractCustomMedium) and not medium.is_isotropic:
3844
raise ValidationError(
3945
f"'NonlinearModel' of class '{type(self).__name__}' is not currently supported "
40-
f"for time-modulated medium class '{type(medium).__name__}'."
46+
f"for anisotropic medium class '{type(medium).__name__}'."
4147
)
42-
if not isinstance(medium, (Medium, DispersiveMedium)):
48+
if not isinstance(medium, (Medium, DispersiveMedium, CustomMedium, CustomDispersiveMedium)):
4349
raise ValidationError(
4450
f"'NonlinearModel' of class '{type(self).__name__}' is not currently supported "
4551
f"for medium class '{type(medium).__name__}'."

0 commit comments

Comments
 (0)