{
  "title": "SurfaceFieldTimeMonitor",
  "public_path": "flex_rf.tidy3d.SurfaceFieldTimeMonitor",
  "lookup_path": "tidy3d.SurfaceFieldTimeMonitor",
  "slug": "flex_rf/tidy3d/SurfaceFieldTimeMonitor",
  "public_url": "/rf/latest/autogenerated/flex_rf/tidy3d/surfacefieldtimemonitor/",
  "object_kind": "class",
  "introduction": "`Monitor` that records electromagnetic fields in the time domain on PEC and lossy metal surfaces.",
  "notes": "`SurfaceFieldTimeMonitor` objects are best used to monitor the time dependence of the fields\non PEC (`PECMedium`) and lossy metal (`LossyMetalMedium`) surfaces. They can also be used to create\n“animations” of the field pattern evolution.\n\nTo create an animation, we need to capture the frames at different time instances of the simulation. This can\nbe done by using a `SurfaceFieldTimeMonitor`. Usually a FDTD simulation contains a large number of time steps\nand grid points. Recording the field at every time step and grid point will result in a large dataset. For\nthe purpose of making animations, this is usually unnecessary.",
  "examples": "```python\nimport tidy3d as td\nold_logging_level = td.config.logging_level\ntd.config.logging_level = \"ERROR\"\nmonitor = SurfaceFieldTimeMonitor(\n    center=(1,2,3),\n    size=(2,2,2),\n    fields=['H'],\n    start=1e-13,\n    stop=5e-13,\n    interval=2,\n    name='movie_monitor')\ntd.config.logging_level = old_logging_level\n```",
  "references": "",
  "signature": "class SurfaceFieldTimeMonitor(AbstractSurfaceMonitor, TimeMonitor)",
  "source": {
    "path": "flex/public/tidy3d/tidy3d/components/monitor.py",
    "url": "",
    "lineno": 2162,
    "endlineno": 2232
  },
  "bases": [
    "AbstractSurfaceMonitor",
    "TimeMonitor"
  ],
  "parameter_rows": [
    {
      "name": "attrs",
      "annotation": "dict",
      "default": "factory: dict",
      "description": "Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, `attrs` are mutable. For example, the following is allowed for setting an `attr` `obj.attrs['foo'] = bar`. Also note that Tidy3D will raise a `TypeError` if `attrs` contain objects that can not be serialized. One can check if `attrs` are serializable by calling `obj.model_dump_json()`.",
      "origin": "inherited"
    },
    {
      "name": "center",
      "annotation": "TracedCoordinate",
      "default": "(0.0, 0.0, 0.0)",
      "description": "Center of object in x, y, and z.",
      "origin": "inherited"
    },
    {
      "name": "size",
      "annotation": "TracedSize",
      "default": "",
      "description": "Size in x, y, and z directions.",
      "origin": "inherited"
    },
    {
      "name": "name",
      "annotation": "str",
      "default": "",
      "description": "Unique name for monitor.",
      "origin": "inherited"
    },
    {
      "name": "interval_space",
      "annotation": "tuple[Literal[1], Literal[1], Literal[1]]",
      "default": "(1, 1, 1)",
      "description": "Number of grid step intervals between monitor recordings. Only the value of 1 (no downsampling) is currently supported for surface monitors.",
      "origin": "inherited"
    },
    {
      "name": "colocate",
      "annotation": "Literal[True]",
      "default": "True",
      "description": "For surface monitors fields are always colocated on surface.",
      "origin": "inherited"
    },
    {
      "name": "use_colocated_integration",
      "annotation": "Literal[True]",
      "default": "True",
      "description": "Whether to use colocated fields for flux, dot products, and overlap integrals. Hard-coded to `True` for most monitor types. Can be toggled on field and overlap monitors.",
      "origin": "inherited"
    },
    {
      "name": "start",
      "annotation": "NonNegativeFloat",
      "default": "0.0",
      "description": "Time at which to start monitor recording.",
      "origin": "inherited"
    },
    {
      "name": "stop",
      "annotation": "NonNegativeFloat | None",
      "default": "None",
      "description": "Time at which to stop monitor recording. If not specified, record until end of simulation.",
      "origin": "inherited"
    },
    {
      "name": "interval",
      "annotation": "PositiveInt | None",
      "default": "None",
      "description": "Sampling rate of the monitor: number of time steps between each measurement. Set `interval` to 1 for the highest possible resolution in time. Higher integer values downsample the data by measuring every `interval` time steps. This can be useful for reducing data storage as needed by the application.",
      "origin": "inherited"
    },
    {
      "name": "fields",
      "annotation": "tuple[EMSurfaceField, ...]",
      "default": "['E', 'H']",
      "description": "Collection of field components to store in the monitor.",
      "origin": "inherited"
    }
  ],
  "members": [
    {
      "name": "storage_size",
      "kind": "function",
      "signature": "storage_size(num_cells: int, tmesh: ArrayFloat1D)",
      "description": "Size of monitor storage given the number of points after discretization. In general, this is severely overestimated for surface monitors."
    }
  ],
  "group": "flex_rf.tidy3d"
}
