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 @@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added support for `.lydrc` files for design rule checking in the `klayout` plugin.
- Added a Gaussian inverse design filter option with autograd gradients and complete padding mode coverage.
- Added support for argument passing to DRC file when running checks with `DRCRunner.run(..., drc_args={key: value})` in klayout plugin.
- Added support for `nonlinear_spec` in `CustomMedium` and `CustomDispersiveMedium`.

### Breaking Changes
- Edge singularity correction at PEC and lossy metal edges defaults to `True`.
Expand Down
18 changes: 12 additions & 6 deletions tidy3d/components/nonlinear.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,25 @@ class NonlinearModel(ABC, Tidy3dBaseModel):

def _validate_medium_type(self, medium: AbstractMedium) -> None:
"""Check that the model is compatible with the medium."""
from .medium import AbstractCustomMedium, DispersiveMedium, Medium
from .medium import (
AbstractCustomMedium,
CustomDispersiveMedium,
CustomMedium,
DispersiveMedium,
Medium,
)

if isinstance(medium, AbstractCustomMedium):
if medium.is_time_modulated:
raise ValidationError(
f"'NonlinearModel' of class '{type(self).__name__}' is not currently supported "
f"for medium class '{type(medium).__name__}'."
f"for time-modulated medium class '{type(medium).__name__}'."
)
if medium.is_time_modulated:
if isinstance(medium, AbstractCustomMedium) and not medium.is_isotropic:
raise ValidationError(
f"'NonlinearModel' of class '{type(self).__name__}' is not currently supported "
f"for time-modulated medium class '{type(medium).__name__}'."
f"for anisotropic medium class '{type(medium).__name__}'."
)
if not isinstance(medium, (Medium, DispersiveMedium)):
if not isinstance(medium, (Medium, DispersiveMedium, CustomMedium, CustomDispersiveMedium)):
raise ValidationError(
f"'NonlinearModel' of class '{type(self).__name__}' is not currently supported "
f"for medium class '{type(medium).__name__}'."
Expand Down