tidy3d.FieldMonitor#

class tidy3d.FieldMonitor#

Monitor that records electromagnetic fields in the frequency domain.

Parameters
  • center (Tuple[float, float, float] = (0.0, 0.0, 0.0)) – [units = um]. Center of object in x, y, and z.

  • size (Tuple[NonNegativeFloat, NonNegativeFloat, NonNegativeFloat] = None) – [units = um]. Size in x, y, and z directions.

  • name (ConstrainedStrValue = None) – Unique name for monitor.

  • freqs (Union[List[float], tidynumpy, NumpyArray, List] = None) – [units = Hz]. Array or list of frequencies stored by the field monitor.

  • fields (List[Literal['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz']] = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz']) – Collection of field components to store in the monitor.

Example

>>> monitor = FieldMonitor(
...     center=(1,2,3),
...     size=(2,2,2),
...     fields=['Hx'],
...     freqs=[250e12, 300e12],
...     name='steady_state_monitor')

Show JSON schema
{
   "title": "FieldMonitor",
   "description": ":class:`Monitor` that records electromagnetic fields in the frequency domain.\n\nParameters\n----------\ncenter : Tuple[float, float, float] = (0.0, 0.0, 0.0)\n    [units = um].  Center of object in x, y, and z.\nsize : Tuple[NonNegativeFloat, NonNegativeFloat, NonNegativeFloat] = None\n    [units = um].  Size in x, y, and z directions.\nname : ConstrainedStrValue = None\n    Unique name for monitor.\nfreqs : Union[List[float], tidynumpy, NumpyArray, List] = None\n    [units = Hz].  Array or list of frequencies stored by the field monitor.\nfields : List[Literal['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz']] = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz']\n    Collection of field components to store in the monitor.\n\nExample\n-------\n>>> monitor = FieldMonitor(\n...     center=(1,2,3),\n...     size=(2,2,2),\n...     fields=['Hx'],\n...     freqs=[250e12, 300e12],\n...     name='steady_state_monitor')",
   "type": "object",
   "properties": {
      "center": {
         "title": "Center",
         "description": "Center of object in x, y, and z.",
         "default": [
            0.0,
            0.0,
            0.0
         ],
         "units": "um",
         "type": "array",
         "minItems": 3,
         "maxItems": 3,
         "items": [
            {
               "type": "number"
            },
            {
               "type": "number"
            },
            {
               "type": "number"
            }
         ]
      },
      "type": {
         "title": "Type",
         "default": "FieldMonitor",
         "enum": [
            "FieldMonitor"
         ],
         "type": "string"
      },
      "size": {
         "title": "Size",
         "description": "Size in x, y, and z directions.",
         "units": "um",
         "type": "array",
         "minItems": 3,
         "maxItems": 3,
         "items": [
            {
               "type": "number",
               "minimum": 0
            },
            {
               "type": "number",
               "minimum": 0
            },
            {
               "type": "number",
               "minimum": 0
            }
         ]
      },
      "name": {
         "title": "Name",
         "description": "Unique name for monitor.",
         "minLength": 1,
         "type": "string"
      },
      "freqs": {
         "title": "Frequencies",
         "description": "Array or list of frequencies stored by the field monitor.",
         "units": "Hz",
         "anyOf": [
            {
               "type": "array",
               "items": {
                  "type": "number"
               }
            },
            {
               "title": "NumpyArray",
               "description": "Wrapper around numpy arrays that has a well defined json schema.",
               "type": "object",
               "properties": {
                  "data_list": {
                     "title": "Data List",
                     "type": "array",
                     "items": {}
                  }
               },
               "required": [
                  "data_list"
               ]
            },
            {
               "$ref": "#/definitions/NumpyArray"
            },
            {
               "type": "array",
               "items": {}
            }
         ]
      },
      "fields": {
         "title": "Field Components",
         "description": "Collection of field components to store in the monitor.",
         "default": [
            "Ex",
            "Ey",
            "Ez",
            "Hx",
            "Hy",
            "Hz"
         ],
         "type": "array",
         "items": {
            "enum": [
               "Ex",
               "Ey",
               "Ez",
               "Hx",
               "Hy",
               "Hz"
            ],
            "type": "string"
         }
      }
   },
   "required": [
      "size",
      "name",
      "freqs"
   ],
   "additionalProperties": false,
   "definitions": {
      "NumpyArray": {
         "title": "NumpyArray",
         "description": "Wrapper around numpy arrays that has a well defined json schema.",
         "type": "object",
         "properties": {
            "data_list": {
               "title": "Data List",
               "type": "array",
               "items": {}
            }
         },
         "required": [
            "data_list"
         ]
      }
   }
}

Fields

storage_size(num_cells: int, tmesh: tidy3d.components.types.Array) int#

Size of monitor storage given the number of points after discretization.

Parameters
  • num_cells (int) – Number of grid cells within the monitor after discretization by a Simulation.

  • tmesh (Array) – The discretized time mesh of a Simulation.

Returns

Number of bytes to be stored in monitor.

Return type

int

surfaces() List[tidy3d.components.monitor.FieldMonitor]#

Returns a list of 6 monitors corresponding to each surface of the field monitor. The output monitors are stored in the order [x-, x+, y-, y+, z-, z+], where x, y, and z denote which axis is perpendicular to that surface, while “-” and “+” denote the direction of the normal vector of that surface. Each output monitor will have the same frequency/time data as the calling object. Its name will be that of the calling object appended with the above symbols. E.g., if the calling object’s name is “field”, the x+ monitor’s name will be “field_x+”. Does not work when the calling monitor has zero volume.

Returns

List of 6 surface monitors for each side of the field monitor.

Return type

List[FieldMonitor]

Example

>>> volume_monitor = FieldMonitor(center=(0,0,0), size=(1,2,3), freqs=[2e14], name='field')
>>> surface_monitors = volume_monitor.surfaces()