tidy3d.SimulationData#
- class SimulationData[source]#
Bases:
AbstractYeeGridSimulationDataStores data from a collection of
Monitorobjects in aSimulation.- Parameters:
simulation (
Simulation) – OriginalSimulationassociated with the data.data (tuple[Union[
FieldData,FieldTimeData,PermittivityData,MediumData,ModeSolverData,ModeData,FluxData,FluxTimeData,AuxFieldTimeData,FieldProjectionKSpaceData,FieldProjectionCartesianData,FieldProjectionAngleData,DiffractionData,DirectivityData,FieldOverlapData,MicrowaveModeData,MicrowaveModeSolverData,SurfaceFieldData,SurfaceFieldTimeData], …]) – List ofMonitorDatainstances associated with the monitors of the originalSimulation.log (Optional[str] = None) – A string containing the log information from the simulation run.
diverged (bool = False) – A boolean flag denoting whether the simulation run diverged.
Notes
The
SimulationDataobjects store a copy of the originalSimulation:, so it can be recovered if theSimulationDatais loaded in a new session and theSimulationis no longer in memory.More importantly, the
SimulationDatacontains a reference to the data for each of the monitors within the originalSimulation. This data can be accessed directly using the name given to the monitors initially.Examples
Standalone example:
>>> import tidy3d as td >>> num_modes = 5 >>> x = [-1,1,3] >>> y = [-2,0,2,4] >>> z = [-3,-1,1,3,5] >>> f = [2e14, 3e14] >>> coords = dict(x=x[:-1], y=y[:-1], z=z[:-1], f=f) >>> grid = td.Grid(boundaries=td.Coords(x=x, y=y, z=z)) >>> scalar_field = td.ScalarFieldDataArray((1+1j) * np.random.random((2,3,4,2)), coords=coords) >>> field_monitor = td.FieldMonitor( ... size=(2,4,6), ... freqs=[2e14, 3e14], ... name='field', ... fields=['Ex'], ... colocate=True, ... ) >>> sim = td.Simulation( ... size=(2, 4, 6), ... grid_spec=td.GridSpec(wavelength=1.0), ... monitors=[field_monitor], ... run_time=2e-12, ... sources=[ ... td.UniformCurrentSource( ... size=(0, 0, 0), ... center=(0, 0.5, 0), ... polarization="Hx", ... source_time=td.GaussianPulse( ... freq0=2e14, ... fwidth=4e13, ... ), ... current_amplitude_definition="total", ... ) ... ], ... ) >>> field_data = td.FieldData(monitor=field_monitor, Ex=scalar_field, grid_expanded=grid) >>> sim_data = td.SimulationData(simulation=sim, data=(field_data,))
To save and load the
SimulationDataobject.sim_data.to_file(fname='path/to/file.hdf5') # Save a SimulationData object to a HDF5 file sim_data = SimulationData.from_file(fname='path/to/file.hdf5') # Load a SimulationData object from a HDF5 file.
Optionally, the simulation data can be loaded in a lazy mode, which only holds a reference until a field is accessed or a method is applied. This is useful to save I/O operations and memory.
sim_data = SimulationData.from_file(fname='path/to/file.hdf5', lazy=True) # Does not contain data until accessed.
See also
- Notebooks:
Quickstart: Usage in a basic simulation flow.
Attributes
Returns a TimeDataArray of field decay values over time steps.
Returns value of the field decay at the final time step.
logMethods
renormalize(normalize_index)Return a copy of the
SimulationDatawith a different source used for the normalization.source_spectrum(source_index)Get a spectrum normalization function for a given source index.
- simulation#
- data#
- diverged#
- property field_decay#
Returns a TimeDataArray of field decay values over time steps.
- property final_decay_value#
Returns value of the field decay at the final time step.
- source_spectrum(source_index)[source]#
Get a spectrum normalization function for a given source index.
- renormalize(normalize_index)[source]#
Return a copy of the
SimulationDatawith a different source used for the normalization.