tidy3d.FieldProjectionKSpaceMonitor#

class tidy3d.FieldProjectionKSpaceMonitor#

Monitor that samples electromagnetic near fields in the frequency domain and projects them on an observation plane defined in k-space.

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]) – [units = um]. Size in x, y, and z directions.

  • name (ConstrainedStrValue) – Unique name for monitor.

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

  • apodization (ApodizationSpec = ApodizationSpec(start=None, end=None, width=None, type='ApodizationSpec')) – Sets parameters of (optional) apodization. Apodization applies a windowing function to the Fourier transform of the time-domain fields into frequency-domain ones, and can be used to truncate the beginning and/or end of the time signal, for example to eliminate the source pulse when studying the eigenmodes of a system. Note: apodization affects the normalization of the frequency-domain fields.

  • normal_dir (Optional[Literal['+', '-']] = None) – Direction of the surface monitor’s normal vector w.r.t. the positive x, y or z unit vectors. Must be one of '+' or '-'. Applies to surface monitors only, and defaults to '+' if not provided.

  • exclude_surfaces (Optional[Tuple[Literal['x-', 'x+', 'y-', 'y+', 'z-', 'z+'], ...]] = None) – Surfaces to exclude in the integration, if a volume monitor.

  • custom_origin (Optional[Tuple[float, float, float]] = None) – [units = um]. Local origin used for defining observation points. If None, uses the monitor’s center.

  • far_field_approx (bool = True) – Whether to enable the far field approximation when projecting fields.

  • proj_axis (Literal[0, 1, 2]) – Axis along which the observation plane is oriented.

  • proj_distance (float = 1000000.0) – [units = um]. Radial distance of the projection points from local_origin.

  • ux (Union[Tuple[float, ...], Array]) – Local x component of wave vectors on the observation plane, relative to local_origin and oriented with respect to proj_axis, normalized by (2*pi/lambda) where lambda is the wavelength associated with the background medium. Must be in the range [-1, 1].

  • uy (Union[Tuple[float, ...], Array]) – Local y component of wave vectors on the observation plane, relative to local_origin and oriented with respect to proj_axis, normalized by (2*pi/lambda) where lambda is the wavelength associated with the background medium. Must be in the range [-1, 1].

Example

>>> monitor = FieldProjectionKSpaceMonitor(
...     center=(1,2,3),
...     size=(2,2,2),
...     freqs=[250e12, 300e12],
...     name='n2f_monitor',
...     custom_origin=(1,2,3),
...     proj_axis=2,
...     ux=[0.1,0.2],
...     uy=[0.3,0.4,0.5]
...     )

Show JSON schema
{
   "title": "FieldProjectionKSpaceMonitor",
   "description": ":class:`Monitor` that samples electromagnetic near fields in the frequency domain\nand projects them on an observation plane defined in k-space.\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]\n    [units = um].  Size in x, y, and z directions.\nname : ConstrainedStrValue\n    Unique name for monitor.\nfreqs : Union[Tuple[float, ...], Array]\n    [units = Hz].  Array or list of frequencies stored by the field monitor.\napodization : ApodizationSpec = ApodizationSpec(start=None, end=None, width=None, type='ApodizationSpec')\n    Sets parameters of (optional) apodization. Apodization applies a windowing function to the Fourier transform of the time-domain fields into frequency-domain ones, and can be used to truncate the beginning and/or end of the time signal, for example to eliminate the source pulse when studying the eigenmodes of a system. Note: apodization affects the normalization of the frequency-domain fields.\nnormal_dir : Optional[Literal['+', '-']] = None\n    Direction of the surface monitor's normal vector w.r.t. the positive x, y or z unit vectors. Must be one of ``'+'`` or ``'-'``. Applies to surface monitors only, and defaults to ``'+'`` if not provided.\nexclude_surfaces : Optional[Tuple[Literal['x-', 'x+', 'y-', 'y+', 'z-', 'z+'], ...]] = None\n    Surfaces to exclude in the integration, if a volume monitor.\ncustom_origin : Optional[Tuple[float, float, float]] = None\n    [units = um].  Local origin used for defining observation points. If ``None``, uses the monitor's center.\nfar_field_approx : bool = True\n    Whether to enable the far field approximation when projecting fields.\nproj_axis : Literal[0, 1, 2]\n    Axis along which the observation plane is oriented.\nproj_distance : float = 1000000.0\n    [units = um].  Radial distance of the projection points from ``local_origin``.\nux : Union[Tuple[float, ...], Array]\n    Local x component of wave vectors on the observation plane, relative to ``local_origin`` and oriented with respect to ``proj_axis``, normalized by (2*pi/lambda) where lambda is the wavelength associated with the background medium. Must be in the range [-1, 1].\nuy : Union[Tuple[float, ...], Array]\n    Local y component of wave vectors on the observation plane, relative to ``local_origin`` and oriented with respect to ``proj_axis``, normalized by (2*pi/lambda) where lambda is the wavelength associated with the background medium. Must be in the range [-1, 1].\n\nExample\n-------\n>>> monitor = FieldProjectionKSpaceMonitor(\n...     center=(1,2,3),\n...     size=(2,2,2),\n...     freqs=[250e12, 300e12],\n...     name='n2f_monitor',\n...     custom_origin=(1,2,3),\n...     proj_axis=2,\n...     ux=[0.1,0.2],\n...     uy=[0.3,0.4,0.5]\n...     )",
   "type": "object",
   "properties": {
      "type": {
         "title": "Type",
         "default": "FieldProjectionKSpaceMonitor",
         "enum": [
            "FieldProjectionKSpaceMonitor"
         ],
         "type": "string"
      },
      "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"
            }
         ]
      },
      "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": "Array Like",
               "description": "Accepts sequence (tuple, list, numpy array) and converts to tuple.",
               "type": "tuple",
               "properties": {},
               "required": []
            }
         ]
      },
      "apodization": {
         "title": "Apodization Specification",
         "description": "Sets parameters of (optional) apodization. Apodization applies a windowing function to the Fourier transform of the time-domain fields into frequency-domain ones, and can be used to truncate the beginning and/or end of the time signal, for example to eliminate the source pulse when studying the eigenmodes of a system. Note: apodization affects the normalization of the frequency-domain fields.",
         "default": {
            "start": null,
            "end": null,
            "width": null,
            "type": "ApodizationSpec"
         },
         "allOf": [
            {
               "$ref": "#/definitions/ApodizationSpec"
            }
         ]
      },
      "normal_dir": {
         "title": "Normal vector orientation",
         "description": "Direction of the surface monitor's normal vector w.r.t. the positive x, y or z unit vectors. Must be one of ``'+'`` or ``'-'``. Applies to surface monitors only, and defaults to ``'+'`` if not provided.",
         "enum": [
            "+",
            "-"
         ],
         "type": "string"
      },
      "exclude_surfaces": {
         "title": "Excluded surfaces",
         "description": "Surfaces to exclude in the integration, if a volume monitor.",
         "type": "array",
         "items": {
            "enum": [
               "x-",
               "x+",
               "y-",
               "y+",
               "z-",
               "z+"
            ],
            "type": "string"
         }
      },
      "custom_origin": {
         "title": "Local origin",
         "description": "Local origin used for defining observation points. If ``None``, uses the monitor's center.",
         "units": "um",
         "type": "array",
         "minItems": 3,
         "maxItems": 3,
         "items": [
            {
               "type": "number"
            },
            {
               "type": "number"
            },
            {
               "type": "number"
            }
         ]
      },
      "far_field_approx": {
         "title": "Far field approximation",
         "description": "Whether to enable the far field approximation when projecting fields.",
         "default": true,
         "type": "boolean"
      },
      "proj_axis": {
         "title": "Projection plane axis",
         "description": "Axis along which the observation plane is oriented.",
         "enum": [
            0,
            1,
            2
         ],
         "type": "integer"
      },
      "proj_distance": {
         "title": "Projection distance",
         "description": "Radial distance of the projection points from ``local_origin``.",
         "default": 1000000.0,
         "units": "um",
         "type": "number"
      },
      "ux": {
         "title": "Normalized kx",
         "description": "Local x component of wave vectors on the observation plane, relative to ``local_origin`` and oriented with respect to ``proj_axis``, normalized by (2*pi/lambda) where lambda is the wavelength associated with the background medium. Must be in the range [-1, 1].",
         "anyOf": [
            {
               "type": "array",
               "items": {
                  "type": "number"
               }
            },
            {
               "title": "Array Like",
               "description": "Accepts sequence (tuple, list, numpy array) and converts to tuple.",
               "type": "tuple",
               "properties": {},
               "required": []
            }
         ]
      },
      "uy": {
         "title": "Normalized ky",
         "description": "Local y component of wave vectors on the observation plane, relative to ``local_origin`` and oriented with respect to ``proj_axis``, normalized by (2*pi/lambda) where lambda is the wavelength associated with the background medium. Must be in the range [-1, 1].",
         "anyOf": [
            {
               "type": "array",
               "items": {
                  "type": "number"
               }
            },
            {
               "title": "Array Like",
               "description": "Accepts sequence (tuple, list, numpy array) and converts to tuple.",
               "type": "tuple",
               "properties": {},
               "required": []
            }
         ]
      }
   },
   "required": [
      "size",
      "name",
      "freqs",
      "proj_axis",
      "ux",
      "uy"
   ],
   "additionalProperties": false,
   "definitions": {
      "ApodizationSpec": {
         "title": "ApodizationSpec",
         "description": "Stores specifications for the apodizaton of frequency-domain monitors.\n\nParameters\n----------\nstart : Optional[NonNegativeFloat] = None\n    [units = sec].  Defines the time at which the start apodization ends.\nend : Optional[NonNegativeFloat] = None\n    [units = sec].  Defines the time at which the end apodization begins.\nwidth : Optional[PositiveFloat] = None\n    [units = sec].  Characteristic decay length of the apodization function.\n\nExample\n-------\n>>> apod_spec = ApodizationSpec(start=1, end=2, width=0.5)",
         "type": "object",
         "properties": {
            "start": {
               "title": "Start Interval",
               "description": "Defines the time at which the start apodization ends.",
               "units": "sec",
               "minimum": 0,
               "type": "number"
            },
            "end": {
               "title": "End Interval",
               "description": "Defines the time at which the end apodization begins.",
               "units": "sec",
               "minimum": 0,
               "type": "number"
            },
            "width": {
               "title": "Apodization Width",
               "description": "Characteristic decay length of the apodization function.",
               "units": "sec",
               "exclusiveMinimum": 0,
               "type": "number"
            },
            "type": {
               "title": "Type",
               "default": "ApodizationSpec",
               "enum": [
                  "ApodizationSpec"
               ],
               "type": "string"
            }
         },
         "additionalProperties": false
      }
   }
}

attribute proj_axis: Literal[0, 1, 2] [Required]#

Axis along which the observation plane is oriented.

Validated by
  • check_excluded_surfaces

  • normal_dir_exists_for_surface

  • reciprocal_vector_range

attribute proj_distance: float = 1000000.0#

Radial distance of the projection points from local_origin.

Validated by
  • check_excluded_surfaces

  • normal_dir_exists_for_surface

  • reciprocal_vector_range

attribute ux: Union[Tuple[float, ...], tidy3d.components.types.Array] [Required]#

Local x component of wave vectors on the observation plane, relative to local_origin and oriented with respect to proj_axis, normalized by (2*pi/lambda) where lambda is the wavelength associated with the background medium. Must be in the range [-1, 1].

Validated by
  • check_excluded_surfaces

  • normal_dir_exists_for_surface

  • reciprocal_vector_range

attribute uy: Union[Tuple[float, ...], tidy3d.components.types.Array] [Required]#

Local y component of wave vectors on the observation plane, relative to local_origin and oriented with respect to proj_axis, normalized by (2*pi/lambda) where lambda is the wavelength associated with the background medium. Must be in the range [-1, 1].

Validated by
  • check_excluded_surfaces

  • normal_dir_exists_for_surface

  • reciprocal_vector_range

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

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