|
21 | 21 | from ..grid.grid import Coords, Grid
|
22 | 22 | from ..medium import Medium, MediumType
|
23 | 23 | from ..monitor import (
|
| 24 | + AuxFieldTimeMonitor, |
24 | 25 | DiffractionMonitor,
|
25 | 26 | DirectivityMonitor,
|
26 | 27 | FieldMonitor,
|
|
85 | 86 | )
|
86 | 87 | from .dataset import (
|
87 | 88 | AbstractFieldDataset,
|
| 89 | + AuxFieldTimeDataset, |
88 | 90 | Dataset,
|
89 | 91 | ElectromagneticFieldDataset,
|
90 | 92 | FieldDataset,
|
@@ -196,7 +198,9 @@ def get_amplitude(x) -> complex:
|
196 | 198 | class AbstractFieldData(MonitorData, AbstractFieldDataset, ABC):
|
197 | 199 | """Collection of scalar fields with some symmetry properties."""
|
198 | 200 |
|
199 |
| - monitor: Union[FieldMonitor, FieldTimeMonitor, PermittivityMonitor, ModeMonitor] |
| 201 | + monitor: Union[ |
| 202 | + FieldMonitor, FieldTimeMonitor, AuxFieldTimeMonitor, PermittivityMonitor, ModeMonitor |
| 203 | + ] |
200 | 204 |
|
201 | 205 | symmetry: Tuple[Symmetry, Symmetry, Symmetry] = pd.Field(
|
202 | 206 | (0, 0, 0),
|
@@ -1328,6 +1332,41 @@ def time_reversed_copy(self) -> FieldTimeData:
|
1328 | 1332 | return self.copy(update=new_data)
|
1329 | 1333 |
|
1330 | 1334 |
|
| 1335 | +class AuxFieldTimeData(AuxFieldTimeDataset, AbstractFieldData): |
| 1336 | + """ |
| 1337 | + Data associated with a :class:`.AuxFieldTimeMonitor`: scalar components of aux fields. |
| 1338 | +
|
| 1339 | + Notes |
| 1340 | + ----- |
| 1341 | +
|
| 1342 | + The data is stored as a `DataArray <https://docs.xarray.dev/en/stable/generated/xarray.DataArray.html>`_ |
| 1343 | + object using the `xarray <https://docs.xarray.dev/en/stable/index.html>`_ package. |
| 1344 | +
|
| 1345 | + Example |
| 1346 | + ------- |
| 1347 | + >>> from tidy3d import ScalarFieldTimeDataArray |
| 1348 | + >>> x = [-1,1,3] |
| 1349 | + >>> y = [-2,0,2,4] |
| 1350 | + >>> z = [-3,-1,1,3,5] |
| 1351 | + >>> t = [0, 1e-12, 2e-12] |
| 1352 | + >>> coords = dict(x=x[:-1], y=y[:-1], z=z[:-1], t=t) |
| 1353 | + >>> grid = Grid(boundaries=Coords(x=x, y=y, z=z)) |
| 1354 | + >>> scalar_field = ScalarFieldTimeDataArray(np.random.random((2,3,4,3)), coords=coords) |
| 1355 | + >>> monitor = AuxFieldTimeMonitor( |
| 1356 | + ... size=(2,4,6), interval=100, name='field', fields=['Nfx'], colocate=True |
| 1357 | + ... ) |
| 1358 | + >>> data = AuxFieldTimeData(monitor=monitor, Nfx=scalar_field, grid_expanded=grid) |
| 1359 | + """ |
| 1360 | + |
| 1361 | + monitor: AuxFieldTimeMonitor = pd.Field( |
| 1362 | + ..., |
| 1363 | + title="Monitor", |
| 1364 | + description="Time-domain auxiliary field monitor associated with the data.", |
| 1365 | + ) |
| 1366 | + |
| 1367 | + _contains_monitor_fields = enforce_monitor_fields_present() |
| 1368 | + |
| 1369 | + |
1331 | 1370 | class PermittivityData(PermittivityDataset, AbstractFieldData):
|
1332 | 1371 | """Data for a :class:`.PermittivityMonitor`: diagonal components of the permittivity tensor.
|
1333 | 1372 |
|
@@ -3684,6 +3723,7 @@ def fields_circular_polarization(self) -> xr.Dataset:
|
3684 | 3723 | ModeData,
|
3685 | 3724 | FluxData,
|
3686 | 3725 | FluxTimeData,
|
| 3726 | + AuxFieldTimeData, |
3687 | 3727 | FieldProjectionKSpaceData,
|
3688 | 3728 | FieldProjectionCartesianData,
|
3689 | 3729 | FieldProjectionAngleData,
|
|
0 commit comments