|
35 | 35 | LossyMetalMedium, |
36 | 36 | ) |
37 | 37 | from tidy3d.components.microwave.data.dataset import MicrowaveModeDataset |
| 38 | +from tidy3d.components.microwave.microwave_mode_spec import MicrowaveModeSpec |
38 | 39 | from tidy3d.components.microwave.path_integrals.path_integral_factory import make_path_integrals |
39 | 40 | from tidy3d.components.mode_spec import ModeSpec |
40 | | -from tidy3d.components.monitor import ModeMonitor, ModeSolverMonitor |
| 41 | +from tidy3d.components.monitor import ModeMonitor, ModeSolverMonitor, ModeSpecTypes |
41 | 42 | from tidy3d.components.scene import Scene |
42 | 43 | from tidy3d.components.simulation import Simulation |
43 | 44 | from tidy3d.components.source.field import ModeSource |
@@ -156,7 +157,7 @@ class ModeSolver(Tidy3dBaseModel): |
156 | 157 | discriminator=TYPE_TAG_STR, |
157 | 158 | ) |
158 | 159 |
|
159 | | - mode_spec: ModeSpec = pydantic.Field( |
| 160 | + mode_spec: ModeSpecTypes = pydantic.Field( |
160 | 161 | ..., |
161 | 162 | title="Mode specification", |
162 | 163 | description="Container with specifications about the modes to be solved for.", |
@@ -437,6 +438,11 @@ def _num_cells_freqs_modes(self) -> tuple[int, int, int]: |
437 | 438 | num_freqs = len(self.freqs) |
438 | 439 | return num_cells, num_freqs, num_modes |
439 | 440 |
|
| 441 | + @property |
| 442 | + def _is_microwave_mode_spec(self) -> bool: |
| 443 | + """Check if the mode_spec is a MicrowaveModeSpec.""" |
| 444 | + return isinstance(self.mode_spec, MicrowaveModeSpec) |
| 445 | + |
440 | 446 | def solve(self) -> ModeSolverData: |
441 | 447 | """:class:`.ModeSolverData` containing the field and effective index data. |
442 | 448 |
|
@@ -544,7 +550,7 @@ def data_raw(self) -> ModeSolverData: |
544 | 550 |
|
545 | 551 | mode_solver_data = self._filter_components(mode_solver_data) |
546 | 552 | # Calculate and add the characteristic impedance |
547 | | - if self.mode_spec.microwave_mode_spec is not None: |
| 553 | + if self._is_microwave_mode_spec: |
548 | 554 | mode_solver_data = self._add_microwave_data(mode_solver_data) |
549 | 555 | return mode_solver_data |
550 | 556 |
|
@@ -1375,8 +1381,10 @@ def _make_path_integrals( |
1375 | 1381 | ) -> tuple[tuple[Optional[VoltageIntegralTypes]], tuple[Optional[CurrentIntegralTypes]]]: |
1376 | 1382 | """Wrapper for making path integrals from the MicrowaveModeSpec. Note: overriden in the backend to support |
1377 | 1383 | auto creation of path integrals.""" |
| 1384 | + if not self._is_microwave_mode_spec: |
| 1385 | + raise ValueError("Cannot make path integrals for non-MicrowaveModeSpec") |
1378 | 1386 | return make_path_integrals( |
1379 | | - self.mode_spec.microwave_mode_spec, |
| 1387 | + self.mode_spec, |
1380 | 1388 | self.to_monitor(name=MODE_MONITOR_NAME), |
1381 | 1389 | ) |
1382 | 1390 |
|
|
0 commit comments