{ "cells": [ { "cell_type": "markdown", "id": "1d266682", "metadata": {}, "source": [ "# Tidy3D Primer\n", "\n", "This notebook will walk through the basic working principles of the Tidy3D front end, including setting up and post processing simulation results.\n", "\n", "Note that this content serves as a reference for the details of operating the front end, but a lot of content is covered indirectly in the other example notebooks." ] }, { "cell_type": "code", "execution_count": 1, "id": "1382cd8c", "metadata": { "tags": [] }, "outputs": [], "source": [ "# First, let's import the main packages we'll need\n", "import numpy as np\n", "import matplotlib.pylab as plt\n", "import tidy3d as td\n" ] }, { "cell_type": "markdown", "id": "acd56cab", "metadata": {}, "source": [ "## Basics\n", "\n", "A Tidy3D simulation is essentially a python class that combines many Tidy3D \"components\", which store the specification for how we will run the simulation on our servers.\n", "\n", "Here we will discuss some of the basics that apply to all of these components.\n", "\n", "Topics covered will include:\n", "\n", "- Defining Tidy3D components.\n", "\n", "- Saving and loading from file.\n", "\n", "- Getting help / debugging.\n", "\n", "- logging\n", "\n", "### Background\n", "\n", "All Tidy3d components are defined using the [pydantic](https://pydantic-docs.helpmanual.io) package. This means that each tidy3d object corresponds to a data structure that has rigidly defined allowable types and values, which get validated automatically whenever you initialize an object.\n", "\n", "This has several advantages, including.\n", "\n", "- Catching bugs in the tidy3d components as early as possible.\n", "\n", "- Automatically generated schema for tidy3d simulation specifications.\n", "\n", "- Simple and reliable IO, including exporting to various formats such as dictionaries or json.\n", "\n", "### Defining Tidy3d Components\n", "\n", "It also requires a bit more work on the user side to define these components, for example\n", "\n", "- All tidy3d components must use keyword arguments in their definitions, eg. `Medium(2.0)` becomes `Medium(permittivity=2.0)` to be explicit.\n", "\n", "- Components are immutable to avoid complications from not validating changes on components. This means modifying a component requires calling `new_obj = old_obj.updated_copy(**new_values)`.\n", "\n", "However, these decisions were made to make the overall use of Tidy3D more explicit and ensure that components are safely validated at all times, which pays off in the long run.\n", "\n", "Here's one example of what would happen if a user tried to pass fields (in this case, the relative permittivity of a medium) without using keyword arguments), followed by the correct way. We see that the positional argument construction fails. This is good practice in general to avoid bugs, but pydantic and Tidy3D require it." ] }, { "cell_type": "code", "execution_count": 2, "id": "19eab659", "metadata": {}, "outputs": [], "source": [ "# wrong way\n", "try:\n", " td.Medium(2.0)\n", "except Exception as e:\n", " td.log.info(e)\n", "\n", "# correct way\n", "m = td.Medium(permittivity=2.0)\n" ] }, { "cell_type": "markdown", "id": "8ee136f4", "metadata": {}, "source": [ "### Saving and Loading Tidy3d Components\n", "\n", "All tidy3d components can be saved to file as json or yaml format using the `instance.to_file(path)` and `class.from_file(path)` methods.\n", "\n", "For example, let's save and load a [td.Box](../_autosummary/tidy3d.Box.html) instance." ] }, { "cell_type": "code", "execution_count": 3, "id": "20e27567", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "type='Box' center=(1.0, 2.0, 3.0) size=(2.0, 2.0, 3.0)\n", "type='Box' center=(1.0, 2.0, 3.0) size=(2.0, 2.0, 3.0)\n", "True\n" ] } ], "source": [ "my_box = td.Box(center=(1, 2, 3), size=(2, 2, 3))\n", "\n", "my_box.to_file(\"data/box.json\")\n", "\n", "# note, `from_file` is a @classmethod so need to call it from `td.Box` not `my_box`.\n", "your_box = td.Box.from_file(\"data/box.json\")\n", "\n", "print(my_box)\n", "print(your_box)\n", "print(my_box == your_box)\n" ] }, { "cell_type": "markdown", "id": "bcb67b0f-970d-44d9-82d3-2060ae4e9ec3", "metadata": {}, "source": [ "Similarly, the component can be converted to a `dict` or `str` in json format. Many other options exist and the [pydantic documentation](https://docs.pydantic.dev/usage/exporting_models/) is a good place to see what else is supported." ] }, { "cell_type": "code", "execution_count": 4, "id": "5c05d911-dfd0-4d5f-ba60-54eb59d2a041", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\"type\": \"Box\", \"center\": [1.0, 2.0, 3.0], \"size\": [2.0, 2.0, 3.0]}\n", "{'type': 'Box', 'center': (1.0, 2.0, 3.0), 'size': (2.0, 2.0, 3.0)}\n" ] } ], "source": [ "print(my_box.json())\n", "print(my_box.dict())\n" ] }, { "cell_type": "markdown", "id": "1f1b74db", "metadata": {}, "source": [ "### Getting Help\n", "\n", "Sometimes you might want to get some information about a component without needing to look at the documentation. For this, each tidy3d component has a `.help()` method that will print out information about the stored data inside of the component.\n", "\n", "Here's an example." ] }, { "cell_type": "code", "execution_count": 5, "id": "b34de32a", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 <class 'tidy3d.components.monitor.FieldMonitor'> \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n",
       "\u2502 :class:`Monitor` that records electromagnetic fields in the frequency domain.                  \u2502\n",
       "\u2502                                                                                                \u2502\n",
       "\u2502 \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e \u2502\n",
       "\u2502 \u2502 FieldMonitor(                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   type='FieldMonitor',                                                                   \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   center=(0.0, 0.0, 0.0),                                                                \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   size=(2.0, 2.0, 0.0),                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   name='monitor',                                                                        \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   freqs=(200000000000000.0,),                                                            \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   apodization=ApodizationSpec(                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   start=None,                                                                        \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   end=None,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   width=None,                                                                        \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   type='ApodizationSpec'                                                             \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   ),                                                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   fields=('Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'),                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   interval_space=(1, 1, 1),                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   colocate=False                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 )                                                                                          \u2502 \u2502\n",
       "\u2502 \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f \u2502\n",
       "\u2502                                                                                                \u2502\n",
       "\u2502    apodization = ApodizationSpec(start=None, end=None, width=None, type='ApodizationSpec')     \u2502\n",
       "\u2502   bounding_box = Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 0.0))                 \u2502\n",
       "\u2502         bounds = ((-1.0, -1.0, 0.0), (1.0, 1.0, 0.0))                                          \u2502\n",
       "\u2502         center = (0.0, 0.0, 0.0)                                                               \u2502\n",
       "\u2502       colocate = False                                                                         \u2502\n",
       "\u2502         fields = ('Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz')                                          \u2502\n",
       "\u2502          freqs = (200000000000000.0,)                                                          \u2502\n",
       "\u2502       geometry = Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 0.0))                 \u2502\n",
       "\u2502 interval_space = (1, 1, 1)                                                                     \u2502\n",
       "\u2502           name = 'monitor'                                                                     \u2502\n",
       "\u2502    plot_params = PlotParams(                                                                   \u2502\n",
       "\u2502                      alpha=0.4,                                                                \u2502\n",
       "\u2502                      edgecolor='orange',                                                       \u2502\n",
       "\u2502                      facecolor='orange',                                                       \u2502\n",
       "\u2502                      fill=True,                                                                \u2502\n",
       "\u2502                      hatch=None,                                                               \u2502\n",
       "\u2502                      linewidth=3.0,                                                            \u2502\n",
       "\u2502                      type='PlotParams'                                                         \u2502\n",
       "\u2502                  )                                                                             \u2502\n",
       "\u2502           size = (2.0, 2.0, 0.0)                                                               \u2502\n",
       "\u2502           type = 'FieldMonitor'                                                                \u2502\n",
       "\u2502      zero_dims = [2]                                                                           \u2502\n",
       "\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n",
       "
\n" ], "text/plain": [ "\u001b[34m\u256d\u2500\u001b[0m\u001b[34m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u001b[0m\u001b[1;34m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'tidy3d.components.monitor.FieldMonitor'\u001b[0m\u001b[1;34m>\u001b[0m\u001b[34m \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[0m\u001b[34m\u2500\u256e\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[36m:class:`Monitor` that records electromagnetic fields in the frequency domain.\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[1;35mFieldMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mname\u001b[0m=\u001b[32m'monitor'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mfreqs\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m200000000000000.0\u001b[0m,\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mapodization\u001b[0m=\u001b[1;35mApodizationSpec\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mstart\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mend\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mwidth\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'ApodizationSpec'\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mfields\u001b[0m=\u001b[1m(\u001b[0m\u001b[32m'Ex'\u001b[0m, \u001b[32m'Ey'\u001b[0m, \u001b[32m'Ez'\u001b[0m, \u001b[32m'Hx'\u001b[0m, \u001b[32m'Hy'\u001b[0m, \u001b[32m'Hz'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33minterval_space\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1\u001b[0m, \u001b[1;36m1\u001b[0m, \u001b[1;36m1\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mcolocate\u001b[0m=\u001b[3;91mFalse\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mapodization\u001b[0m = \u001b[1;35mApodizationSpec\u001b[0m\u001b[1m(\u001b[0m\u001b[33mstart\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mend\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mwidth\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'ApodizationSpec'\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mbounding_box\u001b[0m = \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mbounds\u001b[0m = \u001b[1m(\u001b[0m\u001b[1m(\u001b[0m\u001b[1;36m-1.0\u001b[0m, \u001b[1;36m-1.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mcenter\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mcolocate\u001b[0m = \u001b[3;91mFalse\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mfields\u001b[0m = \u001b[1m(\u001b[0m\u001b[32m'Ex'\u001b[0m, \u001b[32m'Ey'\u001b[0m, \u001b[32m'Ez'\u001b[0m, \u001b[32m'Hx'\u001b[0m, \u001b[32m'Hy'\u001b[0m, \u001b[32m'Hz'\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mfreqs\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m200000000000000.0\u001b[0m,\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mgeometry\u001b[0m = \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33minterval_space\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m1\u001b[0m, \u001b[1;36m1\u001b[0m, \u001b[1;36m1\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mname\u001b[0m = \u001b[32m'monitor'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mplot_params\u001b[0m = \u001b[1;35mPlotParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.4\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33medgecolor\u001b[0m=\u001b[32m'orange'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfacecolor\u001b[0m=\u001b[32m'orange'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfill\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mhatch\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mlinewidth\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33msize\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mtype\u001b[0m = \u001b[32m'FieldMonitor'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mzero_dims\u001b[0m = \u001b[1m[\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1m]\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "monitor = td.FieldMonitor(size=(2, 2, 0), freqs=[200e12], name=\"monitor\")\n", "\n", "monitor.help()\n" ] }, { "cell_type": "markdown", "id": "096ee0ec-5a39-4143-9c29-a5bb086efbe8", "metadata": {}, "source": [ "Alternatively, one can use the standard `help(cls)` syntax to get a look at the docstring of a component." ] }, { "cell_type": "code", "execution_count": 6, "id": "c21b0749-9ab2-489e-b4a4-d977f3ff9dd1", "metadata": {}, "outputs": [], "source": [ "# help(td.FieldMonitor) # commented out for brevity\n" ] }, { "cell_type": "markdown", "id": "fb0ac2bf-984a-472f-8a01-b886ffe9a18e", "metadata": {}, "source": [ "### Logging\n", "\n", "Tidy3D logs information based on the following levels ranked from least to most critical.\n", "```\n", "\"DEBUG\"\n", "\"INFO\"\n", "\"WARNING\"\n", "\"ERROR\"\n", "\"CRITICAL\"\n", "```\n", "The \"logging level\" controls what types of messages get shown. The default logging level is `\"WARNING\"`, which means logging messages of \"warning\" or more critical (\"error\", \"critical\") will be shown, whereas \"info\" and \"debug\" messages will not. The \"info\" and \"debug\" messages are sometimes useful for the user, but are mainly for debugging purposes.\n", "\n", "The user can change this logging level through modifying the `tidy3d.config.logging_level` value, for example\n", "```\n", "tidy3d.config.logging_level = \"INFO\"\n", "```\n", "will make it so that \"info\" messages are shown in addition to the \"warning\", \"error\", and \"critical\" messages." ] }, { "cell_type": "markdown", "id": "d91a3920", "metadata": {}, "source": [ "## Core Components\n", "\n", "Here we will discuss the core components of the package (sources, monitors, etc) and how they are defined.\n", "\n", "Topics covered will include:\n", "\n", "- Mediums.\n", "\n", "- Geometries.\n", "\n", "- Structures.\n", "\n", "- Sources.\n", "\n", "- Monitors.\n", "\n", "- Modes.\n", "\n", "- PML / Absorbing boundaries.\n", "\n", "- Simulations." ] }, { "cell_type": "markdown", "id": "c09c862b", "metadata": {}, "source": [ "### Mediums\n", "\n", "Mediums define the optical properties of the materials within the simulation.\n", "\n", "#### PEC\n", "The simplest medium is `td.PEC`, which just signifies a perfect electrical conductor (no E field allowed within)." ] }, { "cell_type": "code", "execution_count": 7, "id": "a197e0c0", "metadata": { "tags": [] }, "outputs": [], "source": [ "pec_medium = td.PEC\n" ] }, { "cell_type": "markdown", "id": "345d55ad", "metadata": {}, "source": [ "#### Non-dispersive mediums\n", "Non-dispersive mediums are defined using the [Medium](../_autosummary/tidy3d.Medium.html) object and can be specified by either `permittivity` and `conductivity` (optional) values, or from `n`, `k` refractive index values." ] }, { "cell_type": "code", "execution_count": 8, "id": "6bde0e4e", "metadata": { "tags": [] }, "outputs": [], "source": [ "lossless_dielectric = td.Medium(permittivity=4.0)\n", "lossy_dielectric = td.Medium(permittivity=4.0, conductivity=1.0)\n", "lossy_dielectric_from_nk = td.Medium.from_nk(n=2.0, k=0.1, freq=150e12)\n" ] }, { "cell_type": "markdown", "id": "598daf38", "metadata": {}, "source": [ "#### Anisotropic mediums\n", "\n", "Tidy3d currently only supports *diagonally* anisotropic media without dispersion, although fully anisotropic media will be available shortly.\n", "\n", "This kind of medium can be simply defined by specifying three [Medium](../_autosummary/tidy3d.Medium.html) objects for the xx, yy, zz components of the permittivity / conductivity tensor.\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "e7a92005", "metadata": { "tags": [] }, "outputs": [], "source": [ "anisotropic_medium = td.AnisotropicMedium(\n", " xx=lossless_dielectric, yy=lossy_dielectric, zz=lossy_dielectric_from_nk\n", ")\n" ] }, { "cell_type": "markdown", "id": "84b4fca5", "metadata": {}, "source": [ "#### Dispersive mediums\n", "\n", "Dispersive mediums can be defined in three ways:\n", "\n", "- Imported from our [material_library](../material_library.html).\n", "\n", "- Defined directly by specifying the parameters in the various supplied dispersive models.\n", "\n", "- Fitted to optical n-k data using the dispersion fitting tool plugin (more info later)." ] }, { "cell_type": "code", "execution_count": 10, "id": "43618ec5", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "variants for silver include: ['Rakic1998BB', 'JohnsonChristy1972', 'RakicLorentzDrude1998', 'Yang2015Drude']\n" ] } ], "source": [ "# material library\n", "silver = td.material_library[\"Ag\"]\n", "silver_variants = silver.variants\n", "print(\"variants for silver include: \", list(silver_variants.keys()))\n", "silver = silver_variants[\"JohnsonChristy1972\"]\n", "\n", "# models\n", "lorentz_model = td.Lorentz(eps_inf=2.0, coeffs=[(1, 2, 3), (4, 5, 6)])\n", "sellmeier_model = td.Sellmeier(coeffs=[(1, 2), (3, 4)])\n" ] }, { "cell_type": "markdown", "id": "1c95eada", "metadata": {}, "source": [ "### Medium Methods\n", "\n", "The complex-valued permittivity of a medium at a given frequency can be sampled using the `.eps_model(freq)` method.\n", "\n", "And the n, k values can be plotted over a frequency range using the `.plot(freqs)` method." ] }, { "cell_type": "code", "execution_count": 11, "id": "789f0ac9", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "complex relative permittivity at freqs_hz = \n", "\t [4.+359.50207169j 4.+358.42679132j 4.+357.35792415j ... 4. +90.01053372j\n", " 4. +89.94297515j 4. +89.87551792j]\n", "\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQHElEQVR4nO3dd3hUVcLH8d/MpANJgIQUCBC6IG1BYrCAGgnIIliRVSkCvu6CirHiSlF5N+IKosKSRUFw7b4qdhCpIm0BUbHQjNQkgJIMCZA29/1jkkmGTCADadx8P89znpl77rnnnnNx2R+3jcUwDEMAAAC44FlregAAAACoHAQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7ADXOYrFo6tSpruWFCxfKYrHot99+q7ExVVTLli01cuRI1/KqVatksVi0atWqGhtTZZg6daosFktNDwOAlwh2AAAAJkGwA1Dr3HnnnTp58qRatGhR00Px2pVXXqmTJ0/qyiuvrOmhnJcnnnhCJ0+erOlhAPCST00PAABOZ7PZZLPZanoY58RqtSogIKCmh+HRqVOn5OfnJ6v17P+m9/HxkY8P/xcBXGg4YwfUccX3Uu3cuVN33HGHQkJCFB4erkmTJskwDO3fv1+DBw9WcHCwIiMjNWPGjDJ95ObmasqUKWrTpo38/f0VExOjRx55RLm5uWXaPfDAAwoPD1eDBg10/fXX68CBA2X683SP3en34RU7/R634m3Xrl2r++67T+Hh4QoNDdX//M//KC8vT5mZmRo+fLgaNmyohg0b6pFHHpFhGGc9ToZhaNq0aWrWrJmCgoJ01VVX6ccffyzTztM9drt27dJNN92kyMhIBQQEqFmzZrrtttuUlZXlNr/x48frjTfeUPv27RUQEKAePXpozZo1ZfZx8OBB3XXXXYqIiJC/v786deqkBQsWeBzH22+/rSeeeEJNmzZVUFCQ7Ha78vPz9eSTT6pt27YKCAhQ48aNdfnll2vZsmWu7T3dY1dQUKCnn35arVu3lr+/v1q2bKnHH3+8zJ9zy5Yt9ec//1lr165Vr169FBAQoFatWum1114763EGcH745xgASdLQoUN10UUX6ZlnntFnn32madOmqVGjRvr3v/+tq6++WtOnT9cbb7yhhx56SJdcconrUqPD4dD111+vtWvX6u6779ZFF12kH374Qc8//7x27typxYsXu/YxZswYvf766/rLX/6i3r17a8WKFRo4cGCVzOfee+9VZGSknnzySW3YsEHz5s1TaGio1q1bp+bNm+sf//iHPv/8c/3zn//UxRdfrOHDh5+xv8mTJ2vatGm67rrrdN1112nr1q3q16+f8vLyzrhdXl6eEhMTlZub6xrTwYMH9emnnyozM1MhISGutqtXr9Y777yj++67T/7+/vrXv/6l/v37a9OmTbr44oslSRkZGbr00ktdQTA8PFxffPGFRo8eLbvdrgkTJrjt/+mnn5afn58eeugh5ebmys/PT1OnTlVycrLGjBmjXr16yW63a/Pmzdq6dauuvfbacucyZswYLVq0SDfffLMefPBBbdy4UcnJyfr555/14YcfurXdvXu3br75Zo0ePVojRozQggULNHLkSPXo0UOdOnU64zEDcB4MAHXalClTDEnG3Xff7aorKCgwmjVrZlgsFuOZZ55x1R87dswIDAw0RowY4ar7z3/+Y1itVuPrr7926zclJcWQZHzzzTeGYRjGtm3bDEnG3/72N7d2f/nLXwxJxpQpU1x1r776qiHJSE1NddWd3qZYixYt3MZTvG1iYqLhcDhc9fHx8YbFYjHuueeeMvPs06fPmQ6RcfjwYcPPz88YOHCgW5+PP/64Iclt/ytXrjQkGStXrjQMwzC+/fZbQ5Lx3nvvnXEfkgxJxubNm111e/fuNQICAowbbrjBVTd69GgjKirKOHr0qNv2t912mxESEmKcOHHCbRytWrVy1RXr2rWrMXDgwDOOp/i/i2LFf35jxoxxa/fQQw8ZkowVK1a46lq0aGFIMtasWeOqO3z4sOHv7288+OCDZ9wvgPPDpVgAkpxnY4rZbDb17NlThmFo9OjRrvrQ0FC1b99ev/76q6vuvffe00UXXaQOHTro6NGjrnL11VdLklauXClJ+vzzzyVJ9913n9t+Tz/DVFlGjx7tdikxLi6uzHyK51l6Pp589dVXysvL07333uvWZ0XGXnxGbunSpTpx4sQZ28bHx6tHjx6u5ebNm2vw4MFaunSpCgsLZRiG3n//fQ0aNEiGYbgd78TERGVlZWnr1q1ufY4YMUKBgYFudaGhofrxxx+1a9eus46/WPGfX1JSklv9gw8+KEn67LPP3Oo7duyoK664wrUcHh5e5r8dAJWPYAdAkjNElBYSEqKAgACFhYWVqT927JhredeuXfrxxx8VHh7uVtq1aydJOnz4sCRp7969slqtat26tVt/7du3r4rpeJyPJMXExJSpLz0fT/bu3StJatu2rVt9eHi4GjZseMZtY2NjlZSUpFdeeUVhYWFKTEzUnDlz3O6vK3Z6/5LUrl07nThxQkeOHNGRI0eUmZmpefPmlTneo0aNklRyvEvv/3RPPfWUMjMz1a5dO3Xu3FkPP/ywvv/++7MeA6vVqjZt2rjVR0ZGKjQ01HWMip1+/CWpYcOGZz3WAM4P99gBkCSPT6GW92SqUephA4fDoc6dO2vmzJke254epCpbYWGhx/ryxu6p3qjAwxPnY8aMGRo5cqQ++ugjffnll7rvvvuUnJysDRs2qFmzZhXux+FwSJLuuOMOjRgxwmObLl26uC2ffrZOcr6SZc+ePa7xvPLKK3r++eeVkpLidubWk4q+tLgi/+0AqHwEOwDnpXXr1vruu+90zTXXnPH/9Fu0aCGHw6E9e/a4naXbsWNHhfbTsGFDZWZmutXl5eUpLS3tnMbtjeL36e3atUutWrVy1R85cqTCZ6A6d+6szp0764knntC6det02WWXKSUlRdOmTXO18XRpdOfOnQoKClJ4eLgkqUGDBiosLFRCQsL5TEmNGjXSqFGjNGrUKGVnZ+vKK6/U1KlTyw12xX9+u3bt0kUXXeSqz8jIUGZm5gX5zkHAjLgUC+C83HrrrTp48KBefvnlMutOnjypnJwcSdKAAQMkSS+++KJbm1mzZlVoP61bty7z6o958+aVe8auMiUkJMjX11cvvfSS2xmniozdbreroKDAra5z586yWq1lXhOyfv16t3vk9u/fr48++kj9+vVzvdvvpptu0vvvv6/t27eX2deRI0cqNJ/ff//dbbl+/fpq06ZNmfGUdt1110kqO+fiM7VV9XQzAO9wxg7Aebnzzjv17rvv6p577tHKlSt12WWXqbCwUL/88oveffddLV26VD179lS3bt00bNgw/etf/1JWVpZ69+6t5cuXa/fu3RXaz5gxY3TPPffopptu0rXXXqvvvvtOS5cuLXMPYFUIDw/XQw89pOTkZP35z3/Wddddp2+//VZffPHFWfe/YsUKjR8/XrfccovatWungoIC/ec//3GFtNIuvvhiJSYmur3uRJKefPJJV5tnnnlGK1euVFxcnMaOHauOHTvqjz/+0NatW/XVV1/pjz/+OOt8OnbsqL59+6pHjx5q1KiRNm/erP/7v//T+PHjy92ma9euGjFihObNm6fMzEz16dNHmzZt0qJFizRkyBBdddVVZ90vgKpHsANwXqxWqxYvXqznn39er732mj788EMFBQWpVatWuv/++10PUUjSggULFB4erjfeeEOLFy/W1Vdfrc8++6xC9+GNHTtWqampmj9/vpYsWaIrrrhCy5Yt0zXXXFOV03OZNm2aAgIClJKS4gpWX3755VnPVHXt2lWJiYn65JNPdPDgQQUFBalr16764osvdOmll7q17dOnj+Lj4/Xkk09q37596tixoxYuXOh231xERIQ2bdqkp556Sh988IH+9a9/qXHjxurUqZOmT59eobncd999+vjjj/Xll18qNzdXLVq00LRp0/Twww+fcbtXXnlFrVq10sKFC/Xhhx8qMjJSEydO1JQpUyq0XwBVz2JwJysA1DiLxaJx48Zp9uzZNT0UABcw7rEDAAAwCYIdAACASRDsAAAATIKHJwCgFuB2ZwCVgTN2AAAAJkGwAwAAMAlTXIp1OBw6dOiQGjRoUOHfMQQAALgQGIah48ePKzo6Wlbrmc/JmSLYHTp0qMp/aBwAAKAm7d+/X82aNTtjG1MEuwYNGkhyTjg4OLiGRwMAAFB57Ha7YmJiXHnnTEwR7IovvwYHBxPsAACAKVXkdjMengAAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAk/Cp6QFcSHakH9fxU/kK8LUpwNemQD+bAn2dxd/HKqvVUtNDBAAAdZhXwS45OVkffPCBfvnlFwUGBqp3796aPn262rdvf8bt3nvvPU2aNEm//fab2rZtq+nTp+u6665zrTcMQ1OmTNHLL7+szMxMXXbZZZo7d67atm17brOqIrO+2qkvtqeXu97fx+oW9pwBsKQuoFR9oJ8zDPr7WOXnY5WfzSo/H5v8Stf5WOVvK/osWudXqr2/b9Gnj1UWC6ESAIC6zqtgt3r1ao0bN06XXHKJCgoK9Pjjj6tfv3766aefVK9ePY/brFu3TsOGDVNycrL+/Oc/680339SQIUO0detWXXzxxZKkZ599Vi+++KIWLVqk2NhYTZo0SYmJifrpp58UEBBw/rOsJGH1/RUbVk+n8gt1Mr9QJ/MKlVvgcK3PLXAot8ChTOVX+9h8bZaS8GezytfHIl+rVT42i3ysVvnaLPKxWeVjtcjXVlLv5+P89LGVtPctaudjK9quqN6veDubVb4e1tssFtmKPn2sFlmtJZ82i0U2q7O4rbN4qPOwjuAKAMDZWQzDMM514yNHjqhJkyZavXq1rrzySo9thg4dqpycHH366aeuuksvvVTdunVTSkqKDMNQdHS0HnzwQT300EOSpKysLEVERGjhwoW67bbbzjoOu92ukJAQZWVlKTg4+Fync04cDkOnCpwh72R+oU7lO9yCn7PO+d1Z7yhaV6DcAofyikpuoUO5+Q7lFTqUV1DorHerK9W2aF1dYrHIFfZcYbFUACwvSFotFlmtktXiDIdWi2SzWIqW5bbeWrS+uK2tVH1xW5u11Hau7Ut9L2prK6ov3dbmGkNRe+vp+yzZh9UiWUrVWYqOgUXOOktRndVatq7MNq7vxf2eeRu5bV+yjVRqXCoZs0p9L+67QttYK7hvWSRX3+5jdm5S0qc81Ftc9ZZS38U/FgBcMLzJOed1j11WVpYkqVGjRuW2Wb9+vZKSktzqEhMTtXjxYklSamqq0tPTlZCQ4FofEhKiuLg4rV+/3mOwy83NVW5urmvZbrefzzTOi9VqUZCfj4L8qvd2RcMw3APf6SGw0KGCQkMFhQ7lO4o+Cw0VOJz1+aWW84vaFTic9QWFhvId7tvnF7ivd21XavtCQyp0OFTocAbeAodDDkPOT4fzs9AhOQxn+9PXOc7wTwzDkPILDUmGcstvBpyTkjDoIQCqZOXp9advV/xdp/dXTruSbHl6m5L9nh5OS4/5TO1KdV2mvvxQ7D42T+0spQ6Ye19l+ylbX+q73Ba8au8pyJ+pTWkVG5t37VXe2Mrt37u5lH983Cd5PvNRRcZXbv9nn0+lHSO39p7/kMs9juW08dT3Gdt5qLz7ylYKq+/vcV/V7ZzTiMPh0IQJE3TZZZe5Lql6kp6eroiICLe6iIgIpaenu9YX15XX5nTJycl68sknz3XopmCxOC+9+vvYanoolcYwjLJhrzgQGkaZOodhqNBDXUGh4WrvMAw5DEOGoaL2zn0U76t4vaNUe8OQc3ujVFuHoULXdqW2dZTux7nefR/O74UO47R9qmhb97aFRvEYjKJtJKPo2BR/dxie6kvm6M02DkdJnU5r5yj64r69c5vSf14l+5ZUehxyBnLjtH2X3qbM2Iu2qW7F+zRKL5SsrebRALjQDL0k5sIPduPGjdP27du1du3ayhxPhUycONHtLKDdbldMTEy1jwOVy2KxyGaRbNbisGqe0ArveA6lRkkAcwUxwy2UGUXh0NWmgu2MkoZu4dLTdm77r+g4VLLd6fst3Zehivdf8v0M/Z9lnh7HcVr/Om1c5bZzm69ryWN9ee2NCrX3HLRPry63rwr0W84UKji+Co7DrZHnfbuPuwJt3OrL/weJ98f87O3d+6/AnM9hHBU6ThUZn6c6D5WGp5bl9BkS6Ot5RQ04p2A3fvx4ffrpp1qzZo2aNWt2xraRkZHKyMhwq8vIyFBkZKRrfXFdVFSUW5tu3bp57NPf31/+/rUjGQOofKUvX9rKuZQCACjLqxcUG4ah8ePH68MPP9SKFSsUGxt71m3i4+O1fPlyt7ply5YpPj5ekhQbG6vIyEi3Nna7XRs3bnS1AQAAwNl5dcZu3LhxevPNN/XRRx+pQYMGrnvgQkJCFBgYKEkaPny4mjZtquTkZEnS/fffrz59+mjGjBkaOHCg3n77bW3evFnz5s2T5PyX+YQJEzRt2jS1bdvW9bqT6OhoDRkypBKnCgAAYG5eBbu5c+dKkvr27etW/+qrr2rkyJGSpH379slqLTkR2Lt3b7355pt64okn9Pjjj6tt27ZavHix2wMXjzzyiHJycnT33XcrMzNTl19+uZYsWVKr3mEHAABQ253Xe+xqi5p8jx0AAEBV8ibneHWPHQAAAGovgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJeB3s1qxZo0GDBik6OloWi0WLFy8+Y/uRI0fKYrGUKZ06dXK1mTp1apn1HTp08HoyAAAAdZnXwS4nJ0ddu3bVnDlzKtT+hRdeUFpamqvs379fjRo10i233OLWrlOnTm7t1q5d6+3QAAAA6jQfbzcYMGCABgwYUOH2ISEhCgkJcS0vXrxYx44d06hRo9wH4uOjyMhIb4cDAACAItV+j938+fOVkJCgFi1auNXv2rVL0dHRatWqlW6//Xbt27ev3D5yc3Nlt9vdCgAAQF1XrcHu0KFD+uKLLzRmzBi3+ri4OC1cuFBLlizR3LlzlZqaqiuuuELHjx/32E9ycrLrTGBISIhiYmKqY/gAAAC1msUwDOOcN7ZY9OGHH2rIkCEVap+cnKwZM2bo0KFD8vPzK7ddZmamWrRooZkzZ2r06NFl1ufm5io3N9e1bLfbFRMTo6ysLAUHB3s9DwAAgNrKbrcrJCSkQjnH63vszpVhGFqwYIHuvPPOM4Y6SQoNDVW7du20e/duj+v9/f3l7+9fFcMEAAC4YFXbpdjVq1dr9+7dHs/AnS47O1t79uxRVFRUNYwMAADAHLwOdtnZ2dq2bZu2bdsmSUpNTdW2bdtcDztMnDhRw4cPL7Pd/PnzFRcXp4svvrjMuoceekirV6/Wb7/9pnXr1umGG26QzWbTsGHDvB0eAABAneX1pdjNmzfrqquuci0nJSVJkkaMGKGFCxcqLS2tzBOtWVlZev/99/XCCy947PPAgQMaNmyYfv/9d4WHh+vyyy/Xhg0bFB4e7u3wAAAA6qzzeniitvDmpkIAAIALiTc5h9+KBQAAMAmCHQAAgEkQ7AAAAEyCYAcAAGASBDsAAACTINgBAACYBMEOAADAJAh2AAAAJkGwAwAAMAmCHQAAgEkQ7AAAAEyCYAcAAGASBDsAAACTINgBAACYBMEOAADAJAh2AAAAJkGwAwAAMAmCHQAAgEkQ7AAAAEyCYAcAAGASBDsAAACTINgBAACYBMEOAADAJAh2AAAAJkGwAwAAMAmCHQAAgEkQ7AAAAEyCYAcAAGASBDsAAACTINgBAACYBMEOAADAJAh2AAAAJkGwAwAAMAmCHQAAgEl4HezWrFmjQYMGKTo6WhaLRYsXLz5j+1WrVslisZQp6enpbu3mzJmjli1bKiAgQHFxcdq0aZO3QwMAAKjTvA52OTk56tq1q+bMmePVdjt27FBaWpqrNGnSxLXunXfeUVJSkqZMmaKtW7eqa9euSkxM1OHDh70dHgAAQJ3l4+0GAwYM0IABA7zeUZMmTRQaGupx3cyZMzV27FiNGjVKkpSSkqLPPvtMCxYs0GOPPeb1vgAAAOqiarvHrlu3boqKitK1116rb775xlWfl5enLVu2KCEhoWRQVqsSEhK0fv16j33l5ubKbre7FQAAgLquyoNdVFSUUlJS9P777+v9999XTEyM+vbtq61bt0qSjh49qsLCQkVERLhtFxERUeY+vGLJyckKCQlxlZiYmKqeBgAAQK3n9aVYb7Vv317t27d3Lffu3Vt79uzR888/r//85z/n1OfEiROVlJTkWrbb7YQ7AABQ51V5sPOkV69eWrt2rSQpLCxMNptNGRkZbm0yMjIUGRnpcXt/f3/5+/tX+TgBAAAuJDXyHrtt27YpKipKkuTn56cePXpo+fLlrvUOh0PLly9XfHx8TQwPAADgguT1Gbvs7Gzt3r3btZyamqpt27apUaNGat68uSZOnKiDBw/qtddekyTNmjVLsbGx6tSpk06dOqVXXnlFK1as0JdffunqIykpSSNGjFDPnj3Vq1cvzZo1Szk5Oa6nZAEAAHB2Xge7zZs366qrrnItF9/rNmLECC1cuFBpaWnat2+fa31eXp4efPBBHTx4UEFBQerSpYu++uortz6GDh2qI0eOaPLkyUpPT1e3bt20ZMmSMg9UAAAAoHwWwzCMmh7E+bLb7QoJCVFWVpaCg4NrejgAAACVxpucw2/FAgAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCS8DnZr1qzRoEGDFB0dLYvFosWLF5+x/QcffKBrr71W4eHhCg4OVnx8vJYuXerWZurUqbJYLG6lQ4cO3g4NAACgTvM62OXk5Khr166aM2dOhdqvWbNG1157rT7//HNt2bJFV111lQYNGqRvv/3WrV2nTp2UlpbmKmvXrvV2aAAAAHWaj7cbDBgwQAMGDKhw+1mzZrkt/+Mf/9BHH32kTz75RN27dy8ZiI+PIiMjvR0OAAAAilT7PXYOh0PHjx9Xo0aN3Op37dql6OhotWrVSrfffrv27dtXbh+5ubmy2+1uBQAAoK6r9mD33HPPKTs7W7feequrLi4uTgsXLtSSJUs0d+5cpaam6oorrtDx48c99pGcnKyQkBBXiYmJqa7hAwAA1FoWwzCMc97YYtGHH36oIUOGVKj9m2++qbFjx+qjjz5SQkJCue0yMzPVokULzZw5U6NHjy6zPjc3V7m5ua5lu92umJgYZWVlKTg42Ot5AAAA1FZ2u10hISEVyjle32N3rt5++22NGTNG77333hlDnSSFhoaqXbt22r17t8f1/v7+8vf3r4phAgAAXLCq5VLsW2+9pVGjRumtt97SwIEDz9o+Oztbe/bsUVRUVDWMDgAAwBy8PmOXnZ3tdiYtNTVV27ZtU6NGjdS8eXNNnDhRBw8e1GuvvSbJefl1xIgReuGFFxQXF6f09HRJUmBgoEJCQiRJDz30kAYNGqQWLVro0KFDmjJlimw2m4YNG1YZcwQAAKgTvD5jt3nzZnXv3t31qpKkpCR1795dkydPliSlpaW5PdE6b948FRQUaNy4cYqKinKV+++/39XmwIEDGjZsmNq3b69bb71VjRs31oYNGxQeHn6+8wMAAKgzzuvhidrCm5sKAQAALiTe5Bx+KxYAAMAkCHYAAAAmQbADAAAwCYIdAACASRDsAAAATIJgBwAAYBLV9pNiAAAA58IwDBUUFKiwsLCmh1IlbDabfHx8ZLFYzrsvgh0AAKi18vLylJaWphMnTtT0UKpUUFCQoqKi5Ofnd179EOwAAECt5HA4lJqaKpvNpujoaPn5+VXKWa3axDAM5eXl6ciRI0pNTVXbtm1ltZ77nXIEOwAAUCvl5eXJ4XAoJiZGQUFBNT2cKhMYGChfX1/t3btXeXl5CggIOOe+eHgCAADUaudzButCUVlzNP+RAgAAqCMIdgAAACZBsAMAADAJgh0AAIBJ8FQsAABAJevbt6+6dOmigIAAvfLKK/Lz89M999yjqVOnVul+CXYAAOCCYRiGTubXzC9QBPravHqP3qJFi5SUlKSNGzdq/fr1GjlypC677DJde+21VTZGgh0AALhgnMwvVMfJS2tk3z89laggv4pHpy5dumjKlCmSpLZt22r27Nlavnx5lQY77rEDAACoAl26dHFbjoqK0uHDh6t0n5yxAwAAF4xAX5t+eiqxxvbtDV9fX7dli8Uih8NRmUMqg2AHAAAuGBaLxavLoXUNl2IBAABMgmAHAABgEpzLBAAAqGSrVq0qU7d48eIq3y9n7AAAAEyCYAcAAGASBDsAAACTINgBAACYBMEOAADAJAh2AAAAJkGwAwAAMAmCHQAAgEkQ7AAAAEyCYAcAAFDJ+vbtqwkTJlT7fr0OdmvWrNGgQYMUHR0ti8VSoZ/HWLVqlf70pz/J399fbdq00cKFC8u0mTNnjlq2bKmAgADFxcVp06ZN3g4NAACgTvM62OXk5Khr166aM2dOhdqnpqZq4MCBuuqqq7Rt2zZNmDBBY8aM0dKlS11t3nnnHSUlJWnKlCnaunWrunbtqsTERB0+fNjb4QEAANRZXge7AQMGaNq0abrhhhsq1D4lJUWxsbGaMWOGLrroIo0fP14333yznn/+eVebmTNnauzYsRo1apQ6duyolJQUBQUFacGCBd4ODwAAoNb57LPPFBISojfeeKNK9+NTpb1LWr9+vRISEtzqEhMTXded8/LytGXLFk2cONG13mq1KiEhQevXr/fYZ25urnJzc13Ldru98gcOAABqH8OQ8k/UzL59gySLxevN3nzzTd1zzz1688039ec//7kKBlaiyoNdenq6IiIi3OoiIiJkt9t18uRJHTt2TIWFhR7b/PLLLx77TE5O1pNPPlllYwYAALVU/gnpH9E1s+/HD0l+9bzaZM6cOfr73/+uTz75RH369KmigZWo8mBXFSZOnKikpCTXst1uV0xMTA2OCAAAwN3//d//6fDhw/rmm290ySWXVMs+qzzYRUZGKiMjw60uIyNDwcHBCgwMlM1mk81m89gmMjLSY5/+/v7y9/evsjEDAIBayjfIeeaspvbthe7du2vr1q1asGCBevbsKcs5XMb1VpW/xy4+Pl7Lly93q1u2bJni4+MlSX5+furRo4dbG4fDoeXLl7vaAAAASHLe4+ZXr2aKl8GsdevWWrlypT766CPde++9VXRA3Hl9xi47O1u7d+92Laempmrbtm1q1KiRmjdvrokTJ+rgwYN67bXXJEn33HOPZs+erUceeUR33XWXVqxYoXfffVefffaZq4+kpCSNGDFCPXv2VK9evTRr1izl5ORo1KhRlTBFAACAmtGuXTutXLlSffv2lY+Pj2bNmlWl+/M62G3evFlXXXWVa7n4XrcRI0Zo4cKFSktL0759+1zrY2Nj9dlnn+mBBx7QCy+8oGbNmumVV15RYmKiq83QoUN15MgRTZ48Wenp6erWrZuWLFlS5oEKAACAC0379u21YsUK9e3bVzabTTNmzKiyfVkMwzCqrPdqYrfbFRISoqysLAUHB9f0cAAAQCU4deqUUlNTFRsbq4CAgJoeTpU601y9yTn8ViwAAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAA1GomeIHHWVXWHAl2AACgVvL19ZUknThxooZHUvWK51g853NV5b8VCwAAcC5sNptCQ0N1+PBhSVJQUFC1/N5qdTIMQydOnNDhw4cVGhoqm812Xv0R7AAAQK0VGRkpSa5wZ1ahoaGuuZ4Pgh0AAKi1LBaLoqKi1KRJE+Xn59f0cKqEr6/veZ+pK0awAwAAtZ7NZqu08GNmPDwBAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADCJcwp2c+bMUcuWLRUQEKC4uDht2rSp3LZ9+/aVxWIpUwYOHOhqM3LkyDLr+/fvfy5DAwAAqLN8vN3gnXfeUVJSklJSUhQXF6dZs2YpMTFRO3bsUJMmTcq0/+CDD5SXl+da/v3339W1a1fdcsstbu369++vV1991bXs7+/v7dAAAADqNK/P2M2cOVNjx47VqFGj1LFjR6WkpCgoKEgLFizw2L5Ro0aKjIx0lWXLlikoKKhMsPP393dr17Bhw3ObEQAAQB3lVbDLy8vTli1blJCQUNKB1aqEhAStX7++Qn3Mnz9ft912m+rVq+dWv2rVKjVp0kTt27fXX//6V/3+++/eDA0AAKDO8+pS7NGjR1VYWKiIiAi3+oiICP3yyy9n3X7Tpk3avn275s+f71bfv39/3XjjjYqNjdWePXv0+OOPa8CAAVq/fr1sNluZfnJzc5Wbm+tattvt3kwDAADAlLy+x+58zJ8/X507d1avXr3c6m+77TbX986dO6tLly5q3bq1Vq1apWuuuaZMP8nJyXryySerfLwAAAAXEq8uxYaFhclmsykjI8OtPiMjQ5GRkWfcNicnR2+//bZGjx591v20atVKYWFh2r17t8f1EydOVFZWlqvs37+/4pMAAAAwKa+CnZ+fn3r06KHly5e76hwOh5YvX674+Pgzbvvee+8pNzdXd9xxx1n3c+DAAf3++++KioryuN7f31/BwcFuBQAAoK7z+qnYpKQkvfzyy1q0aJF+/vln/fWvf1VOTo5GjRolSRo+fLgmTpxYZrv58+dryJAhaty4sVt9dna2Hn74YW3YsEG//fabli9frsGDB6tNmzZKTEw8x2kBAADUPV7fYzd06FAdOXJEkydPVnp6urp166YlS5a4HqjYt2+frFb3vLhjxw6tXbtWX375ZZn+bDabvv/+ey1atEiZmZmKjo5Wv3799PTTT/MuOwAAAC9YDMMwanoQ58tutyskJERZWVlclgUAAKbiTc7ht2IBAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEgQ7AAAAkyDYAQAAmATBDgAAwCQIdgAAACZBsAMAADAJgh0AAIBJEOwAAABMgmAHAABgEucU7ObMmaOWLVsqICBAcXFx2rRpU7ltFy5cKIvF4lYCAgLc2hiGocmTJysqKkqBgYFKSEjQrl27zmVoAAAAdZbXwe6dd95RUlKSpkyZoq1bt6pr165KTEzU4cOHy90mODhYaWlprrJ371639c8++6xefPFFpaSkaOPGjapXr54SExN16tQp72cEAABQR3kd7GbOnKmxY8dq1KhR6tixo1JSUhQUFKQFCxaUu43FYlFkZKSrREREuNYZhqFZs2bpiSee0ODBg9WlSxe99tprOnTokBYvXnxOkwIAAKiLvAp2eXl52rJlixISEko6sFqVkJCg9evXl7tddna2WrRooZiYGA0ePFg//vija11qaqrS09Pd+gwJCVFcXNwZ+wQAAIA7r4Ld0aNHVVhY6HbGTZIiIiKUnp7ucZv27dtrwYIF+uijj/T666/L4XCo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0ksvudqY/Zjk5OSoa9eumjNnjsf1FZn/7bffrh9//FHLli3Tp59+qjVr1ujuu++urilUujMdkxMnTmjr1q2aNGmStm7dqg8++EA7duzQ9ddf79auLh2T0j788ENt2LBB0dHRZdbVtWOyZ88eXX755erQoYNWrVql77//XpMmTVJAQICrzQMPPKBPPvlE7733nlavXq1Dhw7pxhtvrK4pVLqzHZOkpCQtWbJEr7/+un7++WdNmDBB48eP18cff+xqY7Zjsnr1ao0bN04bNmzQsmXLlJ+fr379+iknJ8fV5mxzLiws1MCBA5WXl6d169Zp0aJFWrhwoSZPnlz1E6jwD7Ki2j366KPG5ZdfXu56h8NhREZGGv/85z9ddZmZmYa/v7/x1ltvVccQq93AgQONu+66y63uxhtvNG6//XbDMOreMZFkfPjhh67lisz/p59+MiQZ//3vf11tvvjiC8NisRgHDx6strFXldOPiSebNm0yJBl79+41DKPuHpMDBw4YTZs2NbZv3260aNHCeP75513r6uIxGTp0qHHHHXeUu01mZqbh6+trvPfee666n3/+2ZBkrF+/vqqGWm08HZNOnToZTz31lFvdn/70J+Pvf/+7YRjmPyaGYRiHDx82JBmrV682DKNic/78888Nq9VqpKenu9rMnTvXCA4ONnJzc6t0vJyxq8U+/vhj9ezZU7fccouaNGmi7t276+WXX3atT01NVXp6uhISElx1ISEhiouL0/r162tiyFWud+/eWr58uXbu3ClJ+u6777R27VoNGDBAUt08JqVVZP7r169XaGioevbs6WqTkJAgq9WqjRs3VvuYa0JWVpYsFotCQ0Ml1c1j4nA4dOedd+rhhx9Wp06dyqyva8fE4XDos88+U7t27ZSYmKgmTZooLi7O7dLkli1blJ+f7/a/rw4dOqh58+am/fuld+/e+vjjj3Xw4EEZhqGVK1dq586d6tevn6S6cUyysrIkSY0aNZJUsTmvX79enTt3VkREhKtNYmKi7Ha7fvzxxyodL8GuFvv11181d+5ctW3bVkuXLtVf//pX3XfffVq0aJEkKT09XZLc/sMpXi5eZzaPPfaYbrvtNnXo0EG+vr7q3r27JkyYoNtvv11S3TwmpVVk/unp6WrSpInbeh8fHzVq1KhOHKNTp07p0Ucf1bBhw1y/7VgXj8n06dPl4+Oj++67z+P6unZMDh8+rOzsbD3zzDPq37+/vvzyS91www268cYbtXr1aknOY+Ln5+f6B0ExM//98tJLL6ljx45q1qyZ/Pz81L9/f82ZM0dXXnmlJPMfE4fDoQkTJuiyyy7TxRdfLKlic05PT/f493DxuqrkU6W947w4HA717NlT//jHPyRJ3bt31/bt25WSkqIRI0bU8Ohqxrvvvqs33nhDb775pjp16qRt27ZpwoQJio6OrrPHBBWXn5+vW2+9VYZhaO7cuTU9nBqzZcsWvfDCC9q6dassFktND6dWcDgckqTBgwfrgQcekCR169ZN69atU0pKivr06VOTw6sxL730kjZs2KCPP/5YLVq00Jo1azRu3DhFR0e7nbEyq3Hjxmn79u1au3ZtTQ+lwjhjV4tFRUWpY8eObnUXXXSR6wmtyMhISSrzJE5GRoZrndk8/PDDrrN2nTt31p133qkHHnhAycnJkurmMSmtIvOPjIzU4cOH3dYXFBTojz/+MPUxKg51e/fu1bJly1xn66S6d0y+/vprHT58WM2bN5ePj498fHy0d+9ePfjgg2rZsqWkundMwsLC5OPjc9a/c/Py8pSZmenWxqx/v5w8eVKPP/64Zs6cqUGDBqlLly4aP368hg4dqueee06SuY/J+PHj9emnn2rlypVq1qyZq74ic46MjPT493DxuqpEsKvFLrvssjKPWO/cuVMtWrSQJMXGxioyMlLLly93rbfb7dq4caPi4+OrdazV5cSJE7Ja3f+ztdlsrn9t18VjUlpF5h8fH6/MzExt2bLF1WbFihVyOByKi4ur9jFXh+JQt2vXLn311Vdq3Lix2/q6dkzuvPNOff/999q2bZurREdH6+GHH9bSpUsl1b1j4ufnp0suueSMf+f26NFDvr6+bv/72rFjh/bt22fKv1/y8/OVn59/xr9zzXhMDMPQ+PHj9eGHH2rFihWKjY11W1+ROcfHx+uHH35w+8dR8T8oT//HQ1VMALXUpk2bDB8fH+N///d/jV27dhlvvPGGERQUZLz++uuuNs8884wRGhpqfPTRR8b3339vDB482IiNjTVOnjxZgyOvOiNGjDCaNm1qfPrpp0ZqaqrxwQcfGGFhYcYjjzziamP2Y3L8+HHj22+/Nb799ltDkjFz5kzj22+/dT3hWZH59+/f3+jevbuxceNGY+3atUbbtm2NYcOG1dSUztuZjkleXp5x/fXXG82aNTO2bdtmpKWluUrpp9Pq0jHx5PSnYg2j7h2TDz74wPD19TXmzZtn7Nq1y3jppZcMm81mfP31164+7rnnHqN58+bGihUrjM2bNxvx8fFGfHx8TU3pvJ3tmPTp08fo1KmTsXLlSuPXX381Xn31VSMgIMD417/+5erDbMfkr3/9qxESEmKsWrXK7e+LEydOuNqcbc4FBQXGxRdfbPTr18/Ytm2bsWTJEiM8PNyYOHFilY+fYFfLffLJJ8bFF19s+Pv7Gx06dDDmzZvntt7hcBiTJk0yIiIiDH9/f+Oaa64xduzYUUOjrXp2u924//77jebNmxsBAQFGq1atjL///e9u/wdt9mOycuVKQ1KZMmLECMMwKjb/33//3Rg2bJhRv359Izg42Bg1apRx/PjxGphN5TjTMUlNTfW4TpKxcuVKVx916Zh44inY1cVjMn/+fKNNmzZGQECA0bVrV2Px4sVufZw8edL429/+ZjRs2NAICgoybrjhBiMtLa2aZ1J5znZM0tLSjJEjRxrR0dFGQECA0b59e2PGjBmGw+Fw9WG2Y1Le3xevvvqqq01F5vzbb78ZAwYMMAIDA42wsDDjwQcfNPLz86t8/JaiSQAAAOACxz12AAAAJkGwAwAAMAmCHQAAgEkQ7AAAAEyCYAcAAGASBDsAAACTINgBAACYBMEOAADAJAh2AKqUYRi6++671ahRI1ksFm3btq2mh1Rr5eXlqU2bNlq3bl217/vSSy/V+++/X+37BVC5CHYAqtSSJUu0cOFCffrpp0pLS9PFF19c00OqtVJSUhQbG6vevXtr4cKFslgsZyy//fabpk6dqm7dupXp67fffvMqSD/xxBN67LHHXD/uDuDCRLADUKX27NmjqKgo9e7dW5GRkfLx8SnTJi8vrwZGVrsYhqHZs2dr9OjRkqShQ4cqLS3NVeLj4zV27Fi3upiYmErb/4ABA3T8+HF98cUXldYngOpHsANQZUaOHKl7771X+/btk8ViUcuWLSVJffv21fjx4zVhwgSFhYUpMTFRkrR9+3YNGDBA9evXV0REhO68804dPXrU1V9OTo6GDx+u+vXrKyoqSjNmzFDfvn01YcIEVxuLxaLFixe7jSM0NFQLFy50Le/fv1+33nqrQkND1ahRIw0ePFi//fab27iHDBmi5557TlFRUWrcuLHGjRun/Px8V5vc3Fw9+uijiomJkb+/v9q0aaP58+fLMAy1adNGzz33nNsYtm3bJovFot27d3s8Vlu2bNGePXs0cOBASVJgYKAiIyNdxc/PT0FBQW51Nputon8UGjlypMezfqtWrZIk2Ww2XXfddXr77bcr3CeA2odgB6DKvPDCC3rqqafUrFkzpaWl6b///a9r3aJFi+Tn56dvvvlGKSkpyszM1NVXX63u3btr8+bNWrJkiTIyMnTrrbe6tnn44Ye1evVqffTRR/ryyy+1atUqbd261asx5efnKzExUQ0aNNDXX3+tb775RvXr11f//v3dzhyuXLlSe/bs0cqVK7Vo0SItXLjQLRwOHz5cb731ll588UX9/PPP+ve//6369evLYrHorrvu0quvvuq231dffVVXXnml2rRp43FcX3/9tdq1a6cGDRp4NZ+KeuGFF9zO9t1///1q0qSJOnTo4GrTq1cvff3111WyfwDVo+w1EQCoJCEhIWrQoIFsNpsiIyPd1rVt21bPPvusa3natGnq3r27/vGPf7jqFixYoJiYGO3cuVPR0dGaP3++Xn/9dV1zzTWSnOGwWbNmXo3pnXfekcPh0CuvvCKLxSLJGbpCQ0O1atUq9evXT5LUsGFDzZ49WzabTR06dNDAgQO1fPlyjR07Vjt37tS7776rZcuWKSEhQZLUqlUr1z5GjhypyZMna9OmTerVq5fy8/P15ptvljmLV9revXsVHR3t1VyK/fDDD6pfv75bnWEYbsshISEKCQmRJH3wwQf697//ra+++srtzyU6Olr79++Xw+GQ1cq/+4ELEcEOQI3o0aOH2/J3332nlStXlgkokvM+vZMnTyovL09xcXGu+kaNGql9+/Ze7fe7777T7t27y5wZO3XqlPbs2eNa7tSpk9ulzqioKP3www+SnJdVbTab+vTp43Ef0dHRGjhwoBYsWKBevXrpk08+UW5urm655ZZyx3Xy5EkFBAR4NZdi7du318cff+xWd/DgQfXt27dM22+//VZ33nmnZs+ercsuu8xtXWBgoBwOh3JzcxUYGHhOYwFQswh2AGpEvXr13Jazs7M1aNAgTZ8+vUzbqKiocu9NO53FYilztqr0vXHZ2dnq0aOH3njjjTLbhoeHu777+vqW6bf4idGKhJ4xY8bozjvv1PPPP69XX31VQ4cOVVBQULntw8LCXMHRW35+fmUu8Xp6SCU9PV3XX3+9xowZ43pIo7Q//vhD9erVI9QBFzCCHYBa4U9/+pPef/99tWzZ0mMoad26tXx9fbVx40Y1b95cknTs2DHt3LnT7cxZeHi40tLSXMu7du3SiRMn3PbzzjvvqEmTJgoODj6nsXbu3FkOh0OrV692XYo93XXXXad69epp7ty5WrJkidasWXPGPrt37665c+fKMAzXJeLKdOrUKQ0ePFgdOnTQzJkzPbbZvn27unfvXun7BlB9uIkCQK0wbtw4/fHHHxo2bJj++9//as+ePVq6dKlGjRqlwsJC1a9fX6NHj9bDDz+sFStWaPv27Ro5cmSZe8GuvvpqzZ49W99++602b96se+65x+3s2+23366wsDANHjxYX3/9tVJTU7Vq1Srdd999OnDgQIXG2rJlS40YMUJ33XWXFi9e7Orj3XffdbWx2WwaOXKkJk6cqLZt2yo+Pv6MfV511VXKzs7Wjz/+6MVRq7j/+Z//0f79+/Xiiy/qyJEjSk9PV3p6utsDI19//bXrHkMAFyaCHYBaITo6Wt98840KCwvVr18/de7cWRMmTFBoaKgrvP3zn//UFVdcoUGDBikhIUGXX355mXv1ZsyYoZiYGF1xxRX6y1/+ooceesjtEmhQUJDWrFmj5s2b68Ybb9RFF12k0aNH69SpU16dwZs7d65uvvlm/e1vf1OHDh00duxY5eTkuLUZPXq08vLyNGrUqLP217hxY91www0eLxFXhtWrVystLU0dO3ZUVFSUqxT/ysXBgwe1bt26Co0VQO1lMU6/GQUALiB9+/ZVt27dNGvWrJoeShlff/21rrnmGu3fv18RERFnbf/999/r2muv1Z49ezw+RFKVHn30UR07dkzz5s2r1v0CqFycsQOASpabm6sDBw5o6tSpuuWWWyoU6iSpS5cumj59ulJTU6t4hGU1adJETz/9dLXvF0DlItgBQCV766231KJFC2VmZrq9q68iRo4cqc6dO1fRyMr34IMPVjiAAqi9uBQLAABgEpyxAwAAMAmCHQAAgEkQ7AAAAEyCYAcAAGASBDsAAACTINgBAACYBMEOAADAJAh2AAAAJkGwAwAAMIn/B4TYB/T5pxoVAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "freqs_hz = 1e12 * np.linspace(50, 200, 1001)\n", "print(\n", " f\"complex relative permittivity at freqs_hz = \\n\\t {lossy_dielectric.eps_model(freqs_hz)}\\n\"\n", ")\n", "\n", "ax = lossy_dielectric_from_nk.plot(freqs_hz)\n" ] }, { "cell_type": "markdown", "id": "a99bcacc", "metadata": {}, "source": [ "### Geometries\n", "\n", "The new version of Tidy3D introduces [Geometry](../_autosummary/tidy3d.components.geometry.Geometry.html) objects, which do the heavy lifting for any components with some spatial extent.\n", "\n", "There are only 4 primitive geometries:\n", "\n", "- [Box](../_autosummary/tidy3d.Box.html)\n", "\n", "- [Sphere](../_autosummary/tidy3d.Sphere.html)\n", "\n", "- [Cylinder](../_autosummary/tidy3d.Cylinder.html)\n", "\n", "- [Polyslab](../_autosummary/tidy3d.PolySlab.html)\n", "\n", "If your device is defined in GDS format, they may be loaded simply as [Polyslab](../_autosummary/tidy3d.PolySlab.html) objects using `PolySlab.from_gds()` classmethod. Please refer to the [tutorial notebook on GDS importing](../notebooks/GDS_import.html) for more details.\n", "\n", "All [Geometry](../_autosummary/tidy3d.components.geometry.Geometry.html) objects have many useful methods for checking intersections, bounds, and other properties." ] }, { "cell_type": "code", "execution_count": 12, "id": "15b8d749", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "False\n", "True\n", "((-1.0, -1.0, -1.0), (1.0, 1.0, 1.0))\n" ] }, { "data": { "text/html": [ "
\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 <class 'tidy3d.components.geometry.Box'> \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n",
       "\u2502 Rectangular prism.                                                                 \u2502\n",
       "\u2502    Also base class for :class:`Simulation`, :class:`Monitor`, and :class:`Source`. \u2502\n",
       "\u2502                                                                                    \u2502\n",
       "\u2502 \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e \u2502\n",
       "\u2502 \u2502 Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 2.0))                  \u2502 \u2502\n",
       "\u2502 \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f \u2502\n",
       "\u2502                                                                                    \u2502\n",
       "\u2502 bounding_box = Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 2.0))       \u2502\n",
       "\u2502       bounds = ((-1.0, -1.0, -1.0), (1.0, 1.0, 1.0))                               \u2502\n",
       "\u2502       center = (0.0, 0.0, 0.0)                                                     \u2502\n",
       "\u2502     geometry = Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 2.0))       \u2502\n",
       "\u2502  plot_params = PlotParams(                                                         \u2502\n",
       "\u2502                    alpha=1.0,                                                      \u2502\n",
       "\u2502                    edgecolor=None,                                                 \u2502\n",
       "\u2502                    facecolor=None,                                                 \u2502\n",
       "\u2502                    fill=True,                                                      \u2502\n",
       "\u2502                    hatch=None,                                                     \u2502\n",
       "\u2502                    linewidth=1.0,                                                  \u2502\n",
       "\u2502                    type='PlotParams'                                               \u2502\n",
       "\u2502                )                                                                   \u2502\n",
       "\u2502         size = (2.0, 2.0, 2.0)                                                     \u2502\n",
       "\u2502         type = 'Box'                                                               \u2502\n",
       "\u2502    zero_dims = []                                                                  \u2502\n",
       "\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n",
       "
\n" ], "text/plain": [ "\u001b[34m\u256d\u2500\u001b[0m\u001b[34m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u001b[0m\u001b[1;34m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'tidy3d.components.geometry.Box'\u001b[0m\u001b[1;34m>\u001b[0m\u001b[34m \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[0m\u001b[34m\u2500\u256e\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[36mRectangular prism.\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[36m Also base class for :class:`Simulation`, :class:`Monitor`, and :class:`Source`.\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mbounding_box\u001b[0m = \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mbounds\u001b[0m = \u001b[1m(\u001b[0m\u001b[1m(\u001b[0m\u001b[1;36m-1.0\u001b[0m, \u001b[1;36m-1.0\u001b[0m, \u001b[1;36m-1.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mcenter\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mgeometry\u001b[0m = \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mplot_params\u001b[0m = \u001b[1;35mPlotParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33medgecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfacecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfill\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mhatch\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mlinewidth\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33msize\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mtype\u001b[0m = \u001b[32m'Box'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mzero_dims\u001b[0m = \u001b[1m[\u001b[0m\u001b[1m]\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "None\n", "False\n", "[False False True False False]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "s1 = td.Sphere(radius=1, center=(0, 0, 0))\n", "s2 = td.Box(center=(1, 1, 1), size=(1, 1, 1))\n", "\n", "# do two geometric objects intersect?\n", "print(s1.intersects(s2))\n", "\n", "# does the object intersect a plane?\n", "print(s1.intersects_plane(z=10))\n", "\n", "# get polygons that intersect sphere at plane x=0\n", "print(s1.intersects_plane(x=0))\n", "\n", "# get bounds (rmin, rmax) of geometry\n", "print(s1.bounds)\n", "\n", "# get td.Box() for bounding box of geometry\n", "print(s1.bounding_box.help())\n", "\n", "# evaluate whether point(s) are inside of geometry\n", "print(s1.inside(x=0, y=1, z=1))\n", "print(s1.inside(x=np.linspace(-1, 1, 5), y=np.zeros(5), z=np.ones(5)))\n", "\n", "# plot the geometry at a cross sectional plane\n", "ax = s1.plot(y=0)\n" ] }, { "cell_type": "markdown", "id": "581841bb", "metadata": {}, "source": [ "Note, because simulations, monitors, and sources all are defined spatially, they inherit from [Box](../_autosummary/tidy3d.Box.html) and contain these methods as well, which can come in handy when doing validation.\n", "\n", "### Structures\n", "\n", "A [Structure](../_autosummary/tidy3d.Structure.html) is a component that simply contains a [Geometry](../_autosummary/tidy3d.components.geometry.Geometry.html) and a [Medium](../_autosummary/tidy3d.components.medium.AbstractMedium.html). It therefore defines an object in the simulation with some geometry and optical properties, such as a waveguide or slab." ] }, { "cell_type": "code", "execution_count": 13, "id": "07727a55", "metadata": { "tags": [] }, "outputs": [], "source": [ "dielectric_box = td.Structure(\n", " geometry=td.Box(center=(0, 0, 0), size=(1, 1, 1)),\n", " medium=td.Medium(permittivity=2.0),\n", ")\n" ] }, { "cell_type": "markdown", "id": "e735f638", "metadata": {}, "source": [ "### Sources\n", "\n", "Sources define how the electromagnetic current is injected into the simulation to give rise to fields. There are several types of sources, each generally defines some spatial or polarization properties of the source and also contain a `source_time` field, which defines the time dependence. As an example" ] }, { "cell_type": "code", "execution_count": 14, "id": "b06caa0b", "metadata": { "tags": [] }, "outputs": [], "source": [ "# define time dependence\n", "gaussian = td.GaussianPulse(freq0=150e12, fwidth=10e12)\n", "\n", "# z polarized dipole at origin\n", "dipole = td.UniformCurrentSource(\n", " center=(0, 0, 0), size=(0, 0, 0), source_time=gaussian, polarization=\"Ez\"\n", ")\n", "\n", "# z polarized plane wave propagating in -x\n", "plane_wave = td.PlaneWave(\n", " center=(0, 0, 0),\n", " size=(0, td.inf, td.inf),\n", " source_time=gaussian,\n", " pol_angle=np.pi / 2,\n", " direction=\"-\",\n", ")\n" ] }, { "cell_type": "markdown", "id": "062ef614", "metadata": {}, "source": [ "### Monitors\n", "\n", "Since it would be impractical to return the entire time series of all of the field data solved for by FDTD, \"monitors\" are specifications that tell Tidy3D what data should be returned by the solver.\n", "\n", "The following monitors measure their corresponding values in the frequency-domain\n", "\n", "- [FieldMonitor](../_autosummary/tidy3d.FieldMonitor.html)\n", "\n", "- [FluxMonitor](../_autosummary/tidy3d.FluxMonitor.html)\n", "\n", "- [ModeMonitor](../_autosummary/tidy3d.ModeMonitor.html)\n", "\n", "And the following measure their values in the time-domain\n", "\n", "- [FieldTimeMonitor](../_autosummary/tidy3d.FieldTimeMonitor.html)\n", "\n", "- [FluxTimeMonitor](../_autosummary/tidy3d.FluxTimeMonitor.html)\n", "\n", "There are also various monitors for field projections, diffraction efficiency, and other values. The [API reference](https://docs.flexcompute.com/projects/tidy3d/en/stable/api.html#monitors) lists each of the monitor types, for reference.\n", "\n", "Note: all monitors must be *named* (have a `name: str` field supplied). The data returned by the server will be indexed by the monitor name and accessed by the user using that name." ] }, { "cell_type": "code", "execution_count": 15, "id": "f37ac987", "metadata": {}, "outputs": [], "source": [ "# measures Ex, Ey, Hz fields on the plane at frequency 150THz\n", "mon1 = td.FieldMonitor(\n", " center=(1, 0, 0),\n", " size=(td.inf, td.inf, 0),\n", " fields=[\"Ex\", \"Ey\", \"Hz\"],\n", " freqs=[150e12],\n", " name=\"fields_at_150THz\",\n", ")\n", "\n", "# measures time dependence of flux through a plane every 5 time steps between a window of (start, stop)\n", "mon2 = td.FluxTimeMonitor(\n", " center=(1, 0, 0),\n", " size=(td.inf, td.inf, 0),\n", " start=1e-13,\n", " stop=3e-13,\n", " interval=5,\n", " name=\"flux_over_time\",\n", ")\n" ] }, { "cell_type": "markdown", "id": "86df481d", "metadata": {}, "source": [ "### Modes\n", "\n", "Modes (for sources and monitors) are specified using a [ModeSpec](../_autosummary/tidy3d.ModeSpec.html) object. This component contains all of the specifications needed for the mode solver to know which modes to inject or measure in the [ModeSource](../_autosummary/tidy3d.ModeSource.html) and [ModeMonitor](../_autosummary/tidy3d.ModeMonitor.html) objects, such as the number of modes, mode index, or a target mode effective index.\n", "\n", "For example:" ] }, { "cell_type": "code", "execution_count": 16, "id": "86f4f9e1", "metadata": {}, "outputs": [], "source": [ "# default mode solver spec (returns first mode)\n", "fundamental = td.ModeSpec()\n", "\n", "# tell the mode solver to return 4 modes\n", "first_4_modes = td.ModeSpec(num_modes=4)\n", "\n", "# have mode solver return 4 modes around the target effective index\n", "complicated = td.ModeSpec(num_modes=4, target_neff=2.0)\n" ] }, { "cell_type": "markdown", "id": "82dd8bf2", "metadata": {}, "source": [ "Using the mode specifications, we can make modal sources or monitors similar to before." ] }, { "cell_type": "code", "execution_count": 17, "id": "5b42e241", "metadata": {}, "outputs": [], "source": [ "# inject the fundamental mode\n", "mode_source = td.ModeSource(\n", " center=(0, 0, -1),\n", " size=(td.inf, td.inf, 0),\n", " source_time=gaussian,\n", " mode_spec=fundamental,\n", " mode_index=0,\n", " direction=\"+\",\n", ")\n", "\n", "# do modal decomposition and return amplitude data for the first 4 modes\n", "mode_mon = td.ModeMonitor(\n", " center=(0, 0, +1),\n", " size=(td.inf, td.inf, 0),\n", " freqs=freqs_hz,\n", " mode_spec=first_4_modes,\n", " name=\"modes\",\n", ")\n" ] }, { "cell_type": "markdown", "id": "82b91979", "metadata": {}, "source": [ "The [td.plugins.ModeSolver](../_autosummary/tidy3d.plugins.ModeSolver.html) is designed to help users come up with the correct [ModeSpec](../_autosummary/tidy3d.ModeSpec.html) for their problem, at which point it can be used directly in [ModeSource](../_autosummary/tidy3d.ModeSource.html) and [ModeMonitor](../_autosummary/tidy3d.ModeMonitor.html) objects without setting it explicitly using a [Simulation](../_autosummary/tidy3d.Simulation.html) method. For more details, refer to the [mode solver tutorial notebook](../notebooks/ModeSolver.html)." ] }, { "cell_type": "markdown", "id": "9de5a1b1", "metadata": {}, "source": [ "### Absorbing Boundaries\n", "\n", "Absorbing boundaries are defined as one of three types of boundaries\n", "\n", "- [td.PML()](../_autosummary/tidy3d.PML.html) defines a standard PML, with an adjustable number of layers.\n", "\n", "- [td.StablePML()](../_autosummary/tidy3d.StablePML.html) defines a PML with 'stable' profile, which can reduce divergence at the expense of more layers.\n", "\n", "- [td.Absorber()](../_autosummary/tidy3d.Absorber.html) defines adiabatically increasing conductivity values at the edges of the simultion, which can dramatically improve stability of simulations involving dispersive materials, again at the expense of more layers.\n", "\n", "As before, these layers *add* to the simulation size defined in [Simulation](../_autosummary/tidy3d.Simulation.html).\n", "\n", "Also as before, it is important to extend any structures all the way through the PML if they are meant to be touching the simulation boundary on that side.\n", "\n", "To define a sequence of PML layers on the x, y, z sides of the simulation, one may use the convenience functions provided in [td.BoundarySpec()](../_autosummary/tidy3d.BoundarySpec.html) and [td.Boundary()](../_autosummary/tidy3d.Boundary.html), as shown below.\n", "\n", "Default PML boundaries are always used on each side of the simulation, so if a boundary is not specified along a dimension, the simulation will have PML on that boundary." ] }, { "cell_type": "code", "execution_count": 18, "id": "bda9c2eb", "metadata": { "tags": [] }, "outputs": [], "source": [ "# standard absorber on x, PML with 20 layers on y, no PML on z (periodic BC)\n", "boundary_spec = td.BoundarySpec(\n", " x=td.Boundary.absorber(), y=td.Boundary.pml(num_layers=20), z=td.Boundary.periodic()\n", ")\n" ] }, { "cell_type": "markdown", "id": "f58489c6", "metadata": {}, "source": [ "### Simulations\n", "\n", "Finally, the [Simulation](../_autosummary/tidy3d.Simulation.html) objects contain all of the specifications needed to run the Tidy3D simulation and contain all of the previous components.\n", "\n", "A few notes:\n", "\n", "- [Simulation](../_autosummary/tidy3d.Simulation.html) accepts an optional `medium` parameter, specifying the background medium (air by default).\n", "\n", "- Each simulation must define the discretization using a `grid_spec`, which specifies how the grid is to be generated along each of the three directions. These are discussed in more detail [here](../notebooks/AutoGrid.html)." ] }, { "cell_type": "code", "execution_count": 19, "id": "11cf6c24", "metadata": { "tags": [] }, "outputs": [], "source": [ "sim = td.Simulation(\n", " size=(4, 4, 4),\n", " grid_spec=td.GridSpec.uniform(dl=0.2),\n", " run_time=1e-12,\n", " boundary_spec=td.BoundarySpec(\n", " x=td.Boundary.periodic(), y=td.Boundary.pml(), z=td.Boundary.periodic()\n", " ),\n", " structures=[dielectric_box],\n", " sources=[dipole],\n", " monitors=[mon1, mon2],\n", ")\n" ] }, { "cell_type": "markdown", "id": "09dba7ad", "metadata": {}, "source": [ "A defined [Simulation](../_autosummary/tidy3d.Simulation.html) also provides several useful methods in addition to the ones inherited from [Box](../_autosummary/tidy3d.Box.html)." ] }, { "cell_type": "code", "execution_count": 20, "id": "c9ccd22a", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x=TidyNDArray([-1.9, -1.7, -1.5, -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1,\n", " 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.9]) y=TidyNDArray([-4.3, -4.1, -3.9, -3.7, -3.5, -3.3, -3.1, -2.9, -2.7, -2.5,\n", " -2.3, -2.1, -1.9, -1.7, -1.5, -1.3, -1.1, -0.9, -0.7, -0.5,\n", " -0.3, -0.1, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5,\n", " 1.7, 1.9, 2.1, 2.3, 2.5, 2.7, 2.9, 3.1, 3.3, 3.5,\n", " 3.7, 3.9, 4.1, 4.3]) z=TidyNDArray([-1.9, -1.7, -1.5, -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1,\n", " 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.9]) type='Coords'\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA94AAAEMCAYAAAAyBG4mAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAACff0lEQVR4nO2deXgb1fX3v9ptSZYlyztxIAmU0ARCCiGEpQQIe6FpSwotNKyhQKDQlBZSaAgUmrasLUsCFEjL0lL4ldBCWcISApTSpsVv2Sl1iJ3gxJYsWZZsa73vH2bGkqzR7CPJOp/n0ZNYM3PnambOuefec+d+TYwxBoIgCIIgCIIgCIIgdMFc6goQBEEQBEEQBEEQxGSGOt4EQRAEQRAEQRAEoSPU8SYIgiAIgiAIgiAIHaGON0EQBEEQBEEQBEHoCHW8CYIgCIIgCIIgCEJHqONNEARBEARBEARBEDpCHW+CIAiCIAiCIAiC0BHqeBMEQRAEQRAEQRCEjlDHmyAIgiAIgiAIgiB0hDreBDFJ2bRpE0wmEzZt2lTqqhAEQRAEQRBEVUMdb4KocO6++26sX7++1NVQxKOPPorbb7+91NXI4f7778c+++yDmpoa7LXXXrjjjjskHxuPx3HllVeivb0dtbW1mD9/PjZu3Fhw37/97W847LDD4HQ60draiu9973uIRqNa/QyCIAiCIAiijDAxxlipK0EQhHJmz56NxsbGCZntTCaDRCIBu90Os7k8x9i+8pWv4N1338Wnn35a6qoAAO655x5ceOGF+MY3voHjjjsOr732Gh566CH8/Oc/x5VXXil6/Le+9S088cQTuPzyy7HXXnth/fr1+Oc//4lXXnkFhx12GL9fZ2cnFixYgH322QcXXHABtm/fjptvvhlHHnkknn32WT1/IkEQBEEQBFECqONNTApisRhcLlepq1EShDrelUA5dbxHRkbQ0dGBgw8+GE8//TT//ZlnnokNGzagp6cHPp9P8Ph//OMfmD9/Pm666SZcccUVAIDR0VHMnj0bzc3N+Nvf/sbve+KJJ6KzsxMffvghPB4PAOA3v/kNli1bhueffx7HHnusTr+SIAiCIAiCKAXlmQYjqpodO3bgvPPOQ3t7OxwOB6ZNm4aLLroIiUQCALB+/XqYTCa8+uqruPjii9Hc3IwpU6bwx999992YNWsWHA4H2tvbsXz5coTD4Zxz/Pe//8U3vvENtLa2oqamBlOmTMHpp5+OwcFBfp+NGzfisMMOg9frhdvtxt57740f//jHovWXclw8Hse1116LPffcEw6HAx0dHfjRj36EeDw+obyHH34YBx10EJxOJ3w+H7785S/jhRdeAADsscceeO+99/Dqq6/CZDLBZDJh4cKFAITf8X788cdxwAEHoLa2Fo2NjTjzzDOxY8eOnH3OPvtsuN1u7NixA4sXL4bb7UZTUxOuuOIKpNNp0Wvw1FNP4aSTTuLv4YwZM/DTn/4059iFCxfimWeewbZt2/i677HHHoJlPvjggzCZTHjggQdyvv/Zz34Gk8mEv/71r6L1KsYrr7yCYDCIiy++OOf75cuXIxaL4Zlnnil6/BNPPAGLxYILLriA/66mpgbnnXce3nzzTfT09AAAIpEINm7ciDPPPJPvdAPA0qVL4Xa78cc//lHV7yAIgiAIgiDKD2upK0AQ2Xz22Wc46KCDEA6HccEFF2DmzJnYsWMHnnjiCQwPD8Nut/P7XnzxxWhqasKqVasQi8UAAKtXr8Z1112HRYsW4aKLLsJHH32EtWvX4p///CfeeOMN2Gw2JBIJHHfccYjH47j00kvR2tqKHTt24Omnn0Y4HEZ9fT3ee+89fOUrX8F+++2H66+/Hg6HA5988gneeOONovWXclwmk8Epp5yC119/HRdccAH22WcfvPPOO7jtttvw8ccfY8OGDfy+1113HVavXo1DDjkE119/Pex2O9566y28/PLLOPbYY3H77bfj0ksvhdvtxtVXXw0AaGlpEazf+vXrcc4552DevHlYs2YNdu3ahV/96ld444038Pbbb8Pr9fL7ptNpHHfccZg/fz5uvvlmvPjii7jlllswY8YMXHTRRUWvw/r16+F2u7FixQq43W68/PLLWLVqFSKRCG666SYAwNVXX43BwUFs374dt912GwDA7XYLlnnOOefgT3/6E1asWIFjjjkGHR0deOedd3DdddfhvPPOw4knnsjvGwqFJA0QOJ1OOJ1OAMDbb78NADjwwANz9jnggANgNpvx9ttv48wzzxQs6+2338YXvvCFnM40ABx00EEAxqaXc3VOpVITzmO327H//vvz9SAIgiAIgiAmEYwgyoilS5cys9nM/vnPf07YlslkGGOMPfjggwwAO+yww1gqleK39/X1Mbvdzo499liWTqf57++8804GgD3wwAOMMcbefvttBoA9/vjjgvW47bbbGADW398vq/5SjnvooYeY2Wxmr732Ws7369atYwDYG2+8wRhj7L///S8zm83sa1/7Ws7vYWz8WjDG2KxZs9gRRxwx4TyvvPIKA8BeeeUVxhhjiUSCNTc3s9mzZ7ORkRF+v6effpoBYKtWreK/O+ussxgAdv311+eUOXfuXHbAAQcUvwiMseHh4Qnfffe732VOp5ONjo7y35100kls9913Fy2Po7e3lzU0NLBjjjmGxeNxNnfuXDZ16lQ2ODiYs9/uu+/OAIh+rr32Wv6Y5cuXM4vFUvC8TU1N7PTTTy9at1mzZrGjjjpqwvfvvfceA8DWrVvHGGPs8ccfZwDY5s2bJ+y7ZMkS1traKnYZCIIgCIIgiAqDppoTZUMmk8GGDRtw8sknT8gGAoDJZMr5e9myZbBYLPzfL774IhKJBC6//PKcxcSWLVsGj8fDTxWur68HADz//PMYHh4uWBcu8/vUU08hk8lI/g1Sjnv88cexzz77YObMmQgEAvznqKOOAjA25RkANmzYgEwmg1WrVk1YHC3/Wkhhy5Yt6Ovrw8UXX4yamhr++5NOOgkzZ84sOJX6wgsvzPn78MMPR1dXl+i5amtr+f8PDQ0hEAjg8MMPx/DwMD788EPZdedobW3FXXfdhY0bN+Lwww9HZ2cnHnjggQlZ5kceeQQbN24U/SxdupQ/ZmRkJGdGRTY1NTUYGRkpWreRkRE4HI6Cx3Lbs/8V2lfsPARBEARBEETlQVPNibKhv78fkUgEs2fPlrT/tGnTcv7etm0bAGDvvffO+d5ut2P69On89mnTpmHFihW49dZb8cgjj+Dwww/HKaecgjPPPJPvlJ922mn4zW9+g/PPPx9XXXUVjj76aHz961/HqaeeWnSFcCnH/fe//8UHH3yApqamgmX09fUBAP73v//BbDbji1/8oqTrIYbQ9QGAmTNn4vXXX8/5rqamZkIdfT4fQqGQ6Lnee+89XHPNNXj55ZcRiURytmW/R6+E008/HQ8//DCeeeYZXHDBBTj66KMn7HPooYfKLre2tpZfRyCf0dHRnMEEoeMLvaM/OjrKb8/+V2hfsfMQBEEQ0ti0aROOPPJIvPLKK/z6JwRBEKWCMt5ExaKmg3LLLbfgP//5D3784x9jZGQE3/ve9zBr1ixs376dL3vz5s148cUX8Z3vfAf/+c9/cNppp+GYY44p+u6wlOMymQz23XdfwSxs/uJepSJ7NoEcwuEwjjjiCPy///f/cP311+Mvf/kLNm7ciF/84hcAIGsGQSGCwSC2bNkCAHj//fcLltff34+dO3eKfrJ1s9va2pBOp/mBD45EIoFgMIj29vai9Wpra0Nvb++E77nvuOPb2tpyvs/fV+w8BEEQRC5333031q9fX+pqKOLRRx/F7bffXupq5HD//fdjn332QU1NDfbaay/ccccdko+Nx+O48sor0d7ejtraWsyfPx8bN24suO/f/vY3HHbYYXA6nWhtbcX3vve9nHaZICYb1PEmyoampiZ4PB68++67io7ffffdAQAfffRRzveJRAJbt27lt3Psu+++uOaaa7B582a89tpr2LFjB9atW8dvN5vNOProo3Hrrbfi/fffx4033oiXX36ZnwouhNhxM2bMwMDAAI4++mgsWrRowofLSM+YMQOZTAbvv/9+0fNJnXYudH247/Kvj1I2bdqEYDCI9evX47LLLsNXvvIVLFq0qKAUl5Ip88uXL8fQ0BDWrFmD119/vWDAMm/ePLS1tYl+br75Zv6Y/fffHwD4Tj3Hli1bkMlk+O1C7L///vj4448nZPjfeuutnPJnz54Nq9U64TyJRAKdnZ2i5yEIgiByEep4f/nLX8bIyAi+/OUvG18piZRbx/uee+7B+eefj1mzZuGOO+7AggUL8L3vfY8fPBfj7LPPxq233oozzjgDv/rVr2CxWHDiiSdOmFXX2dmJo48+GsPDw7j11ltx/vnn495778WSJUv0+FkEURZQx5soG8xmMxYvXoy//OUvEzolAMBEJOcXLVoEu92OX//61zn73n///RgcHMRJJ50EYEzOKZVK5Ry77777wmw289N/BwYGJpTPdYgKTRHmkHLcN7/5TezYsQP33XffhH1HRkb4FdoXL14Ms9mM66+/fkJWN/v3uVyuCXJphTjwwAPR3NyMdevW5fyGZ599Fh988AF/fdTCZcqz65hIJHD33XdP2Nflcsmaev7EE0/gsccew89//nNcddVVOP3003HNNdfg448/ztlPyTveRx11FBoaGrB27dqcstauXQun05lzfQKBAD788MOcNQJOPfVUpNNp3Hvvvfx38XgcDz74IObPn4+Ojg4AY2sMLFq0CA8//DCGhob4fR966CFEo1EKOgiCUATXdhDjmM1m1NTUFH1FjBhnZGQEV199NU466SQ88cQTWLZsGX73u9/hjDPOwE9/+lPRV83+8Y9/4A9/+APWrFmDm266CRdccAFefvll7L777vjRj36Us++Pf/xj+Hw+bNq0CRdeeCFuuOEG3HnnnXjuued4yVSCmHSUdm03gshl+/btrLW1lTmdTnb55Zeze+65h61evZrNmjWLhUIhxtj4quaFVj6/9tprGQB27LHHsjvvvJNdeumlzGKxsHnz5rFEIsEYY+zJJ59ku+22G7v88svZ3XffzX7961+zefPmMZvNxt58803GGGOXXXYZmzt3LrvmmmvYfffdx2688Ua22267sSlTprBwOCxYfynHpdNpduKJJzKTycROP/10dscdd7Dbb7+dXXjhhayhoSHnd/3kJz9hANghhxzCbr75ZnbHHXewpUuXsquuuorf5+KLL2Ymk4n99Kc/Zb///e/ZSy+9xBibuKp59rWbP38+u/3229nKlSuZ0+lke+yxB399GRtb1dzlcgle32IEAgHm8/nY7rvvzm655RZ26623srlz57I5c+ZMqM8vf/lLBoB9//vfZ48++ij785//LFjurl27WGNjIzvyyCP5Vd0DgQBraWlhCxYsmLDyuxLuuusuBoCdeuqp7L777mNLly5lANiNN96Ysx93HbJ/C2Njq5JbrVb2wx/+kN1zzz3skEMOYVarlb366qs5+/3rX/9iDoeDzZ07l61du5ZdffXVrKamhh177LGqfwNBEJXP9u3b2bnnnsva2tqY3W5ne+yxB7vwwgtZPB5njI378k2bNrGLLrqINTU1Ma/Xyx9/1113sS9+8YvMbreztrY2dvHFF+f4eMYY+/jjj9nXv/511tLSwhwOB9ttt93YaaedltPGvfDCC+zQQw9l9fX1zOVysS984Qts5cqVovWXctzo6ChbtWoVmzFjBrPb7WzKlCnshz/8YY7yBcdDDz3E5s2bx2pra5nX62WHH344e/755xljhVUsOKWPQu0gY4z98Y9/ZF/60pdYTU0N8/v97IwzzmDbt2/P2YdrB7dv386++tWvMpfLxRobG9kPfvCDHEUVITZs2MBOPPFE/h5Onz6dXX/99TnHHnHEERPqXkzp44EHHmAA2P3335/z/Y033sgAsGeeeUa0XsV45plnCpbzt7/9jQFg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nU6LluV2u+F2uwEAbW1tSKfT6OvrQ3NzM79PIpFAMBhEe3t70bLa2tqwY8eOCd/39vYCAH98W1tbzvf5+4qdhyAqlYqZar5mzRrMmzcPdXV1aG5uxuLFiwvqERMEQRAEQVQiTU1N8Hg8ePfddxUdv/vuuwPAhPgokUhg69at/HaOfffdF9dccw02b96M1157DTt27MC6dev47WazGUcffTRuvfVWvP/++7jxxhvx8ssv81PBhRA7bsaMGRgYGMDRRx+NRYsWTfhwGekZM2Ygk8ng/fffL3o+qdPOha4P913+9VHKpk2bEAwGsX79elx22WX4yle+gkWLFsHn803YV8mU+eXLl2NoaAhr1qzB66+/XlAHfN68eWhraxP93HzzzfwxnPxpvqTrli1bkMlk+O1C7L///vj4448nZPjfeuutnPJnz54Nq9U64TyJRAKdnZ2i5yGISqViOt6vvvoqli9fjr///e/YuHEjkskkjj32WNKtJAiCIAhiUmA2m7F48WL85S9/mdApAQDGWNHjFy1aBLvdjl//+tc5+95///0YHBzESSedBACIRCJIpVI5x+67774wm8389N+BgYEJ5XMdokJThDmkHPfNb34TO3bswH333Tdh35GRET62W7x4McxmM66//voJWeLs3+dyuRAOhwXrxHHggQeiubkZ69aty/kNzz77LD744AP++qiFy5Rn1zGRSODuu++esK/L5ZI19fyJJ57AY489hp///Oe46qqrcPrpp+Oaa67Bxx9/nLOfkne8jzrqKDQ0NGDt2rU5Za1duxZOpzPn+gQCAXz44Yc5awSceuqpSKfTuPfee/nv4vE4HnzwQcyfP5+fyVBfX49Fixbh4YcfxtDQEL/vQw89hGg0iiVLlki+HgRRUZR2bTfl9PX1MQAT9HEJgiAIgiAqle3bt7PW1tYcqa3Vq1ezWbNmTZATK7TyOScnduyxx7I777yTXXrppRPkxJ588km22267scsvv5zdfffd7Ne//jWbN28es9ls7M0332SMMXbZZZexuXPnsmuuuYbdd9997MYbb2S77bYbmzJlSo7Wdz5Sjkun0+zEE09kJpOJnX766eyOO+5gt99+O7vwwgtZQ0NDzu/6yU9+wsuJ3XzzzeyOO+5gS5cuZVdddRW/z8UXX8xMJhP76U9/yn7/+9+zl156iTFWXE5s/vz57Pbb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lvPdOeecg5kzZ+LKK6+k6fsVBg2DakSlaZCecsopmDp1KmpqatDW1obvfOc7+Oyzz0pdraJUqkbpjTfeiEMOOQROpxNer7fU1RGk0vRLN2/ejJNPPhnt7e0wmUzYsGFDqaskiUrUN127di32228/eDweeDweLFiwAM8++2ypqyUb0j8tL6ZOnYrZs2fzny984QsAgBkzZlCnWwE7duzAwoULMXXqVNx8883o7+/Hzp07sXPnzlJXrSJYsWIF7rvvPvz2t7/FBx98gIsuugixWAznnHNOqatWcSxfvhwPP/wwHn30UdTV1fHP4cjISKmrVnHU1dXl+MnZs2fD5XLB7/dTp7sCoY63RlSaBumRRx6JP/7xj/joo4/wf//3f/jf//6HU089tdTVKkqlapQmEgksWbIEF110UamrIkgl6pfGYjHMmTMHd911V6mrIotK1DedMmUKfv7zn+Nf//oXtmzZgqOOOgpf/epX8d5775W6apIh/VNisrNx40Z88skneOmllzBlyhS0tbXxH0Kc0047DTfffDNWrVqF/fffH52dnXjuuecmLLhGiLN27VoMDg5i4cKFOc/hY489VuqqEURJoanmGvDss89ixYoV+L//+z/MmjWrIqVQ/vznP2Px4sWIx+Ow2Wylro5kbrrpJqxduxZdXV2lrooo69evx+WXX45wOFzqqkxg/vz5mDdvHu68804AY1PsOjo6cOmll1bEFDuTyYQnn3wy5928SqG/vx/Nzc149dVX8eUvf7nU1ZFMQ0MDbrrpJpx33nmlrooo0WgUX/rSl3D33XfjhhtuIBkWgiAIgiAMhzLeKtm1axeWLVuGhx56CE6ns9TVUcTAwAAeeeQRHHLIIRXV6QaAwcFBNDQ0lLoaFU0ikcC//vUvLFq0iP/ObDZj0aJFePPNN0tYs+pgcHAQACrmOU6n0/jDH/6AWCyGBQsWlLo6kli+fDlOOumknGecIAiCIAjCSKjjrYJ8DdJK48orr+TfE+nu7q64VTs5jdLvfve7pa5KRVNMv5TeDdSXStI3feedd+B2u+FwOHDhhRfiySefxBe/+MVSV0sUTv90zZo1pa4KQRAEQRBVDHW8C1CpGqRytT5/+MMf4u2338YLL7wAi8WCpUuXohRvHlSiRqmSOhNEPpWkb7r33nujs7MTb731Fi666CKcddZZeP/990tdraKQ/ilBEARBEOUCveNdgErVIJWr9ZnN9u3b0dHRgb/97W+GTx+tRI1SJde6XN/xngz6pZX4jnel65suWrQIM2bMwD333FPqqghC+qcEQRAEQZQL1lJXoBxpampCU1OT6H6//vWvccMNN/B/cxqkjz32GObPn69nFQsitd6FyGQyAMZk0YxGTr2zNUoffPDBknS6AXXXutyw2+044IAD8NJLL/Ed10wmg5deegmXXHJJaSs3CcnXN63ETjcw9oyUwl/I4eijj8Y777yT8122/il1ugmCIAiCMArqeKtg6tSpOX+73W4A5a9B+tZbb+Gf//wnDjvsMPh8Pvzvf//DT37yE8yYMaOsF0viNEp33313XqOUo7W1tYQ1K053dzcGBgbQ3d2NdDrN67zvueee/DNTalasWIGzzjoLBx54IA466CDcfvvtZa9fGo1G8cknn/B/b926FZ2dnWhoaJhgm+XE8uXL8eijj+Kpp57i9U0BoL6+HrW1tSWuXWFWrlyJE044AVOnTsXQ0BAeffRRbNq0Cc8//3ypq1YUTv80G9I/JQiCIAiiFFDHuwpxOp3405/+hGuvvRaxWAxtbW04/vjjcc0118DhcJS6eoJwGqWffPLJhIGNcn5jYtWqVTmvHcydOxcA8Morr2DhwoUlqlUup512Gvr7+7Fq1Srs3LkT+++/f9nrl27ZsgVHHnkk//eKFSsAjE2RX79+fYlqJc7atWsBYMK9f/DBB3H22WcbXyEJ9PX1YenSpejt7UV9fT32228/PP/88zjmmGNKXTWCIAiCIIiKgN7xJgiCIAiCIAiCIAgdoVXNCYIgCIIgCIIgCEJHqONNEARBEARBEARBEDpCHW+CIAiCIAiCIAiC0BHqeBMEQRAEQRBVy+9+9zv4/f4JEomLFy/Gd77znRLViiCIyQZ1vAmCIAiCIIiqZcmSJUin0/jzn//Mf9fX14dnnnkG5557bglrRhDEZII63gRBEARBEETVUltbi29/+9t48MEH+e8efvhhTJ06tWxkPwmCqHyo400QBEEQBEFUNcuWLcMLL7yAHTt2AADWr1+Ps88+GyaTqcQ1IwhiskA63gRBEARBEETVc8ABB+DUU0/Fsccei4MOOgiffvopOjo6Sl0tgiAmCdZSV4AgCIIgCIIgSs3555+P22+/HTt27MCiRYuo000QhKZQxpsgCIIgCIKoegYHB9He3o5UKoXf/e53OO2000pdJYIgJhH0jjdBVDkko0IQBEEQQH19Pb7xjW/A7XZj8eLFpa4OQRCTDOp4E0SVQzIqBEEQBDHGjh07cMYZZ8DhcJS6KgRBTDKo400QVQ7JqBAEQRDVTigUwpNPPolNmzZh+fLlpa4OQRCTEFpcjSAILFu2DPPmzcOOHTuw2267kYwKQRAEUVXMnTsXoVAIv/jFL7D33nuXujoEQUxCaHE1giAAkIwKQRAEQRAEQegFZbwJggBAMioEQRAEQRAEoReU8SYIAgDJqBAEQRAEQRCEXtDiagRBACAZFYIgCIIgCILQC+p4EwTBQzIqBEEQBEEQBKE9NNWcIAiEQiFs2rQJp556Kt5//31a0ZUgCIIgCIIgNIQWVyMIgmRUCIIgCIIgCEJHKONNEARBEARBEARBEDpC73gTBEEQBEEQBEEQhI5Qx5sgCIIgCIIgCIIgdIQ63gRBEARBEARBEAShI9TxJgiCIAiCIAiCIAgdoY43QRAEQRAEQRAEQegIdbwJgiAIgiAIgiAIQkeo400QBEEQBEEQBEEQOkIdb4IgCIIgCIIgCILQEep4EwRBEARBEARBEISO/H+aYVw/Ha0lhAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# get permittivity at yee cell centers in a volume defined by a box.\n", "sim.epsilon(td.Box(size=(1, 0, 1)), \"centers\")\n", "\n", "# get a `td.Grid` containing all information about spatial locations in the FDTD / yee grid\n", "print(sim.grid.centers)\n", "\n", "# plot the simulation cross section\n", "f, (ax1, ax2) = plt.subplots(1, 2, tight_layout=True, figsize=(10, 4))\n", "\n", "# plot the structures, PML, sources, mediums\n", "ax1 = sim.plot(x=0, ax=ax1)\n", "\n", "# same thing but plot structure in grayscale using permittivity value\n", "ax1 = sim.plot_eps(x=0, ax=ax2)\n", "\n", "# add the FDTD grid boundaries\n", "ax2 = sim.plot_grid(x=0, ax=ax2)\n" ] }, { "cell_type": "markdown", "id": "c67fdc68", "metadata": {}, "source": [ "## Simulation Submission\n", "\n", "Here we discuss the process for submitting, managing, monitoring, and loading simulations from our server.\n", "\n", "Topics covered will include:\n", "* [tidy3d.web](../api.html#submitting-simulations) functions.\n", "* working with [tidy3d.web.Job](../_autosummary/tidy3d.web.container.Job.html) and [tidy3d.web.Batch](../_autosummary/tidy3d.web.container.Batch.html) convenience containers." ] }, { "cell_type": "code", "execution_count": 21, "id": "9f16e7e9", "metadata": { "tags": [] }, "outputs": [], "source": [ "import tidy3d.web as web\n" ] }, { "cell_type": "markdown", "id": "b388e315", "metadata": {}, "source": [ "### Web interface\n", "\n", "The web interface provides a number of basic functions, but usually, the most convenient way to run a single simulation in one line is with [sim_data = web.run(sim)](../_autosummary/tidy3d.web.webapi.run.html#tidy3d.web.webapi.run), which simply performs all of the necessary steps under the hood.\n", "\n", "The output of the simultion is a separate data object called a [SimulationData](../_autosummary/tidy3d.SimulationData.html), which provides an interface for post processing and visualizing the data." ] }, { "cell_type": "code", "execution_count": 22, "id": "1f75f482", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
[16:10:17] Created task 'web_demo' with task_id 'fdve-5b8a1e04-8b39-46c8-b065-2dd7cdcb95b8v1'.        webapi.py:139\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:10:17]\u001b[0m\u001b[2;36m \u001b[0mCreated task \u001b[32m'web_demo'\u001b[0m with task_id \u001b[32m'fdve-5b8a1e04-8b39-46c8-b065-2dd7cdcb95b8v1'\u001b[0m. \u001b]8;id=986700;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=224759;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#139\u001b\\\u001b[2m139\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "758896a59f704376887085d8afedfac2", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[16:10:20] status = queued                                                                            webapi.py:269\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:10:20]\u001b[0m\u001b[2;36m \u001b[0mstatus = queued \u001b]8;id=140702;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=397370;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#269\u001b\\\u001b[2m269\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[16:10:21] status = preprocess                                                                        webapi.py:263\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:10:21]\u001b[0m\u001b[2;36m \u001b[0mstatus = preprocess \u001b]8;id=126827;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=699381;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#263\u001b\\\u001b[2m263\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
[16:10:27] Maximum FlexCredit cost: 0.025. Use 'web.real_cost(task_id)' to get the billed FlexCredit cost webapi.py:286\n",
       "           after a simulation run.                                                                                 \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:10:27]\u001b[0m\u001b[2;36m \u001b[0mMaximum FlexCredit cost: \u001b[1;36m0.025\u001b[0m. Use \u001b[32m'web.real_cost\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m to get the billed FlexCredit cost \u001b]8;id=651486;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=861409;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#286\u001b\\\u001b[2m286\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0mafter a simulation run. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           starting up solver                                                                         webapi.py:290\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0mstarting up solver \u001b]8;id=308611;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=530858;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#290\u001b\\\u001b[2m290\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           running solver                                                                             webapi.py:300\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0mrunning solver \u001b]8;id=861310;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=761155;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#300\u001b\\\u001b[2m300\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "381d4c15f8be41908411afe55c791faa", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[16:10:33] early shutoff detected, exiting.                                                           webapi.py:313\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:10:33]\u001b[0m\u001b[2;36m \u001b[0mearly shutoff detected, exiting. \u001b]8;id=206882;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=532013;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#313\u001b\\\u001b[2m313\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           status = postprocess                                                                       webapi.py:330\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0mstatus = postprocess \u001b]8;id=913936;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=125089;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#330\u001b\\\u001b[2m330\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[16:10:36] status = success                                                                           webapi.py:337\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:10:36]\u001b[0m\u001b[2;36m \u001b[0mstatus = success \u001b]8;id=755204;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=234836;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#337\u001b\\\u001b[2m337\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0aad644af04c41b39c07489989b8ec64",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[16:10:38] loading SimulationData from data/data.hdf5                                                 webapi.py:512\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:10:38]\u001b[0m\u001b[2;36m \u001b[0mloading SimulationData from data/data.hdf5 \u001b]8;id=146119;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=551264;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#512\u001b\\\u001b[2m512\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[16:10:38] WARNING: Simulation final field decay value of 0.00486 is greater than the simulation shutoff  log.py:50\n",
       "           threshold of 1e-05. Consider simulation again with large run_time duration for more accurate            \n",
       "           results.                                                                                                \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:10:38]\u001b[0m\u001b[2;36m \u001b[0mWARNING: Simulation final field decay value of \u001b[1;36m0.00486\u001b[0m is greater than the simulation shutoff \u001b]8;id=646651;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/log.py\u001b\\\u001b[2mlog.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=98965;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/log.py#50\u001b\\\u001b[2m50\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0mthreshold of \u001b[1;36m1e-05\u001b[0m. Consider simulation again with large run_time duration for more accurate \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0mresults. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sim_data = web.run(sim, task_name=\"web_demo\", path=\"data/data.hdf5\", verbose=True)\n" ] }, { "cell_type": "markdown", "id": "1d57c398-4e72-43e7-840b-0fa72e286be4", "metadata": {}, "source": [ "> Note: the warning here tells us that we should probably increase the `run_time` of our `Simulation` to ensure the fields properly decay. Since this notebook is just a demonstration and we don't care about the results, we can ignore it in this case." ] }, { "cell_type": "markdown", "id": "fc5071ee", "metadata": {}, "source": [ "### Containers and Batching\n", "\n", "The convenience containers [Job](../_autosummary/tidy3d.web.container.Job.html) and [Batch](../_autosummary/tidy3d.web.container.Batch.html) allow one to manage single and multiple tasks in a more \"object oriented\" fashion.\n", "\n", "They follow the same basic API as the `web.` functions, except [Batch](../_autosummary/tidy3d.web.container.Batch.html) objects accept a dictionary of simulations and return generators that can be iterated through to give [SimulationData](../_autosummary/tidy3d.SimulationData.html) for each task, rather than returning it one by one. This cuts down on memory for several large jobs. \n", "\n", "While we won't cover all of the details here, for more information, see the [tutorial on the Web API](../notebooks/WebAPI.html) or look at the examples in the other notebooks.\n", "\n", "Finally, we provide [web.run_async](../_autosummary/tidy3d.web.run_async.html), which is like `web.run()` but runs a dictionary of simulations asynchronously, and is more convenient than `Batch` in some cases." ] }, { "cell_type": "markdown", "id": "b6045533", "metadata": {}, "source": [ "## Output Data\n", "\n", "Here we will discuss working with output data from a simulation.\n", "\n", "Topics covered will include:\n", "\n", "- [SimulationData](../_autosummary/tidy3d.SimulationData.html) objects.\n", "\n", "- Obtaining information about a completed FDTD simulation.\n", "\n", "- Selecting data by monitor or field value.\n", "\n", "- Post-processing and visualizing data.\n", "\n", "### Simulation Data\n", "\n", "As mentioned, tidy3d data for a single task is stored in a [SimulationData](../_autosummary/tidy3d.SimulationData.html) object.\n", "\n", "In addition to storing the data for each of the individual monitors in the simulation, it has its own useful functionality." ] }, { "cell_type": "code", "execution_count": 23, "id": "b4632332", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Simulation domain Nx, Ny, Nz: [20, 44, 20]\n", "Applied symmetries: (0, 0, 0)\n", "Number of computational grid points: 1.8400e+04.\n", "Using subpixel averaging: True\n", "Number of time steps: 2.6240e+03\n", "Automatic shutoff factor: 1.00e-05\n", "Time step (s): 3.8131e-16\n", "\n", "\n", "Compute source modes time (s): 0.0309\n", "Compute monitor modes time (s): 0.0032\n", "Rest of setup time (s): 2.7111\n", "\n", "Running solver for 2624 time steps...\n", "- Time step 104 / time 3.97e-14s ( 4 % done), field decay: 1.00e+00\n", "- Time step 209 / time 7.97e-14s ( 8 % done), field decay: 1.00e+00\n", "- Time step 314 / time 1.20e-13s ( 12 % done), field decay: 5.47e-01\n", "- Time step 419 / time 1.60e-13s ( 16 % done), field decay: 4.20e-01\n", "- Time step 524 / time 2.00e-13s ( 20 % done), field decay: 3.28e-01\n", "- Time step 629 / time 2.40e-13s ( 24 % done), field decay: 1.27e-01\n", "- Time step 734 / time 2.80e-13s ( 28 % done), field decay: 1.24e-02\n", "- Time step 839 / time 3.20e-13s ( 32 % done), field decay: 4.07e-02\n", "- Time step 944 / time 3.60e-13s ( 36 % done), field decay: 1.23e-01\n", "- Time step 1049 / time 4.00e-13s ( 40 % done), field decay: 1.46e-01\n", "- Time step 1154 / time 4.40e-13s ( 44 % done), field decay: 1.00e-01\n", "- Time step 1259 / time 4.80e-13s ( 48 % done), field decay: 3.70e-02\n", "- Time step 1364 / time 5.20e-13s ( 52 % done), field decay: 6.51e-03\n", "- Time step 1469 / time 5.60e-13s ( 56 % done), field decay: 2.47e-02\n", "- Time step 1574 / time 6.00e-13s ( 60 % done), field decay: 5.65e-02\n", "- Time step 1679 / time 6.40e-13s ( 64 % done), field decay: 6.46e-02\n", "- Time step 1784 / time 6.80e-13s ( 68 % done), field decay: 4.11e-02\n", "- Time step 1889 / time 7.20e-13s ( 72 % done), field decay: 1.43e-02\n", "- Time step 1994 / time 7.60e-13s ( 76 % done), field decay: 3.80e-03\n", "- Time step 2099 / time 8.00e-13s ( 80 % done), field decay: 1.31e-02\n", "- Time step 2204 / time 8.40e-13s ( 84 % done), field decay: 2.64e-02\n", "- Time step 2309 / time 8.80e-13s ( 88 % done), field decay: 2.97e-02\n", "- Time step 2414 / time 9.20e-13s ( 92 % done), field decay: 1.90e-02\n", "- Time step 2519 / time 9.61e-13s ( 96 % done), field decay: 5.62e-03\n", "- Time step 2623 / time 1.00e-12s (100 % done), field decay: 4.86e-03\n", "\n", "Solver time (s): 0.3125\n", "\n" ] }, { "data": { "text/html": [ "
\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 <class 'tidy3d.components.simulation.Simulation'> \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n",
       "\u2502 Contains all information about Tidy3d simulation.                                                               \u2502\n",
       "\u2502                                                                                                                 \u2502\n",
       "\u2502 \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e \u2502\n",
       "\u2502 \u2502 Simulation(                                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   type='Simulation',                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   center=(0.0, 0.0, 0.0),                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   size=(4.0, 4.0, 4.0),                                                                                   \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   run_time=1e-12,                                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   medium=Medium(name=None, frequency_range=None, type='Medium', permittivity=1.0, conductivity=0.0),      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   symmetry=(0, 0, 0),                                                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   structures=(                                                                                            \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   Structure(                                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   geometry=Box(type='Box', center=(0.0, 0.0, 0.0), size=(1.0, 1.0, 1.0)),                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   name=None,                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   type='Structure',                                                                               \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   medium=Medium(                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   name=None,                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   frequency_range=None,                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   type='Medium',                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   permittivity=2.0,                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   conductivity=0.0                                                                            \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   )                                                                                               \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   ),                                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   ),                                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   sources=(                                                                                               \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   UniformCurrentSource(                                                                               \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   type='UniformCurrentSource',                                                                    \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   center=(0.0, 0.0, 0.0),                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   size=(0.0, 0.0, 0.0),                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   source_time=GaussianPulse(                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   amplitude=1.0,                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   phase=0.0,                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   type='GaussianPulse',                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   freq0=150000000000000.0,                                                                    \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   fwidth=10000000000000.0,                                                                    \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   offset=5.0                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   ),                                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   name=None,                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   polarization='Ez'                                                                               \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   ),                                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   ),                                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   boundary_spec=BoundarySpec(                                                                             \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   x=Boundary(                                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   plus=Periodic(name=None, type='Periodic'),                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   minus=Periodic(name=None, type='Periodic'),                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   type='Boundary'                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   ),                                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   y=Boundary(                                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   plus=PML(                                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   name=None,                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   type='PML',                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   num_layers=12,                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   parameters=PMLParams(                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   sigma_order=3,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   sigma_min=0.0,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   sigma_max=1.5,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   type='PMLParams',                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   kappa_order=3,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   kappa_min=1.0,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   kappa_max=3.0,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   alpha_order=1,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   alpha_min=0.0,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   alpha_max=0.0                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   )                                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   ),                                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   minus=PML(                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   name=None,                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   type='PML',                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   num_layers=12,                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   parameters=PMLParams(                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   sigma_order=3,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   sigma_min=0.0,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   sigma_max=1.5,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   type='PMLParams',                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   kappa_order=3,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   kappa_min=1.0,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   kappa_max=3.0,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   alpha_order=1,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   alpha_min=0.0,                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   \u2502   alpha_max=0.0                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   \u2502   )                                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   ),                                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   type='Boundary'                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   ),                                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   z=Boundary(                                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   plus=Periodic(name=None, type='Periodic'),                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   minus=Periodic(name=None, type='Periodic'),                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   type='Boundary'                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   ),                                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   type='BoundarySpec'                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   ),                                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   monitors=(                                                                                              \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   FieldMonitor(                                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   type='FieldMonitor',                                                                            \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   center=(1.0, 0.0, 0.0),                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   size=(inf, inf, 0.0),                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   name='fields_at_150THz',                                                                        \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   freqs=(150000000000000.0,),                                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   apodization=ApodizationSpec(start=None, end=None, width=None, type='ApodizationSpec'),          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   fields=('Ex', 'Ey', 'Hz'),                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   interval_space=(1, 1, 1),                                                                       \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   colocate=False                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   ),                                                                                                  \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   FluxTimeMonitor(                                                                                    \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   type='FluxTimeMonitor',                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   center=(1.0, 0.0, 0.0),                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   size=(inf, inf, 0.0),                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   name='flux_over_time',                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   start=1e-13,                                                                                    \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   stop=3e-13,                                                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   interval=5,                                                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   normal_dir='+',                                                                                 \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   \u2502   exclude_surfaces=None                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   )                                                                                                   \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   ),                                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   grid_spec=GridSpec(                                                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   grid_x=UniformGrid(type='UniformGrid', dl=0.2),                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   grid_y=UniformGrid(type='UniformGrid', dl=0.2),                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   grid_z=UniformGrid(type='UniformGrid', dl=0.2),                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   wavelength=None,                                                                                    \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   override_structures=(),                                                                             \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   \u2502   type='GridSpec'                                                                                     \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   ),                                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   shutoff=1e-05,                                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   subpixel=True,                                                                                          \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   normalize_index=0,                                                                                      \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   courant=0.99,                                                                                           \u2502 \u2502\n",
       "\u2502 \u2502 \u2502   version='2.0.0'                                                                                         \u2502 \u2502\n",
       "\u2502 \u2502 )                                                                                                           \u2502 \u2502\n",
       "\u2502 \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f \u2502\n",
       "\u2502                                                                                                                 \u2502\n",
       "\u2502  background_structure = Structure(                                                                              \u2502\n",
       "\u2502                             geometry=Box(type='Box', center=(0.0, 0.0, 0.0), size=(inf, inf, inf)),             \u2502\n",
       "\u2502                             name=None,                                                                          \u2502\n",
       "\u2502                             type='Structure',                                                                   \u2502\n",
       "\u2502                             medium=Medium(                                                                      \u2502\n",
       "\u2502                                 name=None,                                                                      \u2502\n",
       "\u2502                                 frequency_range=None,                                                           \u2502\n",
       "\u2502                                 type='Medium',                                                                  \u2502\n",
       "\u2502                                 permittivity=1.0,                                                               \u2502\n",
       "\u2502                                 conductivity=0.0                                                                \u2502\n",
       "\u2502                             )                                                                                   \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502         boundary_spec = BoundarySpec(                                                                           \u2502\n",
       "\u2502                             x=Boundary(                                                                         \u2502\n",
       "\u2502                                 plus=Periodic(name=None, type='Periodic'),                                      \u2502\n",
       "\u2502                                 minus=Periodic(name=None, type='Periodic'),                                     \u2502\n",
       "\u2502                                 type='Boundary'                                                                 \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                             y=Boundary(                                                                         \u2502\n",
       "\u2502                                 plus=PML(                                                                       \u2502\n",
       "\u2502                                     name=None,                                                                  \u2502\n",
       "\u2502                                     type='PML',                                                                 \u2502\n",
       "\u2502                                     num_layers=12,                                                              \u2502\n",
       "\u2502                                     parameters=PMLParams(                                                       \u2502\n",
       "\u2502                                         sigma_order=3,                                                          \u2502\n",
       "\u2502                                         sigma_min=0.0,                                                          \u2502\n",
       "\u2502                                         sigma_max=1.5,                                                          \u2502\n",
       "\u2502                                         type='PMLParams',                                                       \u2502\n",
       "\u2502                                         kappa_order=3,                                                          \u2502\n",
       "\u2502                                         kappa_min=1.0,                                                          \u2502\n",
       "\u2502                                         kappa_max=3.0,                                                          \u2502\n",
       "\u2502                                         alpha_order=1,                                                          \u2502\n",
       "\u2502                                         alpha_min=0.0,                                                          \u2502\n",
       "\u2502                                         alpha_max=0.0                                                           \u2502\n",
       "\u2502                                     )                                                                           \u2502\n",
       "\u2502                                 ),                                                                              \u2502\n",
       "\u2502                                 minus=PML(                                                                      \u2502\n",
       "\u2502                                     name=None,                                                                  \u2502\n",
       "\u2502                                     type='PML',                                                                 \u2502\n",
       "\u2502                                     num_layers=12,                                                              \u2502\n",
       "\u2502                                     parameters=PMLParams(                                                       \u2502\n",
       "\u2502                                         sigma_order=3,                                                          \u2502\n",
       "\u2502                                         sigma_min=0.0,                                                          \u2502\n",
       "\u2502                                         sigma_max=1.5,                                                          \u2502\n",
       "\u2502                                         type='PMLParams',                                                       \u2502\n",
       "\u2502                                         kappa_order=3,                                                          \u2502\n",
       "\u2502                                         kappa_min=1.0,                                                          \u2502\n",
       "\u2502                                         kappa_max=3.0,                                                          \u2502\n",
       "\u2502                                         alpha_order=1,                                                          \u2502\n",
       "\u2502                                         alpha_min=0.0,                                                          \u2502\n",
       "\u2502                                         alpha_max=0.0                                                           \u2502\n",
       "\u2502                                     )                                                                           \u2502\n",
       "\u2502                                 ),                                                                              \u2502\n",
       "\u2502                                 type='Boundary'                                                                 \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                             z=Boundary(                                                                         \u2502\n",
       "\u2502                                 plus=Periodic(name=None, type='Periodic'),                                      \u2502\n",
       "\u2502                                 minus=Periodic(name=None, type='Periodic'),                                     \u2502\n",
       "\u2502                                 type='Boundary'                                                                 \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                             type='BoundarySpec'                                                                 \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502          bounding_box = Box(type='Box', center=(0.0, 0.0, 0.0), size=(4.0, 4.0, 4.0))                           \u2502\n",
       "\u2502                bounds = ((-2.0, -2.0, -2.0), (2.0, 2.0, 2.0))                                                   \u2502\n",
       "\u2502            bounds_pml = ((-2.0, -4.3999999999999995, -2.0), (2.0, 4.399999999999997, 2.0))                      \u2502\n",
       "\u2502                center = (0.0, 0.0, 0.0)                                                                         \u2502\n",
       "\u2502        complex_fields = False                                                                                   \u2502\n",
       "\u2502               courant = 0.99                                                                                    \u2502\n",
       "\u2502       custom_datasets = []                                                                                      \u2502\n",
       "\u2502                    dt = 3.813149739062003e-16                                                                   \u2502\n",
       "\u2502       frequency_range = (110000000000000.0, 190000000000000.0)                                                  \u2502\n",
       "\u2502              geometry = Box(type='Box', center=(0.0, 0.0, 0.0), size=(4.0, 4.0, 4.0))                           \u2502\n",
       "\u2502                  grid = Grid(                                                                                   \u2502\n",
       "\u2502                             boundaries=Coords(                                                                  \u2502\n",
       "\u2502                                 x=TidyNDArray([-2. , -1.8, -1.6, -1.4, -1.2, -1. , -0.8, -0.6, -0.4, -0.2,      \u2502\n",
       "\u2502                                       0. ,  0.2,  0.4,  0.6,  0.8,  1. ,  1.2,  1.4,  1.6,  1.8,                \u2502\n",
       "\u2502                                       2. ]),                                                                    \u2502\n",
       "\u2502                                 y=TidyNDArray([-4.4, -4.2, -4. , -3.8, -3.6, -3.4, -3.2, -3. , -2.8, -2.6,      \u2502\n",
       "\u2502                                      -2.4, -2.2, -2. , -1.8, -1.6, -1.4, -1.2, -1. , -0.8, -0.6,                \u2502\n",
       "\u2502                                      -0.4, -0.2,  0. ,  0.2,  0.4,  0.6,  0.8,  1. ,  1.2,  1.4,                \u2502\n",
       "\u2502                                       1.6,  1.8,  2. ,  2.2,  2.4,  2.6,  2.8,  3. ,  3.2,  3.4,                \u2502\n",
       "\u2502                                       3.6,  3.8,  4. ,  4.2,  4.4]),                                            \u2502\n",
       "\u2502                                 z=TidyNDArray([-2. , -1.8, -1.6, -1.4, -1.2, -1. , -0.8, -0.6, -0.4, -0.2,      \u2502\n",
       "\u2502                                       0. ,  0.2,  0.4,  0.6,  0.8,  1. ,  1.2,  1.4,  1.6,  1.8,                \u2502\n",
       "\u2502                                       2. ]),                                                                    \u2502\n",
       "\u2502                                 type='Coords'                                                                   \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                             type='Grid'                                                                         \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502             grid_spec = GridSpec(                                                                               \u2502\n",
       "\u2502                             grid_x=UniformGrid(type='UniformGrid', dl=0.2),                                     \u2502\n",
       "\u2502                             grid_y=UniformGrid(type='UniformGrid', dl=0.2),                                     \u2502\n",
       "\u2502                             grid_z=UniformGrid(type='UniformGrid', dl=0.2),                                     \u2502\n",
       "\u2502                             wavelength=None,                                                                    \u2502\n",
       "\u2502                             override_structures=(),                                                             \u2502\n",
       "\u2502                             type='GridSpec'                                                                     \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502                medium = Medium(                                                                                 \u2502\n",
       "\u2502                             name=None,                                                                          \u2502\n",
       "\u2502                             frequency_range=None,                                                               \u2502\n",
       "\u2502                             type='Medium',                                                                      \u2502\n",
       "\u2502                             permittivity=1.0,                                                                   \u2502\n",
       "\u2502                             conductivity=0.0                                                                    \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502            medium_map = {                                                                                       \u2502\n",
       "\u2502                             Medium(name=None, frequency_range=None, type='Medium', permittivity=1.0,            \u2502\n",
       "\u2502                         conductivity=0.0): 0,                                                                   \u2502\n",
       "\u2502                             Medium(name=None, frequency_range=None, type='Medium', permittivity=2.0,            \u2502\n",
       "\u2502                         conductivity=0.0): 1                                                                    \u2502\n",
       "\u2502                         }                                                                                       \u2502\n",
       "\u2502               mediums = [                                                                                       \u2502\n",
       "\u2502                             Medium(                                                                             \u2502\n",
       "\u2502                                 name=None,                                                                      \u2502\n",
       "\u2502                                 frequency_range=None,                                                           \u2502\n",
       "\u2502                                 type='Medium',                                                                  \u2502\n",
       "\u2502                                 permittivity=1.0,                                                               \u2502\n",
       "\u2502                                 conductivity=0.0                                                                \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                             Medium(                                                                             \u2502\n",
       "\u2502                                 name=None,                                                                      \u2502\n",
       "\u2502                                 frequency_range=None,                                                           \u2502\n",
       "\u2502                                 type='Medium',                                                                  \u2502\n",
       "\u2502                                 permittivity=2.0,                                                               \u2502\n",
       "\u2502                                 conductivity=0.0                                                                \u2502\n",
       "\u2502                             )                                                                                   \u2502\n",
       "\u2502                         ]                                                                                       \u2502\n",
       "\u2502              monitors = (                                                                                       \u2502\n",
       "\u2502                             FieldMonitor(                                                                       \u2502\n",
       "\u2502                                 type='FieldMonitor',                                                            \u2502\n",
       "\u2502                                 center=(1.0, 0.0, 0.0),                                                         \u2502\n",
       "\u2502                                 size=(inf, inf, 0.0),                                                           \u2502\n",
       "\u2502                                 name='fields_at_150THz',                                                        \u2502\n",
       "\u2502                                 freqs=(150000000000000.0,),                                                     \u2502\n",
       "\u2502                                 apodization=ApodizationSpec(                                                    \u2502\n",
       "\u2502                                     start=None,                                                                 \u2502\n",
       "\u2502                                     end=None,                                                                   \u2502\n",
       "\u2502                                     width=None,                                                                 \u2502\n",
       "\u2502                                     type='ApodizationSpec'                                                      \u2502\n",
       "\u2502                                 ),                                                                              \u2502\n",
       "\u2502                                 fields=('Ex', 'Ey', 'Hz'),                                                      \u2502\n",
       "\u2502                                 interval_space=(1, 1, 1),                                                       \u2502\n",
       "\u2502                                 colocate=False                                                                  \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                             FluxTimeMonitor(                                                                    \u2502\n",
       "\u2502                                 type='FluxTimeMonitor',                                                         \u2502\n",
       "\u2502                                 center=(1.0, 0.0, 0.0),                                                         \u2502\n",
       "\u2502                                 size=(inf, inf, 0.0),                                                           \u2502\n",
       "\u2502                                 name='flux_over_time',                                                          \u2502\n",
       "\u2502                                 start=1e-13,                                                                    \u2502\n",
       "\u2502                                 stop=3e-13,                                                                     \u2502\n",
       "\u2502                                 interval=5,                                                                     \u2502\n",
       "\u2502                                 normal_dir='+',                                                                 \u2502\n",
       "\u2502                                 exclude_surfaces=None                                                           \u2502\n",
       "\u2502                             )                                                                                   \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502       normalize_index = 0                                                                                       \u2502\n",
       "\u2502             num_cells = 17600                                                                                   \u2502\n",
       "\u2502        num_pml_layers = [[0, 0], [12, 12], [0, 0]]                                                              \u2502\n",
       "\u2502        num_time_steps = 2624                                                                                    \u2502\n",
       "\u2502          nyquist_step = 5                                                                                       \u2502\n",
       "\u2502           plot_params = PlotParams(                                                                             \u2502\n",
       "\u2502                             alpha=1.0,                                                                          \u2502\n",
       "\u2502                             edgecolor=None,                                                                     \u2502\n",
       "\u2502                             facecolor=None,                                                                     \u2502\n",
       "\u2502                             fill=True,                                                                          \u2502\n",
       "\u2502                             hatch=None,                                                                         \u2502\n",
       "\u2502                             linewidth=1.0,                                                                      \u2502\n",
       "\u2502                             type='PlotParams'                                                                   \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502       pml_thicknesses = [(0.0, 0.0), (2.3999999999999995, 2.399999999999997), (0.0, 0.0)]                       \u2502\n",
       "\u2502              run_time = 1e-12                                                                                   \u2502\n",
       "\u2502               shutoff = 1e-05                                                                                   \u2502\n",
       "\u2502   simulation_geometry = Box(                                                                                    \u2502\n",
       "\u2502                             type='Box',                                                                         \u2502\n",
       "\u2502                             center=(0.0, -1.3322676295501878e-15, 0.0),                                         \u2502\n",
       "\u2502                             size=(4.0, 8.799999999999997, 4.0)                                                  \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502                  size = (4.0, 4.0, 4.0)                                                                         \u2502\n",
       "\u2502               sources = (                                                                                       \u2502\n",
       "\u2502                             UniformCurrentSource(                                                               \u2502\n",
       "\u2502                                 type='UniformCurrentSource',                                                    \u2502\n",
       "\u2502                                 center=(0.0, 0.0, 0.0),                                                         \u2502\n",
       "\u2502                                 size=(0.0, 0.0, 0.0),                                                           \u2502\n",
       "\u2502                                 source_time=GaussianPulse(                                                      \u2502\n",
       "\u2502                                     amplitude=1.0,                                                              \u2502\n",
       "\u2502                                     phase=0.0,                                                                  \u2502\n",
       "\u2502                                     type='GaussianPulse',                                                       \u2502\n",
       "\u2502                                     freq0=150000000000000.0,                                                    \u2502\n",
       "\u2502                                     fwidth=10000000000000.0,                                                    \u2502\n",
       "\u2502                                     offset=5.0                                                                  \u2502\n",
       "\u2502                                 ),                                                                              \u2502\n",
       "\u2502                                 name=None,                                                                      \u2502\n",
       "\u2502                                 polarization='Ez'                                                               \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502            structures = (                                                                                       \u2502\n",
       "\u2502                             Structure(                                                                          \u2502\n",
       "\u2502                                 geometry=Box(type='Box', center=(0.0, 0.0, 0.0), size=(1.0, 1.0, 1.0)),         \u2502\n",
       "\u2502                                 name=None,                                                                      \u2502\n",
       "\u2502                                 type='Structure',                                                               \u2502\n",
       "\u2502                                 medium=Medium(                                                                  \u2502\n",
       "\u2502                                     name=None,                                                                  \u2502\n",
       "\u2502                                     frequency_range=None,                                                       \u2502\n",
       "\u2502                                     type='Medium',                                                              \u2502\n",
       "\u2502                                     permittivity=2.0,                                                           \u2502\n",
       "\u2502                                     conductivity=0.0                                                            \u2502\n",
       "\u2502                                 )                                                                               \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502              subpixel = True                                                                                    \u2502\n",
       "\u2502              symmetry = (0, 0, 0)                                                                               \u2502\n",
       "\u2502                 tmesh = array([0.00000000e+00, 3.81314974e-16, 7.62629948e-16, ...,                             \u2502\n",
       "\u2502                                9.99426547e-13, 9.99807862e-13, 1.00018918e-12])                                 \u2502\n",
       "\u2502                  type = 'Simulation'                                                                            \u2502\n",
       "\u2502               version = '2.0.0'                                                                                 \u2502\n",
       "\u2502 volumetric_structures = (                                                                                       \u2502\n",
       "\u2502                             Structure(                                                                          \u2502\n",
       "\u2502                                 geometry=Box(type='Box', center=(0.0, 0.0, 0.0), size=(1.0, 1.0, 1.0)),         \u2502\n",
       "\u2502                                 name=None,                                                                      \u2502\n",
       "\u2502                                 type='Structure',                                                               \u2502\n",
       "\u2502                                 medium=Medium(                                                                  \u2502\n",
       "\u2502                                     name=None,                                                                  \u2502\n",
       "\u2502                                     frequency_range=None,                                                       \u2502\n",
       "\u2502                                     type='Medium',                                                              \u2502\n",
       "\u2502                                     permittivity=2.0,                                                           \u2502\n",
       "\u2502                                     conductivity=0.0                                                            \u2502\n",
       "\u2502                                 )                                                                               \u2502\n",
       "\u2502                             ),                                                                                  \u2502\n",
       "\u2502                         )                                                                                       \u2502\n",
       "\u2502           wvl_mat_min = 1.4132352000025548                                                                      \u2502\n",
       "\u2502             zero_dims = []                                                                                      \u2502\n",
       "\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n",
       "
\n" ], "text/plain": [ "\u001b[34m\u256d\u2500\u001b[0m\u001b[34m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u001b[0m\u001b[1;34m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'tidy3d.components.simulation.Simulation'\u001b[0m\u001b[1;34m>\u001b[0m\u001b[34m \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[0m\u001b[34m\u2500\u256e\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[36mContains all information about Tidy3d simulation.\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[1;35mSimulation\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Simulation'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m4.0\u001b[0m, \u001b[1;36m4.0\u001b[0m, \u001b[1;36m4.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mrun_time\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-12\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[33mpermittivity\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33msymmetry\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0\u001b[0m, \u001b[1;36m0\u001b[0m, \u001b[1;36m0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mstructures\u001b[0m=\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1;35mStructure\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mgeometry\u001b[0m=\u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Structure'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33msources\u001b[0m=\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1;35mUniformCurrentSource\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformCurrentSource'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33msource_time\u001b[0m=\u001b[1;35mGaussianPulse\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mamplitude\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mphase\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'GaussianPulse'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mfreq0\u001b[0m=\u001b[1;36m150000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mfwidth\u001b[0m=\u001b[1;36m10000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33moffset\u001b[0m=\u001b[1;36m5\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mpolarization\u001b[0m=\u001b[32m'Ez'\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mboundary_spec\u001b[0m=\u001b[1;35mBoundarySpec\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mx\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mplus\u001b[0m=\u001b[1;35mPeriodic\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mminus\u001b[0m=\u001b[1;35mPeriodic\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33my\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mplus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'PML'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mnum_layers\u001b[0m=\u001b[1;36m12\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'PMLParams'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33malpha_order\u001b[0m=\u001b[1;36m1\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mminus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'PML'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mnum_layers\u001b[0m=\u001b[1;36m12\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'PMLParams'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33malpha_order\u001b[0m=\u001b[1;36m1\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mz\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mplus\u001b[0m=\u001b[1;35mPeriodic\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mminus\u001b[0m=\u001b[1;35mPeriodic\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'BoundarySpec'\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mmonitors\u001b[0m=\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1;35mFieldMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mname\u001b[0m=\u001b[32m'fields_at_150THz'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mfreqs\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m150000000000000.0\u001b[0m,\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mapodization\u001b[0m=\u001b[1;35mApodizationSpec\u001b[0m\u001b[1m(\u001b[0m\u001b[33mstart\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mend\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mwidth\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'ApodizationSpec'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mfields\u001b[0m=\u001b[1m(\u001b[0m\u001b[32m'Ex'\u001b[0m, \u001b[32m'Ey'\u001b[0m, \u001b[32m'Hz'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33minterval_space\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1\u001b[0m, \u001b[1;36m1\u001b[0m, \u001b[1;36m1\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mcolocate\u001b[0m=\u001b[3;91mFalse\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1;35mFluxTimeMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'FluxTimeMonitor'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mname\u001b[0m=\u001b[32m'flux_over_time'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mstart\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mstop\u001b[0m=\u001b[1;36m3e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33minterval\u001b[0m=\u001b[1;36m5\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mnormal_dir\u001b[0m=\u001b[32m'+'\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u2502 \u001b[0m\u001b[33mexclude_surfaces\u001b[0m=\u001b[3;35mNone\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[1m)\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mgrid_spec\u001b[0m=\u001b[1;35mGridSpec\u001b[0m\u001b[1m(\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mgrid_x\u001b[0m=\u001b[1;35mUniformGrid\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformGrid'\u001b[0m, \u001b[33mdl\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.2\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mgrid_y\u001b[0m=\u001b[1;35mUniformGrid\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformGrid'\u001b[0m, \u001b[33mdl\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.2\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mgrid_z\u001b[0m=\u001b[1;35mUniformGrid\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformGrid'\u001b[0m, \u001b[33mdl\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.2\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mwavelength\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33moverride_structures\u001b[0m=\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u2502 \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'GridSpec'\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mshutoff\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-05\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33msubpixel\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mnormalize_index\u001b[0m=\u001b[1;36m0\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mcourant\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.99\u001b[0m, \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[2;32m\u2502 \u001b[0m\u001b[33mversion\u001b[0m=\u001b[32m'2.0.0'\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[32m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[32m\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mbackground_structure\u001b[0m = \u001b[1;35mStructure\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mgeometry\u001b[0m=\u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, inf\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Structure'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mboundary_spec\u001b[0m = \u001b[1;35mBoundarySpec\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mx\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mplus\u001b[0m=\u001b[1;35mPeriodic\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mminus\u001b[0m=\u001b[1;35mPeriodic\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33my\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mplus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PML'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mnum_layers\u001b[0m=\u001b[1;36m12\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PMLParams'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha_order\u001b[0m=\u001b[1;36m1\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mminus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PML'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mnum_layers\u001b[0m=\u001b[1;36m12\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PMLParams'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha_order\u001b[0m=\u001b[1;36m1\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mz\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mplus\u001b[0m=\u001b[1;35mPeriodic\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mminus\u001b[0m=\u001b[1;35mPeriodic\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'BoundarySpec'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mbounding_box\u001b[0m = \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m4.0\u001b[0m, \u001b[1;36m4.0\u001b[0m, \u001b[1;36m4.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mbounds\u001b[0m = \u001b[1m(\u001b[0m\u001b[1m(\u001b[0m\u001b[1;36m-2.0\u001b[0m, \u001b[1;36m-2.0\u001b[0m, \u001b[1;36m-2.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mbounds_pml\u001b[0m = \u001b[1m(\u001b[0m\u001b[1m(\u001b[0m\u001b[1;36m-2.0\u001b[0m, \u001b[1;36m-4.3999999999999995\u001b[0m, \u001b[1;36m-2.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[1m(\u001b[0m\u001b[1;36m2.0\u001b[0m, \u001b[1;36m4.399999999999997\u001b[0m, \u001b[1;36m2.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mcenter\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mcomplex_fields\u001b[0m = \u001b[3;91mFalse\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mcourant\u001b[0m = \u001b[1;36m0.99\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mcustom_datasets\u001b[0m = \u001b[1m[\u001b[0m\u001b[1m]\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mdt\u001b[0m = \u001b[1;36m3.813149739062003e-16\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mfrequency_range\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m110000000000000.0\u001b[0m, \u001b[1;36m190000000000000.0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mgeometry\u001b[0m = \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m4.0\u001b[0m, \u001b[1;36m4.0\u001b[0m, \u001b[1;36m4.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mgrid\u001b[0m = \u001b[1;35mGrid\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mboundaries\u001b[0m=\u001b[1;35mCoords\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mx\u001b[0m=\u001b[1;35mTidyNDArray\u001b[0m\u001b[1m(\u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m-2\u001b[0m. , \u001b[1;36m-1.8\u001b[0m, \u001b[1;36m-1.6\u001b[0m, \u001b[1;36m-1.4\u001b[0m, \u001b[1;36m-1.2\u001b[0m, \u001b[1;36m-1\u001b[0m. , \u001b[1;36m-0.8\u001b[0m, \u001b[1;36m-0.6\u001b[0m, \u001b[1;36m-0.4\u001b[0m, \u001b[1;36m-0.2\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m0\u001b[0m. , \u001b[1;36m0.2\u001b[0m, \u001b[1;36m0.4\u001b[0m, \u001b[1;36m0.6\u001b[0m, \u001b[1;36m0.8\u001b[0m, \u001b[1;36m1\u001b[0m. , \u001b[1;36m1.2\u001b[0m, \u001b[1;36m1.4\u001b[0m, \u001b[1;36m1.6\u001b[0m, \u001b[1;36m1.8\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m2\u001b[0m. \u001b[1m]\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33my\u001b[0m=\u001b[1;35mTidyNDArray\u001b[0m\u001b[1m(\u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m-4.4\u001b[0m, \u001b[1;36m-4.2\u001b[0m, \u001b[1;36m-4\u001b[0m. , \u001b[1;36m-3.8\u001b[0m, \u001b[1;36m-3.6\u001b[0m, \u001b[1;36m-3.4\u001b[0m, \u001b[1;36m-3.2\u001b[0m, \u001b[1;36m-3\u001b[0m. , \u001b[1;36m-2.8\u001b[0m, \u001b[1;36m-2.6\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m-2.4\u001b[0m, \u001b[1;36m-2.2\u001b[0m, \u001b[1;36m-2\u001b[0m. , \u001b[1;36m-1.8\u001b[0m, \u001b[1;36m-1.6\u001b[0m, \u001b[1;36m-1.4\u001b[0m, \u001b[1;36m-1.2\u001b[0m, \u001b[1;36m-1\u001b[0m. , \u001b[1;36m-0.8\u001b[0m, \u001b[1;36m-0.6\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m-0.4\u001b[0m, \u001b[1;36m-0.2\u001b[0m, \u001b[1;36m0\u001b[0m. , \u001b[1;36m0.2\u001b[0m, \u001b[1;36m0.4\u001b[0m, \u001b[1;36m0.6\u001b[0m, \u001b[1;36m0.8\u001b[0m, \u001b[1;36m1\u001b[0m. , \u001b[1;36m1.2\u001b[0m, \u001b[1;36m1.4\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m1.6\u001b[0m, \u001b[1;36m1.8\u001b[0m, \u001b[1;36m2\u001b[0m. , \u001b[1;36m2.2\u001b[0m, \u001b[1;36m2.4\u001b[0m, \u001b[1;36m2.6\u001b[0m, \u001b[1;36m2.8\u001b[0m, \u001b[1;36m3\u001b[0m. , \u001b[1;36m3.2\u001b[0m, \u001b[1;36m3.4\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m3.6\u001b[0m, \u001b[1;36m3.8\u001b[0m, \u001b[1;36m4\u001b[0m. , \u001b[1;36m4.2\u001b[0m, \u001b[1;36m4.4\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mz\u001b[0m=\u001b[1;35mTidyNDArray\u001b[0m\u001b[1m(\u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m-2\u001b[0m. , \u001b[1;36m-1.8\u001b[0m, \u001b[1;36m-1.6\u001b[0m, \u001b[1;36m-1.4\u001b[0m, \u001b[1;36m-1.2\u001b[0m, \u001b[1;36m-1\u001b[0m. , \u001b[1;36m-0.8\u001b[0m, \u001b[1;36m-0.6\u001b[0m, \u001b[1;36m-0.4\u001b[0m, \u001b[1;36m-0.2\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m0\u001b[0m. , \u001b[1;36m0.2\u001b[0m, \u001b[1;36m0.4\u001b[0m, \u001b[1;36m0.6\u001b[0m, \u001b[1;36m0.8\u001b[0m, \u001b[1;36m1\u001b[0m. , \u001b[1;36m1.2\u001b[0m, \u001b[1;36m1.4\u001b[0m, \u001b[1;36m1.6\u001b[0m, \u001b[1;36m1.8\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m2\u001b[0m. \u001b[1m]\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Coords'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Grid'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mgrid_spec\u001b[0m = \u001b[1;35mGridSpec\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mgrid_x\u001b[0m=\u001b[1;35mUniformGrid\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformGrid'\u001b[0m, \u001b[33mdl\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.2\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mgrid_y\u001b[0m=\u001b[1;35mUniformGrid\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformGrid'\u001b[0m, \u001b[33mdl\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.2\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mgrid_z\u001b[0m=\u001b[1;35mUniformGrid\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformGrid'\u001b[0m, \u001b[33mdl\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.2\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mwavelength\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33moverride_structures\u001b[0m=\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'GridSpec'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mmedium\u001b[0m = \u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mmedium_map\u001b[0m = \u001b[1m{\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[33mpermittivity\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m\u001b[1m)\u001b[0m: \u001b[1;36m0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m\u001b[1m)\u001b[0m: \u001b[1;36m1\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m}\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mmediums\u001b[0m = \u001b[1m[\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m]\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mmonitors\u001b[0m = \u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mFieldMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[32m'fields_at_150THz'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfreqs\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m150000000000000.0\u001b[0m,\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mapodization\u001b[0m=\u001b[1;35mApodizationSpec\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mstart\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mend\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mwidth\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'ApodizationSpec'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfields\u001b[0m=\u001b[1m(\u001b[0m\u001b[32m'Ex'\u001b[0m, \u001b[32m'Ey'\u001b[0m, \u001b[32m'Hz'\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33minterval_space\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1\u001b[0m, \u001b[1;36m1\u001b[0m, \u001b[1;36m1\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mcolocate\u001b[0m=\u001b[3;91mFalse\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mFluxTimeMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'FluxTimeMonitor'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[32m'flux_over_time'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mstart\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mstop\u001b[0m=\u001b[1;36m3e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33minterval\u001b[0m=\u001b[1;36m5\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mnormal_dir\u001b[0m=\u001b[32m'+'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mexclude_surfaces\u001b[0m=\u001b[3;35mNone\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mnormalize_index\u001b[0m = \u001b[1;36m0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mnum_cells\u001b[0m = \u001b[1;36m17600\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mnum_pml_layers\u001b[0m = \u001b[1m[\u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m0\u001b[0m, \u001b[1;36m0\u001b[0m\u001b[1m]\u001b[0m, \u001b[1m[\u001b[0m\u001b[1;36m12\u001b[0m, \u001b[1;36m12\u001b[0m\u001b[1m]\u001b[0m, \u001b[1m[\u001b[0m\u001b[1;36m0\u001b[0m, \u001b[1;36m0\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mnum_time_steps\u001b[0m = \u001b[1;36m2624\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mnyquist_step\u001b[0m = \u001b[1;36m5\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mplot_params\u001b[0m = \u001b[1;35mPlotParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33malpha\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33medgecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfacecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfill\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mhatch\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mlinewidth\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mpml_thicknesses\u001b[0m = \u001b[1m[\u001b[0m\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[1m(\u001b[0m\u001b[1;36m2.3999999999999995\u001b[0m, \u001b[1;36m2.399999999999997\u001b[0m\u001b[1m)\u001b[0m, \u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m]\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mrun_time\u001b[0m = \u001b[1;36m1e-12\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mshutoff\u001b[0m = \u001b[1;36m1e-05\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33msimulation_geometry\u001b[0m = \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m-1.3322676295501878e-15\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m4.0\u001b[0m, \u001b[1;36m8.799999999999997\u001b[0m, \u001b[1;36m4.0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33msize\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m4.0\u001b[0m, \u001b[1;36m4.0\u001b[0m, \u001b[1;36m4.0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33msources\u001b[0m = \u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mUniformCurrentSource\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'UniformCurrentSource'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33msource_time\u001b[0m=\u001b[1;35mGaussianPulse\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mamplitude\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mphase\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'GaussianPulse'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfreq0\u001b[0m=\u001b[1;36m150000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfwidth\u001b[0m=\u001b[1;36m10000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33moffset\u001b[0m=\u001b[1;36m5\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mpolarization\u001b[0m=\u001b[32m'Ez'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mstructures\u001b[0m = \u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mStructure\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mgeometry\u001b[0m=\u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Structure'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33msubpixel\u001b[0m = \u001b[3;92mTrue\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33msymmetry\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m0\u001b[0m, \u001b[1;36m0\u001b[0m, \u001b[1;36m0\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mtmesh\u001b[0m = \u001b[1;35marray\u001b[0m\u001b[1m(\u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m0.00000000e+00\u001b[0m, \u001b[1;36m3.81314974e-16\u001b[0m, \u001b[1;36m7.62629948e-16\u001b[0m, \u001b[33m...\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;36m9.99426547e-13\u001b[0m, \u001b[1;36m9.99807862e-13\u001b[0m, \u001b[1;36m1.00018918e-12\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mtype\u001b[0m = \u001b[32m'Simulation'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mversion\u001b[0m = \u001b[32m'2.0.0'\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mvolumetric_structures\u001b[0m = \u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1;35mStructure\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mgeometry\u001b[0m=\u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Structure'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[1m)\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mwvl_mat_min\u001b[0m = \u001b[1;36m1.4132352000025548\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2502\u001b[0m \u001b[3;33mzero_dims\u001b[0m = \u001b[1m[\u001b[0m\u001b[1m]\u001b[0m \u001b[34m\u2502\u001b[0m\n", "\u001b[34m\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# print the log, which is stored as an attribute rather than as its own file\n", "print(sim_data.log)\n", "\n", "# get a copy of the original Simulation, so it also doesn't need to be stored separately\n", "sim_data.simulation.help()\n" ] }, { "cell_type": "markdown", "id": "f33815ce", "metadata": {}, "source": [ "### Monitor Data\n", "\n", "Data for each monitor is stored as its corresponding [td.MonitorData](../_autosummary/tidy3d.components.data.MonitorData.html) instance.\n", "\n", "The monitor data can be found using the `monitor.name` by indexing into the [SimulationData](../_autosummary/tidy3d.SimulationData.html) using square brackets.\n", "\n", "The data are stored as [xarray](http://xarray.pydata.org/en/stable/) objects, which means they work similarly to numpy arrays but provide many additional useful features. For more details refer to the [tutorial on data visualization](../notebooks/VizData.html)." ] }, { "cell_type": "code", "execution_count": 24, "id": "5a1d45b1", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "flux_data = sim_data[\"flux_over_time\"].flux\n", "flux_data.plot()\n", "plt.title(\"flux over time\")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "20f259c5", "metadata": {}, "source": [ "For field data, we can further index by `fields` specified in the monitor, as follows." ] }, { "cell_type": "code", "execution_count": 25, "id": "9bad3d76", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkUAAAHHCAYAAACx7iyPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABloElEQVR4nO3deXhTdfY/8PdNutONQjf2FpBFdhAsOCwDIyg/BwRBEdlFRVAQUUCBsqigoiDIgDqyKCCLAjKOoogUlJ0CCghosVCWlr37liaf3x8M+Rq7Jjlp0ub9ep48D7m599yTkOX0cz/3XE0ppUBERETk5nTOToCIiIjIFbAoIiIiIgKLIiIiIiIALIqIiIiIALAoIiIiIgLAooiIiIgIAIsiIiIiIgAsioiIiIgAsCgiIiIiAsCiiMilzJw5E5qmFft4UlISevfujZCQEOh05fPxvXDhAnx8fLBnz55y2V9Jtm3bBn9/f1y7dq3QY3FxcfDw8EBkZCTGjBmD/Px8J2RIRBUZiyKiCmTatGn45ptv8OSTT2LFihUWj8XFxUHTtGJv69ats2mfs2fPRocOHdCpUyeJp2CXXr16oUGDBpg7d26hx5o0aYIPP/wQf//737Fs2TKsXr3aCRkSUUXm4ewEiKjsjhw5gjZt2uCtt94qdp3nn38e99xzT6HlMTExVu/v2rVrWLVqFVatWmX1to7y9NNPY9KkSZg1axYCAgLMy8PDwzFy5EgMHToUW7ZswbFjx5yXJBFVSCyKiGyQlZWFKlWqOGW/devWLXGdv/3tb3jkkUdE9rd69Wp4eHjgoYceEoknoX///njuueewceNGjBw5stDjHh4eqFatGjIyMpyQHRFVZDx8RlSKO/N8fv31Vzz++OOoWrUq7rvvPvPjq1evRtu2beHr64uQkBA89thjuHDhgkWMH3/8EQMGDECdOnXg7e2N2rVr44UXXkBOTo5VuSilSpxzVBZdunRBy5Yti3ysUaNG6Nmzp/n+li1b0KFDB/j7+5uXnTp1Cr6+vhg6dKjFtj/99BP0ej0mT55sVT6ZmZmoUqUKxo8fX+ixixcvQq/XWxwuCwsLQ4sWLfDll18WG1On00EpZVUeREQsiojKaMCAAcjOzsYbb7yB0aNHAwBef/11DB06FA0bNsS7776LCRMmYMeOHejcuTNSU1PN227cuBHZ2dkYM2YMFi9ejJ49e2Lx4sWFCovSmEymUidYZ2Rk4Pr164Vud4qEIUOG4JdffsGJEycstjt06BB+++03PPHEEwAAg8GAQ4cOoU2bNhbrNWnSBHPmzMGnn36KrVu3Arg9gjV8+HA0btwYs2fPtuo5+fv74+GHH8b69ethNBotHvvss8+glMLgwYMtlrdt2xZ79+4tNqamaTCZTFblQUQERUQlio2NVQDUoEGDLJafO3dO6fV69frrr1ssP378uPLw8LBYnp2dXSju3LlzlaZp6vz584X2VRSDwaB8fHzUkCFDinx8586dCkCxt+TkZKWUUqmpqcrHx0dNnjzZYvvnn39eValSRWVmZiqllEpISFAA1OLFiwvty2g0qvvuu0+Fh4er69evq7FjxyoPDw916NChInMrzbfffqsAqG+++cZieYsWLVSXLl0Krf/GG28oAOrKlStFxmvZsqXq0aOHTbkQkfviSBFRGT3zzDMW9zdt2gSTyYSBAwdajMhERESgYcOG2Llzp3ldX19f87+zsrJw/fp1dOzYEUopHD16tMT95uXlITExEdOmTUNubi569OhR4vozZszA9u3bC91CQkIAAEFBQejTp495FAYAjEYj1q9fj759+5rnSt24cQMAULVq1UL70Ol0WLlyJTIzM/HAAw/gX//6F6ZOnYp27dqVmFtxevTogRo1amDNmjXmZSdOnMAvv/xiHrn6szs5Xb9+vch4Xbp0QVxcHDZs2IDLly9z1IiIyoQTrYnKKCoqyuL+77//DqUUGjZsWOT6np6e5n8nJSVhxowZ2Lp1K27dumWxXlpaWon7/eyzzzBixAgAwNixY0s95Na8efNSC6ehQ4di/fr1+PHHH9G5c2d8//33uHLlCoYMGVJoXVXM3Jz69etj5syZeOmll9CsWTNMnz69xH2WRKfTYfDgwVi6dCmys7Ph5+eHNWvWwMfHBwMGDCg2p+LmV82dOxfHjh3Do48+CgBITExEvXr1bM6PiNwDiyKiMvrzaA9we36Ppmn45ptvoNfrC61/Z3Ky0WjEP/7xD9y8eROTJ09G48aNUaVKFVy6dAnDhw8vdRSjZ8+e2Lx5M9auXYt//etf6N69Ox5++GG7nkvPnj0RHh6O1atXo3Pnzli9ejUiIiIsiqlq1aoBQKEi7s++++47AMDly5dx48YNRERE2JzT0KFD8fbbb2PLli0YNGgQ1q5di//3//4fgoKCCq17J6fq1asXGWvu3Ln48ccfERsbi/bt29uVFxG5DxZFRDaqX78+lFKIiorCXXfdVex6x48fx2+//YZVq1ZZjPJs3769TPuJjIxE37590atXL2zduhWbNm2yuyjS6/V4/PHHsXLlSrz55pvYsmULRo8ebVHc1alTB76+vkhMTCwyxrJly7B9+3a8/vrrmDt3Lp5++ukSzwgrTbNmzdC6dWusWbMGtWrVQlJSEhYvXlzkuomJiahevTpCQ0OLfHzr1q3o0qULZs6caXM+ROR+OKeIyEb9+vWDXq/HrFmzCh1iUkqZ5+TcKTT+vI5SCu+9955V+/Px8UFYWJjFWW32GDJkCG7duoWnn34amZmZhebueHp6ol27djh8+HChbRMTE/HSSy+hf//+eOWVVzB//nxs3boVn3zyid05fffdd1i4cCGqVauGBx54oMj14uPjS2xGmZ6ejtq1a9uVCxG5H44UEdmofv36eO211zB16lScO3cOffv2RUBAABITE7F582Y89dRTmDRpEho3boz69etj0qRJuHTpEgIDA/HFF1+UeFiqOGXpv/Pjjz8iNze30PIWLVqgRYsW5vutW7dGs2bNsHHjRjRp0qTQqfcA0KdPH7z66qtIT09HYGAggNsF3ciRI+Hr64ulS5cCuN1l+osvvsD48ePNk6YBYOXKlRgxYgRWrFiB4cOHl/r8Hn/8cbz88svYvHkzxowZYzEv646rV6/il19+wdixY4uNo5Qqt2vDEVHlwW8NIjtMmTIFX3zxBXQ6HWbNmoVJkyZh69atuP/++/HPf/4TwO0Rl//85z9o1aoV5s6di1mzZqFhw4Y2jaro9foiC54/W7RoEYYMGVLotmnTpkLr3jmcV9QE6zvLjUajuR8RACxevBhxcXFYtmyZxeGrjz/+GCaTydzDCbjdmBG4fQiwLMLDw3H//feXmNOmTZvg7e2NgQMHFhsnJycHHh78m4+IrKOp0v7sJCKX0blzZ/zyyy/473//i4YNGyIsLMyueO+99x5eeOEFnDt3DnXq1ClynVGjRuG3337Djz/+aHX8gQMH4ty5czh48GCZt3n44Ydx/PhxJCQkFPl469at0bVrVyxYsMBiucFgwPXr17F371488sgjmDFjBmbNmmV1zkTkvlgUEVUgmzZtwuDBg82jRfZ8fJVSaNmyJapVq2bRU+mvkpKScNddd2HHjh3o1KmTVfHvnOF2Z/SnNMnJyahbty5effVVxMbGFnp827ZteOSRR/DHH38UKgjj4uLQrVs3ALdHpn766SdER0eXOV8iIhZFRBVMZmYmfv31V2RkZKB79+5Wb5+VlYWtW7di586d+Oijj/Dll1+aD/U5S2JiIvbs2YN///vfOHToEM6ePWv1afS3bt3CsWPHUK1aNTRt2pSHz4jIaiyKiNzMuXPnEBUVheDgYDz77LN4/fXXnZ2SeUJ2nTp18M477+CRRx5xdkpE5IZYFBERERGBZ58RERERAWBRRERERATAzZo3mkwmXL58GQEBAcVeSJKIiEgphYyMDNSoUcOpjUBNJhPOnj2LBg0a8HerHLhVUXT58mW2/iciojK7cOECatWq5bT9r1u3DoMHD8b69etLbFhKMtxqonVaWhqCg4Pxx4mjCAgIcHY6RPbTKukRcGVydgbk5jIyMhDdrDVSU1MRFBTklBxyc3MR6uuPqvBEGgpwLS8LXl5eTsnFXbjVSNGdoceAgAAEBrIookqARRGRQznzkFU33xrwhg49EYZNSEY37wjsUTedlo87qKTfqERERBXXzZs3cQRpuBdVoYeGDqiKeKQhNTXV2alVaiyKiIiIXEy3avUQBi/Ugi8AoDZ8UA1e6Fq1rpMzq9xYFBEREbmQxMREnEQm7kVV8zINGu5FME4iA+fPn3didpUbiyIiIiIX8o/oZmgAP1SD5aTqUHgjCn74R727nZRZ5ceiiIiIyEUcOnQI55GDdggu8vF7EIxEZOPo0aPlm5ibYFFERETkApRS6NP+b2iOAPgXc3J4ADxwNwLwUJuOcKOOOuWGRREREZEL+Oqrr3ALBrRCyX2RWiMI15GPbdu2lVNm7oNFERERkZMVFBRg6D/7oS2C4VXKT7M3dGiDIDzxYB8YjcZyytA9sCgiIiJysr97hkMBaAL/Mq1/NwJQAIXuHuGOTczNsCgiIiJyooyMDBxGKtr/r1FjWeih4R4E4xBSkZWV5eAM3QeLIiIiIifqGlgbQfBE1P8aNZZVffjBH3p086/poMzcD4siIiIiJ7l8+TJ+QTo6oCq0Mo4S3XG7oWNVHEM6rly54qAM3QuLIiIiIifpXrMR6sAXEfC2aftI+KAmfPD3iAbCmbmnohshVHJafha0vEpWD7rYVcU1F8tHiqqsV6WXel6V9P+d7+dy4kL5aPmOn6dz5swZ/I4sDECkXXHaoyq+wGUkJCSgQQMWR/ZwnXcgERGRGzlz5gyC4YEgeNoVpyo8EQhP/Pbbb0KZuS+3HCkiIiJyBRoAvXVTiYqOw+bWIjhSRERE5GZ2796Nhx56CDVq1ICmadiyZYvF40opzJgxA5GRkfD19UWPHj3w+++/lxp3yZIlqFevHnx8fNChQwccPHjQQc/AMSpsUTRv3jxomoYJEyY4OxUiIiIbadBr9t+sHWzKyspCy5YtsWTJkiIff+utt7Bo0SIsW7YMBw4cQJUqVdCzZ0/k5uYWG3P9+vWYOHEiYmNjceTIEbRs2RI9e/bE1atXrczOeSpkUXTo0CF88MEHaNGihbNTISIistmdw2f23qz1wAMP4LXXXsPDDz9c6DGlFBYuXIhp06ahT58+aNGiBT755BNcvny50IjSn7377rsYPXo0RowYgaZNm2LZsmXw8/PD8uXLrU/QSSpcUZSZmYnBgwfjo48+QtWqVZ2dDhERkV2cMVJUksTERKSkpKBHjx7mZUFBQejQoQP27dtX5Db5+fmIj4+32Ean06FHjx7FbuOKKlxRNHbsWPTu3dvihS9OXl4e0tPTLW5ERESuQnKkyGAwFPrNy8vLszqnlJQUAEB4uOV11cLDw82P/dX169dhNBqt2sYVVaizz9atW4cjR47g0KFDZVp/7ty5mDVrVqHl+vQU6E0Z0uk5lTIJ9VExudgVl6Xy0elFwoj9NSaVj67C/V1TJnw/l4LvZ4fTZ1a864lt2LABffv2tVgWGxuLmTNnOiWfish13oGluHDhAsaPH481a9bAx8enTNtMnToVaWlp5tuFCxccnCUREVHZaZrQ4TMNGDhwoMVvXlpaGqZOnWp1ThEREQBQ6NIhV65cMT/2V9WrV4der7dqG1dUYYqi+Ph4XL16FW3atIGHhwc8PDywa9cuLFq0CB4eHjAaC/8F5u3tjcDAQIsbERGRK5E6fObp6VnoN8/b2/rLh0RFRSEiIgI7duwwL0tPT8eBAwcQExNT5DZeXl5o27atxTYmkwk7duwodhtXVGEOn3Xv3h3Hjx+3WDZixAg0btwYkydPhl4vM3xLRERUXm7PKbL/QKa1U60zMzORkJBgvp+YmIhjx44hJCQEderUwYQJE/Daa6+hYcOGiIqKwvTp01GjRg2Lw3Pdu3fHww8/jHHjxgEAJk6ciGHDhqFdu3Zo3749Fi5ciKysLIwYMcLu51deKkxRFBAQgGbNmlksq1KlCqpVq1ZoORERERXv8OHD6Natm/n+xIkTAQDDhg3DypUr8fLLLyMrKwtPPfUUUlNTcd9992Hbtm0W01fOnj2L69evm+8/+uijuHbtGmbMmIGUlBS0atUK27ZtKzT52pVVmKKIiIioMnLGPJauXbtCqeKvDaJpGmbPno3Zs2cXu865c+cKLRs3bpx55KgiqtBFUVxcnLNTICIispnc4TOSUKGLIiIioopO4oKwJMMti6L8xFPIr+JrXxChvhxifUuE4rhcfxhX6zMj1Y/Fw1Mkjtj70NVIvZ8LDCJxKuv70OX6C7nQ88rPyhFIhCoatyyKiIiIXIH2vz5DdscRyIVYFBERETmVyOEzVkUiWBQRERE5CSdau5YK09GaiIiIyJE4UkREROQkt0eKnJ0F3cGiiIiIyIl4+Mx1sCgiIiJyEk3jSJErccuiyHA9BYYs668c7MqMufkycfJl+rqI5WMoEImjjEL9l1yMpq+c0wL5/1UyvafMV7fex0smjpdM3y2pfCQYcvKcnQI5gVsWRURERK5CYqSIg00yWBQRERE5idQp+ZCIQSyKiIiInIkjRa6DRREREZGTiI0UkYjKOUuTiIiIyEocKSIiInISqVPyOdYkg0URERGR02g8fOZC3LIoyk/LQF6efX109J4yfTmMBtfqC5R3K1MkTn5Glkic3FsycQxZMq+zIVeqb5ISiWOqpP18dEL9fDShrniePjJflZ5VZL43fKpWEYnjFSATx7uqv0gcsb5JAt/PBeXUp0jqMh+sq2RwThERERER3HSkiIiIyFXw2meug0URERGRk2gAdDz25TJYFBERETmLJjf3jezHOUVERERE4EgRERGRU+l4+pnLYFFERETkLJoGTaAFBUsiGW5ZFGVcuAZ429cPQ+JNDABKqM9MfrpQX6DUHJE4WVdk8sm+LpNP7q1ckTjpBqNInByp//fK2aYIXkIH9n2FPqeBnnqROD5VfUTi+FX3FYlTJVymT5FPsEw+XoEy+Uh8P2fY2cuurDSpOUWsikRwThERERER3HSkiIiIyFXIzCmyPwSxKCIiInIeDdB0EgdtWBVJ4OEzIiIiJ9GgQae3/2ZtSVSvXj1omlboNnbs2CLXX7lyZaF1fXxk5si5Eo4UERERuZlDhw7BaPy/E0dOnDiBf/zjHxgwYECx2wQGBuLMmTPm+1olbAPAooiIiMhZnHT2WWhoqMX9efPmoX79+ujSpUvxu9A0RERE2JJdhcHDZ0RERE6k6XV23wDAYDAgPT3d4paXl1fq/vPz87F69WqMHDmyxNGfzMxM1K1bF7Vr10afPn1w8uRJsdfAVbjlSNGFn/5AFb19T13kbAEAJqMSiVOQUyASJy+99A9QWaTlyuSTZpBpxJNZIBNHqr+QVHsho5J5/wi9DSF1CSeJq4YDcn/1SfU78s82iMQJuirTByzoj1SRON6B3iJxPHxlfpIkvp+zjDLfYaXS5M4+27BhA/r27WuxODY2FjNnzixx0y1btiA1NRXDhw8vdp1GjRph+fLlaNGiBdLS0jB//nx07NgRJ0+eRK1atezP30W4ZVFERETkCjRo0HQSfwRoGDhwIJYuXWqx1Nu79IL1448/xgMPPIAaNWoUu05MTAxiYmLM9zt27IgmTZrggw8+wJw5c2xP28WwKCIiIqoEPD09ERgYaNU258+fx/fff49NmzZZva/WrVsjISHBqu1cHecUEREROYsG6PQ6u2+2HnFesWIFwsLC0Lt3b6u2MxqNOH78OCIjI23bsYviSBEREZETiZx9ZgOTyYQVK1Zg2LBh8PCwLAeGDh2KmjVrYu7cuQCA2bNn495770WDBg2QmpqKt99+G+fPn8eTTz7pjNQdhkURERGRszjxgrDff/89kpKSMHLkyEKPJSUlQfenTtu3bt3C6NGjkZKSgqpVq6Jt27bYu3cvmjZtak/WLodFERERkRu6//77oYo5gzUuLs7i/oIFC7BgwYJyyMq5WBQRERE5ye3LfNg/vdf6C31QUdyyKDry2034aHpnpyFKql+NlMra9ybIU+Z94yv0xFzt9XG1vkk5QoHyTTJx0gzG0lcqg5v5MnH0Qn2TcDNHJIzU+1BCrpJ5jUvlxMNnVJhbFkVERESuQifSp4gk8JR8IiIiInCkiIiIyHk0mK9dZm8csh+LIiIiIifRNE3k2mecaC2DRREREZETcaK16+CcIiIiIiJwpIiIiMh5pOYUkQi3LIoSsw3wQjn1oCgnUv1q/D1kPpxVhfr5hHrLxAn38RSJ41fdVySOr1AcrypeInEk5jQAgEmqL1BWvkicnOsy/XOyheJcyZXpC3QtT+b765ZQ36TMApNIHKn+VBLyIfOcSqNB6PPHw2ci3LIoIiIicgmaBo19ilwGx+yIiIiIwJEiIiIipxK59pkLXSKlImNRRERE5CxS1z4jESyKiIiInESDxo7WLoRFERERkbNogKaTmN7LqkgCJ1oTERERgSNFRERETiUz0VogEWJRVFl4CfW5kGq6WMdPplliRKS/SJyq0cEicYKiqovE8a8ZKhLHu2qASBydp8xXgclQIBIn71aGSJzMS9dE4qQlXheJ4/dHqkgc3+RMkTjIlgmTb5LpupjjSt0by4smNKeIRLAoIiIiciKZidYcKpLA8pSIiIgIHCkiIiJyGk3s7DOSwKKIiIjIaTRoeoG5nDx8JoJFERERkbNoMnOKWBLJ4JgdEREREThSRERE5EQadBJzijhUJMIti6Jwbw94a/a9CaX6crhefyGZt0S1ukEicao3qiYSp2qTOiJxgqJricTRh8vkow+SeX00bx+ROCovVySOT9oNkTj+tZNE4viGXRSJ4x0ok4+Hr8zn1Pd8mkwcoT47twxGkTgS3895SgMMAsmUQhM6fMaqSIZbFkVEREQuQap5I2siEZxTRERERIQKVBTNnTsX99xzDwICAhAWFoa+ffvizJkzzk6LiIjILppOZ/fNWjNnzoSmaRa3xo0bl7jNxo0b0bhxY/j4+KB58+b4+uuvbX3KLqvCFEW7du3C2LFjsX//fmzfvh0GgwH3338/srKynJ0aERGRzTS9zv6bDcfP7r77biQnJ5tvP/30U7Hr7t27F4MGDcKoUaNw9OhR9O3bF3379sWJEyfseeoup8LMKdq2bZvF/ZUrVyIsLAzx8fHo3Lmzk7IiIiKygxPnFHl4eCAiIqJM67733nvo1asXXnrpJQDAnDlzsH37drz//vtYtmyZ9Tt3URVmpOiv0tJunzUREhLi5EyIiIicz2AwID093eKWl5dX7Pq///47atSogejoaAwePBhJScWfHblv3z706NHDYlnPnj2xb98+sfxdQYUsikwmEyZMmIBOnTqhWbNmxa6Xl5dX6A1CRETkKjQN0Ol1dt+gARs2bEBQUJDFbe7cuUXut0OHDli5ciW2bduGpUuXIjExEX/729+QkZFR5PopKSkIDw+3WBYeHo6UlBTx18SZKszhsz8bO3YsTpw4UeLxT+D25OxZs2YVWt4yyBt+Ovv6+uQYTXZtf4dUfw/fYG+ROP6R/iJxqkZXlYlzV22ROAFRMnE8atWXiRNaUySOySdAJI7SCX0VmApEwngGBIvEkeq/FGTn98UdOqHPu85LJh/PKp4icfyTM0Xi5KQWP6phVRyB7+dskxGQaZdVKpkLwmoYOHAgli5darHU27vo34YHHnjA/O8WLVqgQ4cOqFu3LjZs2IBRo0YJ5FMxVbiiaNy4cfjqq6+we/du1KpVciO9qVOnYuLEieb76enpqF1b5seRiIjIbkJzijQAnp6eCAwMtGn74OBg3HXXXUhISCjy8YiICFy5csVi2ZUrV8o8J6miqDCHz5RSGDduHDZv3owffvgBUVFRpW7j7e2NwMBAixsREZErkTj7zN7mjZmZmTh79iwiIyOLfDwmJgY7duywWLZ9+3bExMTYt2MXU2GKorFjx2L16tVYu3YtAgICkJKSgpSUFOTk5Dg7NSIiogpl0qRJ2LVrF86dO4e9e/fi4Ycfhl6vx6BBgwAAQ4cOxdSpU83rjx8/Htu2bcM777yD06dPY+bMmTh8+DDGjRvnrKfgEBXm8Nmd46Rdu3a1WL5ixQoMHz68/BMiIiKyk6ZpYnOKrHHx4kUMGjQIN27cQGhoKO677z7s378foaGhAICkpCSLC9V27NgRa9euxbRp0/DKK6+gYcOG2LJlS4knO1VEFaYoUkrmAqxERESuRKcXmDhv5eGzdevWlfh4XFxcoWUDBgzAgAEDrNtRBVNhiiIiIqJKR6p5I68IK6LCzCkiIiIiciS3HCmq2S4S/p72PXVjvlEkF72L9RvxrS7T98YvoppInCo1Q0Xi6IJk8tF5yfS9kaIZZfoCQcn03YJJKI4Qqf8vqfdPlZq5InFMQn3SPKvIvD4BkUU3/LOWIcsgEkfi+znTUAB8/5tANqUTOSWfA0Ui3LIoIiIicgmaVPNGksCiiIiIyEk0SF0QlkNFElieEhEREYEjRURERM6jycwpIhksioiIiJxIZE4Rj56JYFFERETkLJoGTSdxFjKrIgkcsyMiIiKCm44UhberjwAfL7tiKKE+IVLHkvV29l0yx7HzdbnDs4qvSBypPjMqX6Y/jPHWVZE4pmyZvi6QOpVX5C9VACaZ/l1S/Y5UnswFo6XeP1Lv5ypCfcC8AvxE4gTUzheJYzTI9N2S+H7OyM0Hvt8tkE1pNKHPH0eKJLhlUUREROQyOKfIZbAoIiIichZNgyZwQVjWRDI4p4iIiIgIHCkiIiJyLok5RexoLYJFERERkbNoUhOtSQKLIiIiIifRIHVBWI4USWBRRERE5DRCI0WsiUS4ZVEU1KQhAv1k+oW4DKH+MMroYn1mCmT6nxRcyxSJY8wVyic3TySOSaivi6vRCfXd8vDxFokj1b9LKo6Hv79MnMBAkTgSZ08BcKnDSPpsmd5UVLG4ZVFERETkEjSweaMLYVFERETkNJrQnCKSwKKIiIjIWaRGinhKvgiWp0REREQo40hRenq61YEDhSbwERERVV7sU+RKylQUBQcHQ7NiaE7TNPz222+Ijo62OTEiIqJKT5M6e4+HzySUeU7R559/jpCQkFLXU0rhwQcftCspIiIi96ABEhOtWROJKFNRVLduXXTu3BnVqlUrU9Do6Gh4enralZgjedasD0//KvYFkTpbQKifjyk3SySOyrL+UGlRjGk3ROLkp8r0F8pKkckn89I1mTiXM0Ti5KXL9E0yGmT6U+k9ZQ4DeAfK9PPxrxEgE6dmqEicKhFl+w4tjXdYdZE4+iCZfLQqMtMldD52fi+bA9n//eyZKfOdShVLmYqixMREq4KeOHHCpmSIiIjcDvsUuQyekk9EROQsmgaNl/lwGTYVRYcOHcLOnTtx9epVmP5y+Ofdd98VSYyIiMgtlPMFYefOnYtNmzbh9OnT8PX1RceOHfHmm2+iUaNGxW6zcuVKjBgxwmKZt7c3cnMr1+VQrC6K3njjDUybNg2NGjVCeHi4xVlp1pyhRkREROVv165dGDt2LO655x4UFBTglVdewf33349ff/0VVaoUP68rMDAQZ86cMd+vjL/5VhdF7733HpYvX47hw4c7IB0iIiJ3InT4zArbtm2zuL9y5UqEhYUhPj4enTt3LnY7TdMQERHh6PScyuoxO51Oh06dOjkiFyIiIvdy5zIf9t7sGLVJS0sDgFLb7mRmZqJu3bqoXbs2+vTpg5MnT9q8T1dldVH0wgsvYMmSJY7IhYiIyM38r0+RvTcABoMB6enpFre8vLwS924ymTBhwgR06tQJzZo1K3a9Ro0aYfny5fjyyy+xevVqmEwmdOzYERcvXhR9NZzN6sNnkyZNQu/evVG/fn00bdq0UD+iTZs2iSXnKFpQKLQAf/uCSA13moT6w+TJ9NSQyQaAUJ8iQ1aOSByp/kJXj18ViXPxj1SROJdyCkTi5Bhl+mX56mX6d9X0lTkxtla0zPtHileAn0gcb5Eocv2F9FXDROLAW6pPkf3fz5pepkdaedqwYQP69u1rsSw2NhYzZ84sdpuxY8fixIkT+Omnn0qMHRMTg5iYGPP9jh07okmTJvjggw8wZ84ce9J2KVZ/8zz//PPYuXMnunXrhmrVqlXKiVZERETlQRO6zIcGYODAgVi6dKnFcm/v4kvocePG4auvvsLu3btRq1Ytq/bn6emJ1q1bIyEhwZZ0XZbVRdGqVavwxRdfoHfv3o7Ih4iIyI0IXRBW0+Dp6Vmmi7ErpfDcc89h8+bNiIuLQ1RUlNW7MxqNOH78eKW7rJfVRVFISAjq16/viFyIiIjciyZUFFlh7NixWLt2Lb788ksEBAQgJSUFABAUFARfX18AwNChQ1GzZk3MnTsXADB79mzce++9aNCgAVJTU/H222/j/PnzePLJJ8s1d0ezegLAzJkzERsbi+zsbEfkQ0RE5FY0nc7umzVnny1duhRpaWno2rUrIiMjzbf169eb10lKSkJycrL5/q1btzB69Gg0adIEDz74INLT07F37140bdpU9LVwNqtHihYtWoSzZ88iPDwc9erVKzTR+siRI2LJERERkSylVKnrxMXFWdxfsGABFixY4KCMbPPjjz/igw8+wNmzZ/H555+jZs2a+PTTTxEVFYX77rvPpphWF0V/ndlOREREdijnw2eVwRdffIEhQ4Zg8ODBOHr0qLn1QFpaGt544w18/fXXNsW1uiiKjY21aUdERET0Vxqgle+1zyqD1157DcuWLcPQoUOxbt068/JOnTrhtddeszmuTDOQCkb5BED52NenSOlkXjrNJNNnRhP5UAE6H5l+R5q3r0wcob43pnyZDkzZ12X63hxJlbmIYmaBTH8hV3MlT+ZzESL0/yX1/pF6P0t9vnQ+Qn2BfAJEwiihPkUS388mQzkVGRqEiiL3cubMmSIvSRIUFITU1FSb49p0mQ+9Xl/sjYiIiMiRIiIiiuyR9NNPPyE6OtrmuFaX05s3b7a4bzAYcPToUaxatQqzZs2yOREiIiL3o0FxpMhqo0ePxvjx47F8+XJomobLly9j3759mDRpEqZPn25zXKuLoj59+hRa9sgjj+Duu+/G+vXrMWrUKJuTISIicjsSRZGbXV1iypQpMJlM6N69O7Kzs9G5c2d4e3tj0qRJeO6552yOKzan6N5778VTTz0lFY6IiMg9uFlBI0HTNLz66qt46aWXkJCQgMzMTDRt2hT+/vbNFxYpinJycrBo0SLUrFlTIhwRERFRqby8vEQbSFpdFFWtWtXiIrBKKWRkZMDPzw+rV68WS4yIiKjS0zRAxzlF1urWrVuJF6T/4YcfbIprdVG0cOFCi/s6nQ6hoaHo0KEDqlatalMSRERE7kgBIhOtlZv1KWrVqpXFfYPBgGPHjuHEiRMYNmyYzXGtLors2ZmrMHn6wORpZ58Pvcx0LGWU6ceiUzL9anQBwSJx9EHVROL4ht0QieNfs7pInKC66SJx7s3MF4mTY5T5f883ld72vyy8dDJfzL5C/XyC6pZ+xfCykHr/+IbJ/OEo9fmS+rybvGT6Jtn9vXyHwPez8pT5bi4Tnn1mteIuOTJz5kxkZmbaHLdM/xO//PILTKayf/mePHkSBQXl+IYiIiIit/fEE09g+fLlNm9fpqKodevWuHGj7H+xx8TEICkpyeakiIiI3MP/LvNh983Zz8M17Nu3Dz4+PjZvX6YxRqUUpk+fDj8/vzIFzc+XOTRARERU6fHaZ1br16+fxX2lFJKTk3H48GHHN2/s3Lkzzpw5U+agMTEx8PUVOjZMRERUWWkyE63dTVBQkMV9nU6HRo0aYfbs2bj//vttjlumoiguLs7mHRARERFJWrFihUPiinW0JiIiImtpPPvMhbAoIiIiciaRy3xU/jlFf20eXZKbN2/atA+3LIqUpy+UV9kmjRdLqrLXy/SZkYkixyNSJo7mZftZBH8WKtTXJfiu2iJx7srKEYljMsi0vlBC/Y40of5COk+ZrybPKjJzGz1Dw0XieITKXApJXy1CJI7JT6Zvksmrikgcu7+X75BohuhRjicMiVwQ1v4Qru6vzaMdwS2LIiIiItegcaJ1GZVH82gWRURERFRh5ebmFmoFFBhoWzd7m4qi33//HTt37sTVq1cLdbqeMWOGTYkQERG5HQ1CF4R1g+Nnf5KVlYXJkydjw4YNRTaXNhqNNsW1uij66KOPMGbMGFSvXh0REREWk540TWNRREREVGY8+8wWL7/8Mnbu3ImlS5diyJAhWLJkCS5duoQPPvgA8+bNszmu1UXRa6+9htdffx2TJ0+2eadERET0PyyKrPaf//wHn3zyCbp27YoRI0bgb3/7Gxo0aIC6detizZo1GDx4sE1xrf6fuHXrFgYMGGDTzoiIiIjsdfPmTURHRwO4PX/ozin49913H3bv3m1zXKuLogEDBuC7776zeYdERET0JyIXhHWvOUXR0dFITEwEADRu3BgbNmwAcHsEKTg42Oa4Vh8+a9CgAaZPn479+/ejefPm8PT0tHj8+eeftzmZ8qI8vKE8vJ2dhiydXiSMyVOmL5DJJ0AkjhYg0x/Gs3YTkTheRqHeJTZOAixEuVqHKiFifcBkPhdK7+VScQo8hb6/xJ6XZ+krlSWOznVOiJZ6TqXjKfm2GDFiBH7++Wd06dIFU6ZMwUMPPYT3338fBoMB7777rs1xrX4Hfvjhh/D398euXbuwa9cui8c0TasQRREREZFL0MA5RTZ44YUXzP/u0aMHTp8+jfj4eDRo0AAtWrSwOa7VRdGd4SoiIiIiZ7hw4QJq1/6/KwzUrVsXdevWtTuuXeWpUgpKKbuTICIicluaZv/NzfoU1atXD126dMFHH32EW7duicW1qSj65JNP0Lx5c/j6+sLX1xctWrTAp59+KpZUSZYsWYJ69erBx8cHHTp0wMGDB8tlv0RERPI0mYnWNrD293Tjxo1o3LgxfHx80Lx5c3z99dc27VfC4cOH0b59e8yePRuRkZHo27cvPv/8c+Tl5dkV1+pX8t1338WYMWPw4IMPYsOGDdiwYQN69eqFZ555BgsWLLArmdKsX78eEydORGxsLI4cOYKWLVuiZ8+euHr1qkP3S0RE5ChK09l9s5a1v6d79+7FoEGDMGrUKBw9ehR9+/ZF3759ceLECXufvk1at26Nt99+G0lJSfjmm28QGhqKp556CuHh4Rg5cqTNcTVl5fGvqKgozJo1C0OHDrVYvmrVKsycOdOhc446dOiAe+65B++//z4AwGQyoXbt2njuuecwZcqUUrdPT09HUFAQriRftvm6KK5KM8lcLV0zGkTiQOgsLc1gX9VvjiOVD88+Kx88+6zkODz7zOHS09MRHlkDaWlpDvu92Lp1K2ZMn479+/baHavdPe3x1ttv48EHHyzT+tb+nj766KPIysrCV199ZV527733olWrVli2bJnd+Us4cuQIRo0ahV9++cXmy3xY/c2TnJyMjh07FlresWNHJCcn25REWeTn5yM+Ph49evQwL9PpdOjRowf27dtX5DZ5eXlIT0+3uBEREbkUoT5FBoOh0G9eUYeTbPk93bdvn8X6ANCzZ89i1y8vFy9exFtvvYVWrVqhffv28Pf3x5IlS2yOZ1Ofog0bNuCVV16xWL5+/Xo0bNjQ5kRKc/36dRiNRoSHW/atCQ8Px+nTp4vcZu7cuZg1a1ah5QXQocC+OebQCTXKMklNVNfJ/MVn1ITi6PxE4hToZV6ffKNMHINJKB+hOAVCA06uxkNmgAdeOpnPqadQHC+9TBwPoXz0UnFcbI6vxPezSRN6E5ZCaRqU0O/Jhg0b0LdvX4tlsbGxmDlzpsUyW35PU1JSilw/JSXF7rxt8cEHH2Dt2rXYs2cPGjdujMGDB+PLL7+0+ww0q4uiWbNm4dFHH8Xu3bvRqVMnAMCePXuwY8cOc0dJVzF16lRMnDjRfD89Pd3iFD4iIiKnUoDE38YKwMCBA7F06VKL5d7elaxR8f+89tprGDRoEBYtWoSWLVuKxbW6KOrfvz8OHDiABQsWYMuWLQCAJk2a4ODBg2jdurVYYn9VvXp16PV6XLlyxWL5lStXEBERUeQ23t7elfYNQURE9Geenp5lmv9ky+9pRESEVes7WlJSEjQHXNrEpmNIbdu2xerVqxEfH4/4+HisXr3aoQURAHh5eaFt27bYsWOHeZnJZMKOHTsQExPj0H0TERE5hoJJ2X+DFaNNtvyexsTEWKwPANu3b3fa768jCiKgjCNF6enp5uqztMnKjjyra+LEiRg2bBjatWuH9u3bY+HChcjKysKIESMctk8iIiJHckYL5NJ+T4cOHYqaNWti7ty5AIDx48ejS5cueOedd9C7d2+sW7cOhw8fxocffuiE7B2nTEVR1apVkZycjLCwMAQHBxdZoSmloGmazafBlcWjjz6Ka9euYcaMGUhJSUGrVq2wbdu2QpO/iIiIKgIFQOi8C6uU9nualJQEne7/DiZ17NgRa9euxbRp0/DKK6+gYcOG2LJlC5o1a1b+yTtQmYqiH374ASEhIQCAnTt3OjSh0owbNw7jxo1zag5ERERSJC6XpWwYbyrp9zQuLq7QsgEDBmDAgAFW76ciKVNR1KVLF/O/o6KiULt27UKjRUopXLhwQTY7IiIionJi9dlnUVFR5kNpf3bz5k1ERUU59PCZlHyjsrtvjU6TGe+UGjYtEAqUK9TPJ9sg02n5Zo5Mh+2L6TKdsa9mycS5mSnTGTsnX+bzllcg8//l7SHTidrXS6ZHTIi/TN+tsCoyZ7HWCpSJE+Ir00Haz1Pm/8vHxfovSXw/5xvLr1u8Mw6fVUStW7cu8wTrI0eO2LQPq4uiO3OH/iozMxM+Pj42JUFEROSuWBOVzZ8bU+bm5uJf//oXmjZtaj4Dbv/+/Th58iSeffZZm/dR5qLoThNETdMwffp0+Pn9X8dio9GIAwcOoFWrVjYnQkRE5G6U4khRWcXGxpr//eSTT+L555/HnDlzCq1jz1SeMhdFR48eBXB7pOj48ePw8vq/YWkvLy+0bNkSkyZNsjkRIiIiorLYuHEjDh8+XGj5E088gXbt2mH58uU2xS1zUXTnrLMRI0bgvffeq3RXmSciInIGmbPP3Iuvry/27NlT6Jqre/bssWsqj9VzilasWGHzzoiIiMhS+U3prjwmTJiAMWPG4MiRI2jfvj0A4MCBA1i+fDmmT59uc9wyFUX9+vXDypUrERgYiH79+pW47qZNm2xOhoiIyJ0oyFwQ1t2GiqZMmYLo6Gi89957WL16NYDb12FdsWIFBg4caHPcMhVFQUFB5jPOgoKCbN4ZERERkYSBAwfaVQAVpUxF0Z8PmVWGw2cGk0K+ndP99UIXozOK/IkA5BXIxMnMlxnIvSLUz+ePm9kiceKTUkXiHD19TSROyrkbInEKcjJF4pgKZPom6Txk+gJ5+PqLxImoV00kTuvGoSJx2tYJFokTHeJX+kplEC7Uf0l5yfQ78rZ6QkfRJL6fhVp3lYnE2WduNlDkMFa/BXNycqCUMp+Sf/78eWzevBlNmzbF/fffL54gERFRZSYx0dodVK1atczNG2/evGnTPqwuivr06YN+/frhmWeeQWpqKtq3bw8vLy9cv34d7777LsaMGWNTIkRERO5GgROty2rhwoUO34fVRdGRI0ewYMECAMDnn3+OiIgIHD16FF988QVmzJjBooiIiIjEDRs2zOH7sPpAcHZ2NgICAgAA3333Hfr16wedTod7770X58+fF0+QiIioMlPK/ps7Onv2LKZNm4ZBgwbh6tWrAIBvvvkGJ0+etDmm1UVRgwYNsGXLFly4cAHffvuteR7R1atX2dCRiIjIGgowKWX3zd3qol27dqF58+Y4cOAANm3ahMzM2yed/PzzzxaXA7GW1UXRjBkzMGnSJNSrVw/t27c3X4jtu+++Q+vWrW1OhIiIyB0pgZu7mTJlCl577TVs377d4rJjf//737F//36b41o9p+iRRx7Bfffdh+TkZLRs2dK8vHv37nj44YdtToSIiIioLI4fP461a9cWWh4WFobr16/bHNemrhARERGIiIjAxYsXAQC1atUyt9muCPKMCl529vXRazK1uVGoxM81ypy/kJFfIBLnerZBJM7ltFyROOevZ4nEybiZIxLn2mnb/5L5M0NWmkgcV+NZRaZJbJXAv4vEkXr/RAbZfk2mPwv08RSJ4+epF4njoRdqMGT9wYsiSXw/55VToyIFmT5F7iY4OBjJycmIioqyWH706FHUrFnT5rhWvwNNJhNmz56NoKAg1K1bF3Xr1kVwcDDmzJkDk4knFhIREVlDZKK1mxVWjz32GCZPnoyUlBRomgaTyYQ9e/Zg0qRJGDp0qM1xrS7vX331VXz88ceYN28eOnXqBAD46aefMHPmTOTm5uL111+3ORkiIiL3omASqGjcrCbCG2+8gbFjx6J27dowGo1o2rQpjEYjHn/8cUybNs3muFYXRatWrcK///1v/POf/zQva9GiBWrWrIlnn32WRREREZEV3PWUent4eXnho48+wvTp03HixAlkZmaidevWaNiwoV1xrS6Kbt68icaNGxda3rhxY5vbahMRERFZq06dOqhTp45YPKuLopYtW+L999/HokWLLJa///77FmejERERUck40brsJk6ciDlz5qBKlSqYOHFiieu+++67Nu3D6qLorbfeQu/evfH999+bexTt27cPFy5cwNdff21TEkRERG7JjTtSW+vo0aMwGG6f2XzkyJFiLw5b1ovGFsXqoqhLly747bffsGTJEpw+fRoA0K9fPzz77LOoUaOGzYkQERG5I060Lpv33nvPfOWMuLg4h+zDpuYSNWrUqNATqrMNJugM9rUP0NleiFqQGjbNF+pTlJlvFIkj1ePDKPQCeXnI9D/xqSLTH6ZagzYicbKuJonEMebL9F/Se/mKxKkSJjNHQOr/S+r9I/V+lvp8SX3efcReH5EwIt/PWeXUp4jKrnXr1khOTkZYWBiio6Nx6NAhVKtWTXQfNhVFt27dwscff4xTp04BAJo2bYoRI0YgJCRENDkiIqLKTIGHz8oqODgYiYmJCAsLw7lz5xzSG9Hqomj37t146KGHEBQUhHbt2gEAFi1ahNmz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OKeIiIiICBwpIiIich4FKIkpYhxsEsGiiIiIyIlEJlqTCBZFRERETqKE+hQpDhWJYFFERETkLFIdrVkTiXDLoiisyT3QefnZFUOn00RykTrroMAg04+lIEemM0de5k2ROIasNJE4eZm3ROIY83JE4kj1q6GS6YT65+i9Zfr5ePkFysQJCBGJ4+0vE8fD118mjqdU3y37v5+N+dnI3COQDFUoblkUERERuQqZa5+RBBZFRERETqIAmDjR2mWwKCIiInIidrR2HWzeSERERAQWRURERM6jFJTJ/pujhori4uKgaVqRt0OHDhW7XdeuXQut/8wzzzgmSUE8fEZEROREMmchO6Yq6tixI5KTky2WTZ8+HTt27EC7du1K3Hb06NGYPXu2+b6fn31nfZcHFkVEREROouDaHa29vLwQERFhvm8wGPDll1/iueeeg6aV3PrAz8/PYtuKwC2LouimYfD0rWJXDC8PmSOP+QUSF70BsnMMInGy0mX6qGSmyvQ/ybol06co+8YlkTj5GTL9jvKF+i9V1n5HUv2FvKoEycQJqCoSx69aTZE4VarKPC//YB+ROFUCvUXi+Pl6isSR+H425GThrEAu5clgMCA9Pd1imbe3N7y9Zf5/AGDr1q24ceMGRowYUeq6a9aswerVqxEREYGHHnoI06dPd/nRIs4pIiIicpb/XRDW3hsUsGHDBgQFBVnc5s6dK5ruxx9/jJ49e6JWrVolrvf4449j9erV2LlzJ6ZOnYpPP/0UTzzxhGgujuCWI0VERESuQubaZ8DAgQOxdOlSi+XFjRJNmTIFb775ZokxT506hcaNG5vvX7x4Ed9++y02bNhQaj5PPfWU+d/NmzdHZGQkunfvjrNnz6J+/fqlbu8sLIqIiIicReraZwA8PT0RGFi2KRAvvvgihg8fXuI60dHRFvdXrFiBatWq4Z///KfVuXXo0AEAkJCQwKKIiIiIXEdoaChCQ0PLvL5SCitWrMDQoUPh6Wn93K9jx44BACIjI63etjxxThEREZHTuHafojt++OEHJCYm4sknnyz02KVLl9C4cWMcPHgQAHD27FnMmTMH8fHxOHfuHLZu3YqhQ4eic+fOaNGihWMTtRNHioiIiJykolz77OOPP0bHjh0t5hjdYTAYcObMGWRnZwO4fRr/999/j4ULFyIrKwu1a9dG//79MW3atPJO22os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j/79++PKlSvllDXw+uuvo2PHjvDz80NwcHCZthk+fDg0TbO49erVy7GJ/oUteSulMGPGDERGRsLX1xc9evTA77//7thE/+TmzZsYPHgwAgMDERwcjFGjRiEzM7PEbbp27VrotX7mmWccluOSJUtQr149+Pj4oEOHDjh48GCJ62/cuBGNGzeGj48Pmjdvjq+//tphuRXHmpxXrlxZ6PX08fEpx2yB3bt346GHHkKNGjWgaRq2bNlS6jZxcXFo06YNvL290aBBA6xcudLhef6ZtTnHxcUVep01TUNKSkq55Dt37lzcc889CAgIQFhYGPr27YszZ86Uup0rvJ/J+VgUCTh9+jRMJhM++OADnDx5EgsWLMCyZcvwyiuvlLjdCy+8gP/85z/YuHEjdu3ahcuXL6Nfv37llDWQn5+PAQMGYMyYMVZt16tXLyQnJ5tvn332mYMyLJoteb/11ltYtGgRli1bhgMHDqBKlSro2bMncnNzHZjp/xk8eDBOnjyJ7du346uvvsLu3bvx1FNPlbrd6NGjLV7rt956yyH5rV+/HhMnTkRsbCyOHDmCli1bomfPnrh69WqR6+/duxeDBg3CqFGjcPToUfTt2xd9+/bFiRMnHJKfRM7A7Q7Gf349z58/X275AkBWVhZatmyJJUuWlGn9xMRE9O7dG926dcOxY8cwYcIEPPnkk/j2228dnOn/sTbnO86cOWPxWoeFhTkoQ0u7du3C2LFjsX//fmzfvh0GgwH3338/srKyit3GFd7P5CIUOcRbb72loqKiin08NTVVeXp6qo0bN5qXnTp1SgFQ+/btK48UzVasWKGCgoLKtO6wYcNUnz59HJpPWZU1b5PJpCIiItTbb79tXpaamqq8vb3VZ5995sAMb/v1118VAHXo0CHzsm+++UZpmqYuXbpU7HZdunRR48ePd3h+SinVvn17NXbsWPN9o9GoatSooebOnVvk+gMHDlS9e/e2WNahQwf19NNPOzTPP7M2Z2ve5+UBgNq8eXOJ67z88svq7rvvtlj26KOPqp49ezows+KVJeedO3cqAOrWrVvlklNprl69qgCoXbt2FbuOK7yfyTVwpMhB0tLSEBISUuzj8fHxMBgM6NGjh3lZ48aNUadOHezbt688UrRZXFwcwsLC0KhRI4wZMwY3btxwdkolSkxMREpKisVrHRQUhA4dOpTLa71v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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Ey = sim_data[\"fields_at_150THz\"].Ey\n", "\n", "Ey.real.plot(x=\"x\", y=\"y\", robust=True)\n", "plt.title(\"real{Ey(x, y)}\")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "54c1847c", "metadata": {}, "source": [ "Finally, [SimulationData](../_autosummary/tidy3d.SimulationData.html) provides a method for potting field data with structure overlay, similar to `sim.viz_fields2D()`." ] }, { "cell_type": "code", "execution_count": 26, "id": "72490bd2", "metadata": {}, "outputs": [ { "data": { "image/png": "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9Gj861//wp49e6ocF5J1oQcPHgyLxYJXXnnFJe2bb76J3NxcjBw5EgCQl5dXZXRcly5dYDKZnF9zL126VCX/K7W+6r4KX6HlvN/85jfIyMjA3//+9yppi4uLnT1tRo8eDZPJhHnz5lWpvV79+YKDg5GTk1Njma7o2bMnoqKisHTpUpfP8MUXX+DIkSPO6+OuKzX4q8tYVlaG119/vUra4OBgzc0r58+fx29+8xvccsstzh4u1alNm/ioUaPg7+/vUkYhBJYuXYoWLVqgb9++LuU4evQoysvLnfvuvvtuZGVl4eOPP3buu3jxIlavXo3bb7/d2QZ+ww03oGPHjli2bBnsdrsz7ZIlS6AoCu6++25N14Iah0bZnPLcc8/hq6++Qv/+/Z3d786fP4/Vq1fj66+/dukCd63IyEikpqZi7ty5GDZsGO644w4cO3YMr7/+Onr16oUHHngAALBp0yZMnToVY8eORfv27VFRUYF3330XZrMZY8aMAQDMmzcP27Ztw8iRI9GqVStkZ2fj9ddfR1xcnGpXMy3n/e53v8OHH36IyZMnY/Pmzbj55ptht9tx9OhRfPjhh/jyyy/Rs2dPXHfddXjyySfxzDPPoF+/frjrrrtgtVqxe/duNG/eHGlpaQCAHj16YMmSJfjrX/+K6667DlFRUc6HpFfz9/fHCy+8gIkTJ6J///649957nV0MW7dujRkzZtT2x+aib9++aNKkCcaPH48//OEPUBQF7777brV/hHv06IFVq1YhJSUFvXr1QkhICG6//fZq8/3DH/6ACxcu4M9//jM++OADl2OJiYlITEwEULs28bi4OEyfPh3z589HeXk5evXqhTVr1uDf//43VqxY4dK0lJqairfffhsnT55E69atAVQG8ZtuugkTJ07E4cOH0axZM7z++uuw2+2YO3euy3vNnz8fd9xxB4YMGYLf/va3OHjwIF577TU89NBDVbo4UiPnya8Bdemnn34S48aNE5GRkcJqtYq2bduKKVOmVBnsU103RCEqvxp37NhR+Pv7i+joaPHII4+4DPb573//Kx588EHRrl07ERAQICIiIsTAgQPFhg0bnGk2btwoRo0aJZo3by4sFoto3ry5uPfee6sMob6W1vPKysrECy+8IG644QZhtVpFkyZNRI8ePcTcuXNFbm6uS9q33npLdOvWzZmuf//+Lk06mZmZYuTIkSI0NFTTYJ9Vq1Y584uIiFAd7HMtLc0pQlQ2T910000iMDBQNG/eXPz5z38WX375ZZXyFBQUiPvuu0+Eh4dLB/tUNzjoyubuYB8hKpvznnvuOdGqVSthsVjEDTfcIN57770q6a50vzx58qTL/kuXLolJkyaJpk2biqCgING/f/8a79FPPvlEdO3aVVitVhEXFyeeeuopUVZW5vZnIO+iCCFpXyAiogar0bWJExH5EgZxIiIvxiBOROTFGMSJiLwYgzgRkRdjECci8mKNcrBPTRwOB86dO4fQ0NBazeBH1FAIIZCfn4/mzZurTqZGjZ9PBfFz5841mImhiIxw5swZxMXFeboYLrZu3YoBg4Zg1/Zt6NOnj6eL0+j51GCf3NxchIeH47sjPyA0NNTTxSGqtfz8fCR2au9cRaqhcDgc8AuJhrCXQvEPgj3/PL/11jGfqolfuZlCQ0MRGhbm4dJ4r/r6lfSZ2oUbGlqAXLVqFURFEfza34GKY2vwz3/+E6NGjfJ0sRo1NqYRkSFKS0tx34SHYY7tDsU/EKaYrhh9z/gqs32SsRjEicgQQW37ASYLlCbtAACmph0ACFjb3OrZgjVyDOJE5LbLly/DkfUfmJv3hKJUhhVFMcEc2xOOzP3Iz8/3cAkbLwZxInJbsw79oAQ1gymshct+xdYSijUM4df381DJGj8GcSJyy8mTJ+G4eBTm5r2qHFMUBabmveC4cAjnzp3zQOkaPwZxInJLux6DoYS3gRIYUe1xU3AUlLA4xHUZWM8l8w0M4kRUa3v27IHIPQ1zbHfVdObYHhCXT+DQoUP1VDLfwSBORLUihEDvgbfD1CwBiiVYNa1iDYOpaXt06TusnkrnOxjEiahWPvvsM4jiyzBFd9GU3hTTFaIgG5s2barjkvkWBnEi0q2iogK33/0ATDFdoZgtms5R/AJgiu6CQbeNhcPhqOMS+g6fGnZ/RXG5A37lxt1ERuRUXzPY1McobS01g/r6Fa6P62rENdVbmyo28P6tjYA2/QHh+GVAj3amyAQ4Lh7FypUr8cADD9RR6XwLa+JEpEtBQQHsmfsrB/aYzLrOVUx+MMd2x+8enIySkpI6KqFvYRAnIl1s1/eDYgmBYmtVq/OVJu0APyuC23EAkBEYxIlIs8zMTDiyD8LUoletZ1BUFAXm5r3gyPwOP//8s8El9D1eG8Sff/55KIqC6dOne7ooRD6jRZdfQQltDlNwtFv5mEKbQwmORFQCBwC5yyuD+O7du/HGG28gMTHR00Uh8il33NIBSkisIXkpITG4Z1BnQ/LyZV4XxAsKCnD//ffj73//O5o0aeLp4hD5HEVRoJjM7m+K14WfBsnrruKUKVMwcuRIDB482NNFIaJ6tG3bNtx+++1o3rw5FEXBmjVrXI4LITBr1izExsYiMDAQgwcPxo8//ijNd/HixWjdujUCAgLQp08ffPvtt3X0CeqGVwXxDz74APv27UNaWpqm9KWlpcjLy3PZiMhNismQmjh01sQLCwtx4403YvHixdUe/9vf/oZXXnkFS5cuxTfffIPg4GAMHTpUtSvjqlWrkJKSgtmzZ2Pfvn248cYbMXToUGRnZ+sqmyd5zWCfM2fO4I9//CPWr1+PgIAATeekpaVh7ty5Vfb/XFKBUn/jloyyaxh34TBg1IldkofZgFEnJg15mOvpT7/sutbHNQXq57rqvaYFJZ5b8kz5JYi7n4++6zp8+HAMHz682mNCCCxatAhPPfWUc03Pd955B9HR0VizZg1++9vfVnveSy+9hOTkZEycOBEAsHTpUnz22Wd46623MHPmTF3l8xSvqYnv3bsX2dnZ6N69O/z8/ODn54etW7filVdegZ+fH+x2e5VzUlNTkZub69zOnDnjgZITNS6Kh2riak6ePInMzEyXZlabzYY+ffpg586d1Z5TVlaGvXv3upxjMpkwePDgGs9piLymJj5o0CB8//33LvsmTpyIjh074oknnoDZXLVmYLVaYbVa66uIRKST3W6v0sxZm9/bzMxMAEB0tGvXx+joaOexa128eBF2u73ac44eParr/T3Ja4J4aGgoOnd27Y4UHByMpk2bVtlPRHXIpECpptKkl2JScPjwYdhsNpf9s2fPxpw5c9zO31d4TRAnooZBUUwwGdImbkJCQgK2b9/usr82355jYmIAAFlZWYiN/V8/9qysLHTt2rXac5o1awaz2YysrCyX/VlZWc78vIHXtIlXZ8uWLVi0aJGni0HkU4xsEzebzQgLC3PZahPE27Rpg5iYGGzcuNG5Ly8vD9988w2SkpKqPcdisaBHjx4u5zgcDmzcuLHGcxoi1sSJyCsUFBTg+PHjztcnT57EgQMHEBERgZYtW2L69On461//iuuvvx5t2rTB008/jebN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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sim_data.plot_field(\"fields_at_150THz\", \"Ey\", val=\"real\")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "98440f63", "metadata": {}, "source": [ "## Plugins\n", "\n", "Here we will discuss the plugins that support and extend functionalities of Tidy3D, including:\n", "\n", "- [Dispersion fitting tool](../notebooks/Fitting.html).\n", "\n", "- [Mode solver](../notebooks/ModeSolver.html).\n", "\n", "- [Near field to far field transformations](../notebooks/Near2Far.html).\n", "\n", "These plugins are designed to import and make use of Tidy3D components described above, but the Tidy3D components have no dependence on the plugins by design. In this sense, they can be considered \"external\" packages that are useful for defining simulation components.\n", "\n", "The components from these plugins can be imported as \n", "```\n", "from tidy3d.plugins.{plugin_name} import {component}\n", "```\n", "for example\n", "```\n", "from tidy3d.plugins.mode import ModeSolver\n", "```\n", "\n", "We won't go into the details in this notebook as each of the plugins has its own example tutorial notebook, but here is a summary:\n", "\n", "### Dispersion Fitting\n", "\n", "We provide a [tool for fitting optical data to create dispersive mediums](../_autosummary/tidy3d.plugins.DispersionFitter.html).\n", "\n", "Given a file or arrays containing wavelength, n, and (optionally) k data, this tool will fit the data to a pole-residue model with some constraints and parameters.\n", "\n", "After fitting, the user can visualize and inspect the results. \n", "\n", "This process can be repeated until the user is satisfied, at which point the tool can return a [dispersive medium](../_autosummary/tidy3d.PoleResidue.html) for use in the Simulation.\n", "\n", "For more details, see the corresponding [tutorial]((../notebooks/Fitter.html).\n", "\n", "### Mode Solver\n", "\n", "The `mode` plugin provides a [mode solver](../_autosummary/tidy3d.plugins.ModeSolver.html), which is mainly useful for coming up with [ModeSpec](../_autosummary/tidy3d.ModeSpec.html) objects for a given source or monitor.\n", "\n", "The tool takes a reference simulation containing some waveguide or other structure definitions to feed to the core solver. It also requires a [Box](../_autosummary/tidy3d.Box.html) specifying the plane on which to solve the modes for.\n", "\n", "Then, the user can iteratively send different [ModeSpec](../_autosummary/tidy3d.ModeSpec.html) objects, solve for the results, visualize, and repeat the process until satisfied.\n", "\n", "The resulting [ModeSpec](../_autosummary/tidy3d.ModeSpec.html) can be saved directly, or used in conjunction with the mode solver settings to return a [ModeSource](../_autosummary/tidy3d.ModeSource.html) or [ModeMonitor]((../_autosummary/tidy3d.ModeMonitor.html).\n", "\n", "For more details, see the corresponding [tutorial]((../notebooks/ModeSolver.html).\n", "\n", "\n", "### Scattering Matrix\n", "\n", "The `smatrix` plugin provides a wrapper for computing S-matrix components using Tidy3D simulations from the [Component Modeler](../_autosummary/tidy3d.plugins.smatrix.ComponentModeler.html) plugin.\n", "\n", "This tool allows users to connect \"ports\" to their simulation and post-processes the results into a datastructure that can be queried for S-matrix data.\n", "\n", "For more details, see the corresponding [tutorial]((../notebooks/SMatrix.html).\n", "\n", "### Adjoint\n", "\n", "The `adjoint` plugin allows users to write functions involving a Tidy3D `Simulation` run and take efficient gradients of those functions using `jax`. It requires setting up `Simulation` objects using jax-compatible analogues defined in the plugin.\n", "\n", "For more details, see the corresponding [tutorial]((../notebooks/AdjointPlugin_1_Intro.html).\n", "\n", "### Resonance Finder\n", "\n", "The `resonance` plugin provides an interface for analyzing time series data using the technique of \"harmonic inversion\" and using that data to find resonances in the simulation.\n", "\n", "For more details, see the corresponding [tutorial]((../notebooks/Bandstructure.html).\n", "\n", "\n", "### PolySlab\n", "\n", "The `polyslab` plugin extends the normal `td.PolySlab` functionality to provide more features needed for self-intersecting and complex geometries.\n", "\n", "For more details, see the corresponding [tutorial]((../notebooks/Self_intersecting_polyslab.html).\n", "\n", "## Conclusion\n", "\n", "We hope this gives a useful overview of the main changes in the revamped version of Tidy3D.\n", "\n", "We highly recommend you check out the various tutorial [notebook examples](https://docs.flexcompute.com/projects/tidy3d/en/stable/examples.html) if you have more specific questions or want to dive deeper in any of the topics.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "7bf787db", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.9" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0fca99a712184587a35c3557fff0eb28": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "25cc5b240add4376bcae5637ec141099": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "26111479242c4edda7e94cff1c53604a": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_25cc5b240add4376bcae5637ec141099", "msg_id": "", "outputs": [ { "data": { "text/html": "
\u2193 monitor_data.hdf5 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 100.0% \u2022 55.6/55.6 kB \u2022 ? \u2022 0:00:00\n
\n", "text/plain": "\u001b[1;32m\u2193\u001b[0m \u001b[1;34mmonitor_data.hdf5\u001b[0m \u001b[38;2;114;156;31m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[35m100.0%\u001b[0m \u2022 \u001b[32m55.6/55.6 kB\u001b[0m \u2022 \u001b[31m?\u001b[0m \u2022 \u001b[36m0:00:00\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "6d5d9bbe386e4f3ba3aad71d93130847": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "807a5c332b5245598bb8bc7969547503": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_6d5d9bbe386e4f3ba3aad71d93130847", "msg_id": "", "outputs": [ { "data": { "text/html": "
\u2191 simulation.json \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 100.0% \u2022 2.4/2.4 kB \u2022 ? \u2022 0:00:00\n
\n", "text/plain": "\u001b[1;31m\u2191\u001b[0m \u001b[1;34msimulation.json\u001b[0m \u001b[38;2;114;156;31m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[35m100.0%\u001b[0m \u2022 \u001b[32m2.4/2.4 kB\u001b[0m \u2022 \u001b[31m?\u001b[0m \u2022 \u001b[36m0:00:00\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "92b71f39dfc7411d8dcf7fda3cd467ab": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d472de6b951849fb890ff1cd03463482": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_92b71f39dfc7411d8dcf7fda3cd467ab", "msg_id": "", "outputs": [ { "data": { "text/html": "
\ud83d\udeb6  Starting 'web_demo'...\n
\n", "text/plain": "\u001b[32m\ud83d\udeb6 \u001b[0m \u001b[1;32mStarting 'web_demo'...\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "dbe741250c2e40038844cd174cc153fa": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "e3a5e8d2810d4936922deffeb185d594": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_dbe741250c2e40038844cd174cc153fa", "msg_id": "", "outputs": [ { "data": { "text/html": "
\ud83d\udeb6  Finishing 'web_demo'...\n
\n", "text/plain": "\u001b[32m\ud83d\udeb6 \u001b[0m \u001b[1;32mFinishing 'web_demo'...\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "f000da915d7a4968b2b2170017c18f61": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_0fca99a712184587a35c3557fff0eb28", "msg_id": "", "outputs": [ { "data": { "text/html": "
% done (field decay = 0.00e+00) \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 100% 0:00:00\n
\n", "text/plain": "% done (field decay = 0.00e+00) \u001b[38;2;114;156;31m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m0:00:00\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }