Skip to content

Commit c996af1

Browse files
committed
Reorganizing of ModeSolver and ModeSolverData
1 parent 44037f7 commit c996af1

File tree

7 files changed

+203
-106
lines changed

7 files changed

+203
-106
lines changed

tests/test_components.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ def test_monitor_plane():
768768
with pytest.raises(ValidationError) as e_info:
769769
ModeMonitor(size=size, freqs=freqs, modes=[])
770770
with pytest.raises(ValidationError) as e_info:
771-
ModeSolverMonitor(size=size, freqs=freqs, modes=[])
771+
ModeFieldMonitor(size=size, freqs=freqs, modes=[])
772772
with pytest.raises(ValidationError) as e_info:
773773
FluxMonitor(size=size, freqs=freqs, modes=[])
774774

tests/test_plugins.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,17 @@ def test_mode_solver():
7474
size=(2, 2, 2), grid_size=(0.1, 0.1, 0.1), structures=[waveguide], run_time=1e-12
7575
)
7676
plane = td.Box(center=(0, 0, 0), size=(0, 1, 1))
77-
ms = ModeSolver(simulation=simulation, plane=plane)
7877
mode_spec = td.ModeSpec(
7978
num_modes=3,
8079
target_neff=2.0,
8180
bend_radius=3.0,
8281
bend_axis=0,
8382
num_pml=(10, 10),
8483
)
85-
modes = ms.solve(mode_spec=mode_spec, freqs=[td.constants.C_0 / 1.0])
84+
ms = ModeSolver(
85+
simulation=simulation, plane=plane, mode_spec=mode_spec, freqs=[td.constants.C_0 / 1.0]
86+
)
87+
modes = ms.solve()
8688

8789

8890
def _test_coeffs():

tidy3d/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
# monitors
3535
from .components import FieldMonitor, FieldTimeMonitor, FluxMonitor, FluxTimeMonitor
36-
from .components import ModeMonitor, ModeSolverMonitor
36+
from .components import ModeMonitor, ModeFieldMonitor
3737

3838
# simulation
3939
from .components import Simulation

tidy3d/components/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
# monitor
3030
from .monitor import FreqMonitor, TimeMonitor, FieldMonitor, FieldTimeMonitor
3131
from .monitor import Monitor, FluxMonitor, FluxTimeMonitor, ModeMonitor
32-
from .monitor import ModeSolverMonitor
32+
from .monitor import ModeFieldMonitor
3333

3434
# simulation
3535
from .simulation import Simulation

tidy3d/components/data.py

Lines changed: 4 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -826,48 +826,6 @@ def sel_mode_index(self, mode_index):
826826
return FieldData(data_dict=data_dict)
827827

828828

829-
class ModeSolverData(CollectionData):
830-
"""Stores a collection of mode field profiles and mode effective indexes from the mode solver.
831-
832-
Parameters
833-
----------
834-
data_dict : Dict[str, :class:`AbstractModeData`]
835-
Mapping of "n_complex" to :class:`ModeIndexData`, and "fields" to :class:`ModeFieldData`.
836-
"""
837-
838-
data_dict: Dict[str, Union[AbstractModeData, AbstractFieldData]]
839-
type: Literal["ModeSolverData"] = "ModeSolverData"
840-
841-
@property
842-
def fields(self):
843-
"""Get field data."""
844-
return self.data_dict.get("fields")
845-
846-
@property
847-
def n_complex(self):
848-
"""Get complex effective indexes."""
849-
scalar_data = self.data_dict.get("n_complex")
850-
if scalar_data:
851-
return scalar_data.data
852-
return None
853-
854-
@property
855-
def n_eff(self):
856-
"""Get real part of effective index."""
857-
scalar_data = self.data_dict.get("n_complex")
858-
if scalar_data:
859-
return scalar_data.n_eff
860-
return None
861-
862-
@property
863-
def k_eff(self):
864-
"""Get imaginary part of effective index."""
865-
scalar_data = self.data_dict.get("n_complex")
866-
if scalar_data:
867-
return scalar_data.k_eff
868-
return None
869-
870-
871829
# maps MonitorData.type string to the actual type, for MonitorData.from_file()
872830
DATA_TYPE_MAP = {
873831
"ScalarFieldData": ScalarFieldData,
@@ -881,7 +839,6 @@ def k_eff(self):
881839
"ModeData": ModeData,
882840
"ModeFieldData": ModeFieldData,
883841
"ScalarModeFieldData": ScalarModeFieldData,
884-
"ModeSolverData": ModeSolverData,
885842
}
886843

887844

@@ -977,8 +934,6 @@ def at_centers(self, field_monitor_name: str) -> xr.Dataset:
977934
# get the data
978935
self.ensure_monitor_exists(field_monitor_name)
979936
field_monitor_data = self.monitor_data.get(field_monitor_name)
980-
if isinstance(field_monitor_data, ModeSolverData):
981-
field_monitor_data = field_monitor_data.fields
982937
self.ensure_field_monitor(field_monitor_data)
983938

984939
# get the monitor, discretize, and get center locations
@@ -1034,7 +989,7 @@ def plot_field(
1034989
time: float = None
1035990
if monitor is a :class:`FieldTimeMonitor`, specifies the time (sec) to plot the field.
1036991
mode_index: int = None
1037-
if monitor is a :class:`ModeSolverMonitor`, specifies which mode index to plot.
992+
if monitor is a :class:`ModeFieldMonitor`, specifies which mode index to plot.
1038993
eps_alpha : float = 0.2
1039994
Opacity of the structure permittivity.
1040995
Must be between 0 and 1 (inclusive).
@@ -1055,10 +1010,10 @@ def plot_field(
10551010
# get the monitor data
10561011
self.ensure_monitor_exists(field_monitor_name)
10571012
monitor_data = self.monitor_data.get(field_monitor_name)
1058-
if isinstance(monitor_data, ModeSolverData):
1013+
if isinstance(monitor_data, ModeFieldData):
10591014
if mode_index is None:
1060-
raise DataError("'mode_index' must be supplied to plot a ModeSolverMonitor.")
1061-
monitor_data = monitor_data.fields.sel_mode_index(mode_index=mode_index)
1015+
raise DataError("'mode_index' must be supplied to plot a ModeFieldMonitor.")
1016+
monitor_data = monitor_data.sel_mode_index(mode_index=mode_index)
10621017
self.ensure_field_monitor(monitor_data)
10631018

10641019
# get the field data component

tidy3d/components/monitor.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ class FieldMonitor(AbstractFieldMonitor, FreqMonitor):
225225
... name='steady_state_monitor')
226226
"""
227227

228-
_data_type: Literal["ScalarFieldData"] = pydantic.Field("ScalarFieldData")
228+
_data_type: Literal["FieldData"] = pydantic.Field("FieldData")
229229

230230
def storage_size(self, num_cells: int, tmesh: Array) -> int:
231231
# stores 1 complex number per grid cell, per frequency, per field
@@ -316,7 +316,7 @@ class FieldTimeMonitor(AbstractFieldMonitor, TimeMonitor):
316316
... name='movie_monitor')
317317
"""
318318

319-
_data_type: Literal["ScalarFieldTimeData"] = pydantic.Field("ScalarFieldTimeData")
319+
_data_type: Literal["FieldTimeData"] = pydantic.Field("FieldTimeData")
320320

321321
def storage_size(self, num_cells: int, tmesh: Array) -> int:
322322
# stores 1 real number per grid cell, per time step, per field
@@ -386,32 +386,30 @@ def storage_size(self, num_cells: int, tmesh: int) -> int:
386386
return 3 * BYTES_COMPLEX * len(self.freqs) * self.mode_spec.num_modes
387387

388388

389-
class ModeSolverMonitor(AbstractModeMonitor):
390-
""":class:`Monitor` that stores the mode data (field profiles and effective index)
391-
returned by the mode solver in the monitor plane.
389+
class ModeFieldMonitor(AbstractModeMonitor):
390+
""":class:`Monitor` that stores the mode field profiles returned by the mode solver in the
391+
monitor plane.
392392
393393
Example
394394
-------
395395
>>> mode_spec = ModeSpec(num_modes=3)
396-
>>> monitor = ModeSolverMonitor(
396+
>>> monitor = ModeFieldMonitor(
397397
... center=(1,2,3),
398398
... size=(2,2,0),
399399
... freqs=[200e12, 210e12],
400400
... mode_spec=mode_spec,
401401
... name='mode_monitor')
402402
"""
403403

404-
_data_type: Literal["ModeSolverData"] = pydantic.Field("ModeSolverData")
404+
_data_type: Literal["ModeFieldData"] = pydantic.Field("ModeFieldData")
405405

406406
def storage_size(self, num_cells: int, tmesh: int) -> int:
407407
# fields store 6 complex numbers per grid cell, per frequency, per mode.
408408
field_size = 6 * BYTES_COMPLEX * num_cells * len(self.freqs) * self.mode_spec.num_modes
409-
# effective index stores 1 complex number per frequency per mode
410-
neff_size = BYTES_COMPLEX * len(self.freqs) * self.mode_spec.num_modes
411-
return field_size + neff_size
409+
return field_size
412410

413411

414412
# types of monitors that are accepted by simulation
415413
MonitorType = Union[
416-
FieldMonitor, FieldTimeMonitor, FluxMonitor, FluxTimeMonitor, ModeMonitor, ModeSolverMonitor
414+
FieldMonitor, FieldTimeMonitor, FluxMonitor, FluxTimeMonitor, ModeMonitor, ModeFieldMonitor
417415
]

0 commit comments

Comments
 (0)