{ "cells": [ { "cell_type": "markdown", "id": "1d266682", "metadata": {}, "source": [ "# What's new in Tidy3d?\n", "\n", "This notebook will walk through the changes between the Tdy3D version released in March 2022 and the version used before that.\n", "\n", "If you are a new user and not familiar with our original version, this tutorial can be useful, but you may rather see one of our other ones for a more direct walkthrough of the features." ] }, { "cell_type": "code", "execution_count": 1, "id": "1382cd8c", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:32.854476Z", "iopub.status.busy": "2023-02-03T01:46:32.854183Z", "iopub.status.idle": "2023-02-03T01:46:33.889543Z", "shell.execute_reply": "2023-02-03T01:46:33.889147Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
[19:46:33] WARNING  This version of Tidy3D was pip installed from the 'tidy3d-beta' repository on   __init__.py:103\n",
       "                    PyPI. Future releases will be uploaded to the 'tidy3d' repository. From now on,                \n",
       "                    please use 'pip install tidy3d' instead.                                                       \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:33]\u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING \u001b[0m This version of Tidy3D was pip installed from the \u001b[32m'tidy3d-beta'\u001b[0m repository on \u001b]8;id=103710;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=734811;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py#103\u001b\\\u001b[2m103\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m PyPI. Future releases will be uploaded to the \u001b[32m'tidy3d'\u001b[0m repository. From now on, \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m please use \u001b[32m'pip install tidy3d'\u001b[0m instead. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO     Using client version: 1.9.0rc1                                                  __init__.py:121\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using client version: \u001b[1;36m1.9\u001b[0m.0rc1 \u001b]8;id=521479;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py\u001b\\\u001b[2m__init__.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=414462;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/__init__.py#121\u001b\\\u001b[2m121\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# First, lets import the main packages we'll need\n", "import numpy as np\n", "import matplotlib.pylab as plt\n", "import tidy3d as td" ] }, { "cell_type": "markdown", "id": "acd56cab", "metadata": {}, "source": [ "## Global Changes\n", "\n", "Here we will discuss some of the general changes that apply to all Tidy3d importable 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. As such, each tidy3d object corresponds to a data structure that has rigidly defined allowable types and values, which get validated automatically whenever you inialize an object.\n", "\n", "This has several advantges, 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.\n", "\n", "### Defining Tidy3d Components\n", "\n", "It also requires a bit more due-diligence on the user side:\n", "\n", "- All tidy3d components must use keyword arguments in their definitions, eg. `Medium(2.0)` becomes `Medium(permittivity=2.0)` to be explicit." ] }, { "cell_type": "code", "execution_count": 2, "id": "19eab659", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:33.891887Z", "iopub.status.busy": "2023-02-03T01:46:33.891661Z", "iopub.status.idle": "2023-02-03T01:46:33.896130Z", "shell.execute_reply": "2023-02-03T01:46:33.895761Z" } }, "outputs": [ { "data": { "text/html": [ "
           INFO     __init__() takes exactly 1 positional argument (2 given)                        3217355834.py:5\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m \u001b[1;35m__init__\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m takes exactly \u001b[1;36m1\u001b[0m positional argument \u001b[1m(\u001b[0m\u001b[1;36m2\u001b[0m given\u001b[1m)\u001b[0m \u001b]8;id=342870;file:///var/folders/80/rm392zc51jz32327xblmmg2c0000gn/T/ipykernel_11210/3217355834.py\u001b\\\u001b[2m3217355834.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=745025;file:///var/folders/80/rm392zc51jz32327xblmmg2c0000gn/T/ipykernel_11210/3217355834.py#5\u001b\\\u001b[2m5\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Box.html) instance." ] }, { "cell_type": "code", "execution_count": 3, "id": "20e27567", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:33.898230Z", "iopub.status.busy": "2023-02-03T01:46:33.898070Z", "iopub.status.idle": "2023-02-03T01:46:33.901944Z", "shell.execute_reply": "2023-02-03T01:46:33.901589Z" } }, "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": "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": 4, "id": "b34de32a", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:33.903860Z", "iopub.status.busy": "2023-02-03T01:46:33.903730Z", "iopub.status.idle": "2023-02-03T01:46:33.926426Z", "shell.execute_reply": "2023-02-03T01:46:33.926025Z" } }, "outputs": [ { "data": { "text/html": [ "
╭─────────────────────── <class 'tidy3d.components.monitor.FieldMonitor'> ───────────────────────╮\n",
       " :class:`Monitor` that records electromagnetic fields in the frequency domain.                  \n",
       "                                                                                                \n",
       " ╭────────────────────────────────────────────────────────────────────────────────────────────╮ \n",
       "  FieldMonitor(                                                                               \n",
       "  type='FieldMonitor',                                                                    \n",
       "  center=(0.0, 0.0, 0.0),                                                                 \n",
       "  size=(2.0, 2.0, 0.0),                                                                   \n",
       "  name='monitor',                                                                         \n",
       "  freqs=(200000000000000.0,),                                                             \n",
       "  apodization=ApodizationSpec(                                                            \n",
       "  │   │   start=None,                                                                         \n",
       "  │   │   end=None,                                                                           \n",
       "  │   │   width=None,                                                                         \n",
       "  │   │   type='ApodizationSpec'                                                              \n",
       "  ),                                                                                      \n",
       "  fields=('Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'),                                            \n",
       "  interval_space=(1, 1, 1),                                                               \n",
       "  colocate=False                                                                          \n",
       "  )                                                                                           \n",
       " ╰────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
       "                                                                                                \n",
       "    apodization = ApodizationSpec(start=None, end=None, width=None, type='ApodizationSpec')     \n",
       "   bounding_box = Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 0.0))                 \n",
       "         bounds = ((-1.0, -1.0, 0.0), (1.0, 1.0, 0.0))                                          \n",
       "         center = (0.0, 0.0, 0.0)                                                               \n",
       "       colocate = False                                                                         \n",
       "         fields = ('Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz')                                          \n",
       "          freqs = (200000000000000.0,)                                                          \n",
       "       geometry = Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 0.0))                 \n",
       " interval_space = (1, 1, 1)                                                                     \n",
       "           name = 'monitor'                                                                     \n",
       "    plot_params = PlotParams(                                                                   \n",
       "                      alpha=0.4,                                                                \n",
       "                      edgecolor='orange',                                                       \n",
       "                      facecolor='orange',                                                       \n",
       "                      fill=True,                                                                \n",
       "                      hatch=None,                                                               \n",
       "                      linewidth=3.0,                                                            \n",
       "                      type='PlotParams'                                                         \n",
       "                  )                                                                             \n",
       "           size = (2.0, 2.0, 0.0)                                                               \n",
       "           type = 'FieldMonitor'                                                                \n",
       "      zero_dims = [2]                                                                           \n",
       "╰────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\u001b[34m╭─\u001b[0m\u001b[34m──────────────────────\u001b[0m\u001b[34m \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 \u001b[0m\u001b[34m──────────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[36m:class:`Monitor` that records electromagnetic fields in the frequency domain.\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m╭────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[1;35mFieldMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mname\u001b[0m=\u001b[32m'monitor'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mfreqs\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m200000000000000.0\u001b[0m,\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mapodization\u001b[0m=\u001b[1;35mApodizationSpec\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mstart\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mend\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mwidth\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'ApodizationSpec'\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mcolocate\u001b[0m=\u001b[3;91mFalse\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[1m)\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m╰────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mcolocate\u001b[0m = \u001b[3;91mFalse\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mfreqs\u001b[0m = \u001b[1m(\u001b[0m\u001b[1;36m200000000000000.0\u001b[0m,\u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mname\u001b[0m = \u001b[32m'monitor'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mplot_params\u001b[0m = \u001b[1;35mPlotParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.4\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33medgecolor\u001b[0m=\u001b[32m'orange'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfacecolor\u001b[0m=\u001b[32m'orange'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfill\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mhatch\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mlinewidth\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mtype\u001b[0m = \u001b[32m'FieldMonitor'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mzero_dims\u001b[0m = \u001b[1m[\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1m]\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m╰────────────────────────────────────────────────────────────────────────────────────────────────╯\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": "d91a3920", "metadata": {}, "source": [ "## Changes to Core Components\n", "\n", "Here we will discuss the changes to the core package, specifically changes to how the core components (sources, monitors, etc) 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", "As before, 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": 5, "id": "a197e0c0", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:33.928686Z", "iopub.status.busy": "2023-02-03T01:46:33.928415Z", "iopub.status.idle": "2023-02-03T01:46:33.930567Z", "shell.execute_reply": "2023-02-03T01:46:33.930205Z" } }, "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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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": 6, "id": "6bde0e4e", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:33.932579Z", "iopub.status.busy": "2023-02-03T01:46:33.932417Z", "iopub.status.idle": "2023-02-03T01:46:33.934760Z", "shell.execute_reply": "2023-02-03T01:46:33.934400Z" } }, "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.\n", "\n", "This kind of medium can be simply defined by specifing three [Medium](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Medium.html) objects for the xx, yy, zz components of the permittivity / conductivity tensor.\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "e7a92005", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:33.936783Z", "iopub.status.busy": "2023-02-03T01:46:33.936612Z", "iopub.status.idle": "2023-02-03T01:46:33.938811Z", "shell.execute_reply": "2023-02-03T01:46:33.938463Z" } }, "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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/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": 8, "id": "43618ec5", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:33.940747Z", "iopub.status.busy": "2023-02-03T01:46:33.940596Z", "iopub.status.idle": "2023-02-03T01:46:33.943711Z", "shell.execute_reply": "2023-02-03T01:46:33.943360Z" }, "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": 9, "id": "789f0ac9", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:33.945827Z", "iopub.status.busy": "2023-02-03T01:46:33.945700Z", "iopub.status.idle": "2023-02-03T01:46:34.150347Z", "shell.execute_reply": "2023-02-03T01:46:34.149848Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "complex relative permittivity at freqs_hz = \n", "\t [4.+359.5020714j 4.+358.42679103j 4.+357.35792385j ... 4. +90.01053365j\n", " 4. +89.94297508j 4. +89.87551785j]\n", "\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQHElEQVR4nO3dd3hUVcLH8d/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+KEn67LPP3Oo7duyoK664wrUc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yXryySerfLwAAAAXEq8uxYaFhclmsykjI8OtPiMjQ5GRkWfcNicnR2+//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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Box.html)\n", "\n", "- [Sphere](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Sphere.html)\n", "\n", "- [Cylinder](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Cylinder.html)\n", "\n", "- [Polyslab](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.PolySlab.html)\n", "\n", "Note that `GdsSlab` was removed, but GDS cells can still be loaded as [Polyslab](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.PolySlab.html) objects using `PolySlab.from_gds()` classmethod. Please refer to the [tutorial notebook on GDS importing](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/notebooks/GDS_import.html) for more details.\n", "\n", "[Geometry](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.components.geometry.Geometry.html) objects have many useful methods." ] }, { "cell_type": "code", "execution_count": 10, "id": "15b8d749", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.152724Z", "iopub.status.busy": "2023-02-03T01:46:34.152530Z", "iopub.status.idle": "2023-02-03T01:46:34.299791Z", "shell.execute_reply": "2023-02-03T01:46:34.299376Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "False\n", "[]\n", "((-1.0, -1.0, -1.0), (1.0, 1.0, 1.0))\n" ] }, { "data": { "text/html": [ "
╭───────────────────── <class 'tidy3d.components.geometry.Box'> ─────────────────────╮\n",
       " Rectangular prism.                                                                 \n",
       "    Also base class for :class:`Simulation`, :class:`Monitor`, and :class:`Source`. \n",
       "                                                                                    \n",
       " ╭────────────────────────────────────────────────────────────────────────────────╮ \n",
       "  Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 2.0))                   \n",
       " ╰────────────────────────────────────────────────────────────────────────────────╯ \n",
       "                                                                                    \n",
       " bounding_box = Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 2.0))       \n",
       "       bounds = ((-1.0, -1.0, -1.0), (1.0, 1.0, 1.0))                               \n",
       "       center = (0.0, 0.0, 0.0)                                                     \n",
       "     geometry = Box(type='Box', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 2.0))       \n",
       "  plot_params = PlotParams(                                                         \n",
       "                    alpha=1.0,                                                      \n",
       "                    edgecolor=None,                                                 \n",
       "                    facecolor=None,                                                 \n",
       "                    fill=True,                                                      \n",
       "                    hatch=None,                                                     \n",
       "                    linewidth=1.0,                                                  \n",
       "                    type='PlotParams'                                               \n",
       "                )                                                                   \n",
       "         size = (2.0, 2.0, 2.0)                                                     \n",
       "         type = 'Box'                                                               \n",
       "    zero_dims = []                                                                  \n",
       "╰────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\u001b[34m╭─\u001b[0m\u001b[34m────────────────────\u001b[0m\u001b[34m \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 \u001b[0m\u001b[34m────────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[36mRectangular prism.\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[36m Also base class for :class:`Simulation`, :class:`Monitor`, and :class:`Source`.\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m╭────────────────────────────────────────────────────────────────────────────────╮\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m╰────────────────────────────────────────────────────────────────────────────────╯\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mplot_params\u001b[0m = \u001b[1;35mPlotParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33medgecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfacecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfill\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mhatch\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mlinewidth\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mtype\u001b[0m = \u001b[32m'Box'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mzero_dims\u001b[0m = \u001b[1m[\u001b[0m\u001b[1m]\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m╰────────────────────────────────────────────────────────────────────────────────────╯\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": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAHWCAYAAAAsM2MeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABVVklEQVR4nO3dd3hT5eMF8JO0TdJ0t3SyV1t2kVFBoYxCEVRQtkgRFRQFRBABRRD8YVGRpSiKIrKUoWwFoVC2ZWvZe9MBHelIm7Z5f39g87WyCmn7ZpzP8+SB3tybnFxCTu+9771RCCEEiIiI6JEpZQcgIiKydixTIiIiM7FMiYiIzMQyJSIiMhPLlIiIyEwsUyIiIjOxTImIiMzEMiUiIjITy5SIiMhMLFMiOxEXFweFQoG4uDjZUYhsDsuUyMZ89dVXWLBggewYj2Tp0qWYOXOm7BjFfP/996hTpw40Gg1q166NL774osTL5uXlYcyYMQgKCoKzszPCw8OxefPmu867Z88ePPnkk9BqtQgICMDw4cORlZVVWi+DypogIptSr149ERERccf0wsJCodfrRWFhYfmHKqEuXbqIqlWryo5hMnfuXAFAdO/eXXz77beif//+AoCYOnVqiZbv06ePcHR0FO+884745ptvRIsWLYSjo6PYuXNnsfkOHz4sNBqNaNy4sfj666/F+++/L9RqtejUqVNZvCwqAyxTsklZWVmyI0hzrzK1BpZUpjk5OcLHx0d06dKl2PR+/foJFxcXkZqaet/l4+PjBQDx2Wefmabp9XpRs2ZN0aJFi2LzPvXUUyIwMFBkZGSYps2bN08AEJs2bSqFV0NljWVKFu/q1avi5ZdfFoGBgUKlUolq1aqJ119/XeTl5QkhhPjhhx8EABEXFyeGDBkifH19haenp2n5OXPmiLp16wqVSiUCAwPFG2+8IdLS0oo9x+nTp8Xzzz8v/P39hVqtFhUrVhS9e/cW6enppnn++OMP8cQTTwgPDw/h4uIigoODxbhx4x6YvyTL5ebmigkTJoiaNWsKlUolKlWqJEaPHi1yc3PveLxFixaJZs2aCWdnZ+Hp6SlatWpl+sCtWrWqAFDsVlSs27ZtEwDEtm3bij3e8uXLxWOPPSY0Go3w8fER/fr1E1evXi02z4ABA4SLi4u4evWq6Nq1q3BxcREVKlQQo0aNEgUFBQ9cB6tXrxadO3c2/RvWqFFDTJ48udiyERERd2S/X7G2bt1aNGzY8K73BQcHi44dOz4w1/1s2LBBABAbNmwoNn3Pnj0CgFi0aNF9lx89erRwcHAoVpBCCPHxxx8LAOLy5ctCCCEyMjKEo6OjGD16dLH58vLyhKurq3jllVfMeh1UPhzLfb8y0UO4fv06mjdvjvT0dAwePBihoaG4du0aVq5ciZycHKhUKtO8b7zxBnx9fTFhwgRkZ2cDAD788ENMmjQJkZGRGDJkCE6dOoWvv/4a+/fvx+7du+Hk5ASDwYCoqCjk5eVh2LBhCAgIwLVr17B+/Xqkp6fDw8MDx44dw9NPP42GDRti8uTJUKvVOHv2LHbv3n3f/CVZzmg04tlnn8WuXbswePBg1KlTBwkJCZgxYwZOnz6N1atXm+adNGkSPvzwQ7Rs2RKTJ0+GSqVCfHw8tm7dio4dO2LmzJkYNmwYXF1d8f777wMA/P3975lvwYIFGDhwIJo1a4aYmBgkJSVh1qxZ2L17Nw4fPgxPT0/TvIWFhYiKikJ4eDimTZuGLVu24PPPP0fNmjUxZMiQ+66HBQsWwNXVFSNHjoSrqyu2bt2KCRMmQKfT4bPPPgMAvP/++8jIyMDVq1cxY8YMAICrq+s9H7N///4YNGgQjh49ivr165um79+/H6dPn8b48eNN09LS0lBYWHjfjACg1Wqh1WoBAIcPHwYANG3atNg8TZo0gVKpxOHDh/Hiiy/e87EOHz6M4OBguLu7F5vevHlzAMCRI0dQuXJlJCQkoKCg4I7nUalUCAsLM+UgCye7zYnuJzo6WiiVSrF///477jMajUKI/22ZPvnkk8W2dJKTk4VKpRIdO3Ysdpzwyy+/FADE/PnzhRC3j1cBECtWrLhnjhkzZggAIiUl5aHyl2S5RYsWCaVSecdxtKLjdbt37xZCCHHmzBmhVCrFc889d8dxz6J1IcS9d/P+d8vUYDAIPz8/Ub9+faHX603zrV+/XgAQEyZMME0bMGCAACAmT55c7DEbN24smjRpcv+VIG7vMv2v1157TWi12mJb3w+zmzc9PV1oNBoxZsyYYtOHDx8uXFxciu3qv9sW+91uEydONC3z5ptvCgcHh7s+t6+vr+jTp89989WrV0+0a9fujunHjh0TAMTcuXOFEEKsWLFCABA7duy4Y96ePXuKgICA+z4PWQaO5iWLZTQasXr1ajzzzDN3/NYOAAqFotjPgwYNgoODg+nnLVu2wGAwYMSIEVAqlcXmc3d3x4YNGwAAHh4eAIBNmzYhJyfnrlmKttDWrFkDo9FY4tdQkuVWrFiBOnXqIDQ0FDdv3jTd2rVrBwDYtm0bAGD16tUwGo2YMGFCsdcD3LkuSuLAgQNITk7GG2+8AY1GY5repUsXhIaGmtbPv73++uvFfm7VqhXOnz//wOdydnY2/T0zMxM3b95Eq1atkJOTg5MnTz50duD2v1vXrl3x008/QQgB4PbW87Jly9CtWze4uLiY5l2yZAk2b978wFt0dLRpGb1eX2zPx79pNBro9fr75tPr9VCr1Xddtuj+f/95r3kf9DxkGbiblyxWSkoKdDpdsV1491O9evViP1+6dAkAEBISUmy6SqVCjRo1TPdXr14dI0eOxPTp07FkyRK0atUKzz77LF588UVT0fbu3RvfffcdXn31VYwdOxbt27fH888/jx49etxRbP9WkuXOnDmDEydOwNfX966PkZycDAA4d+4clEol6tatW6L18SD3Wj8AEBoail27dhWbptFo7sjo5eWFtLS0Bz7XsWPHMH78eGzduhU6na7YfRkZGQ8b3SQ6OhrLli3Dzp070bp1a2zZsgVJSUno379/sfmeeOKJh35sZ2dnGAyGu96Xm5tb7BeEey2fl5d312WL7v/3n/ea90HPQ5aBZUo2w5wPnc8//xwvvfQS1qxZgz/++APDhw9HTEwM/vzzT1SqVAnOzs7YsWMHtm3bhg0bNmDjxo1YtmwZ2rVrhz/++KPYFvF/Mz1oOaPRiAYNGmD69Ol3fYzKlSs/8usqTfd6jQ+Snp6OiIgIuLu7Y/LkyahZsyY0Gg0OHTqEMWPGPNSW/n9FRUXB398fixcvRuvWrbF48WIEBAQgMjKy2HwpKSklOmbq6upqOk4bGBiIwsJCJCcnw8/PzzSPwWDArVu3EBQUdN/HCgwMxLVr1+6YfuPGDQAwLR8YGFhs+n/nfdDzkGXgbl6yWL6+vnB3d8fRo0cfafmqVasCAE6dOlVsusFgwIULF0z3F2nQoAHGjx+PHTt2YOfOnbh27Rrmzp1rul+pVKJ9+/aYPn06jh8/jilTpmDr1q2m3bD38qDlatasidTUVLRv3x6RkZF33Iq2HGvWrAmj0Yjjx4/f9/lKusv3XuunaNp/18+jiouLw61bt7BgwQK89dZbePrppxEZGQkvL6875n3Y3dUODg544YUXsHLlSqSlpWH16tXo27fvHcXfrFkzBAYGPvA2bdo00zJhYWEAbu8O/7cDBw7AaDSa7r+XsLAwnD59+o4t8fj4+GKPX79+fTg6Ot7xPAaDAUeOHHng85BlYJmSxVIqlejWrRvWrVt3xwcNANNxsnuJjIyESqXC7Nmzi837/fffIyMjA126dAEA6HQ6FBQUFFu2QYMGUCqVpl1vqampdzx+0Yfc3XbPFSnJcr169cK1a9cwb968O+bV6/WmkcndunWDUqnE5MmT79ia+/frc3FxQXp6+j0zFWnatCn8/Pwwd+7cYq/h999/x4kTJ0zrx1xFxfbvjAaDAV999dUd87q4uDz0bt/+/fsjLS0Nr732GrKysu46wvZRjpm2a9cO3t7e+Prrr4s91tdffw2tVlts/dy8eRMnT54sdsy9R48eKCwsxLfffmualpeXhx9++AHh4eGmPQ4eHh6IjIzE4sWLkZmZaZp30aJFyMrKQs+ePR9qfZAkUoc/ET3A1atXRUBAgNBqtWLEiBHim2++ER9++KGoV6+e6VzRotG8dxvxO3HiRAFAdOzYUXz55Zdi2LBhwsHBQTRr1kwYDAYhhBCrVq0SFStWFCNGjBBfffWVmD17tmjWrJlwcnISe/fuFUII8dZbb4nGjRuL8ePHi3nz5okpU6aIihUrikqVKhU7F/W/SrJcYWGh6Ny5s1AoFKJPnz7iiy++EDNnzhSvv/668Pb2Lva6PvjgAwFAtGzZUkybNk188cUXIjo6WowdO9Y0zxtvvCEUCoX46KOPxE8//SRiY2OFEHc/z7Ro3YWHh4uZM2eKcePGCa1WK6pVq1bsXNyi80zvtX7v5+bNm8LLy0tUrVpVfP7552L69OmicePGolGjRnfk+fTTTwUA8fbbb4ulS5eKtWvX3vexi9SvX18AEHXq1CnR/CU1Z84cAUD06NFDzJs3T0RHRwsAYsqUKcXmK1oP/z2Ht2fPnqZzSL/55hvRsmVL4ejoKLZv315svoMHDwq1Wl3sCkgajcbsc2Wp/LBMyeJdunRJREdHC19fX6FWq0WNGjXEm2++ecdFG+5WpkLcPhUmNDRUODk5CX9/fzFkyJBiRXH+/Hnx8ssvi5o1awqNRiO8vb1F27ZtxZYtW0zzxMbGiq5du4qgoCChUqlEUFCQ6Nu3rzh9+vR9s5d0OYPBID755BNRr149oVarhZeXl2jSpImYNGnSHSf9z58/XzRu3Ng0X0REhNi8ebPp/sTERNGlSxfh5uZWoos2LFu2zPR43t7e971ow3+VpEyFEGL37t3i8ccfF87OziIoKEi8++67YtOmTXfkycrKEi+88ILw9PR84EUb/q2ohD/++OMSzf8wvv32WxESEiJUKpWoWbOmmDFjRrFTkYS4d5nq9XrxzjvviICAAKFWq0WzZs3Exo0b7/o8O3fuFC1bthQajUb4+vqKN998U+h0ulJ/PVQ2FEI8YF8ZEZGFmzVrFt5++21cvHgRVapUkR2H7BDLlIismhACjRo1go+PzwMHgxGVFZ4aQ0RWKTs7G2vXrsW2bduQkJCANWvWyI5EdoxbpkRklS5evIjq1avD09MTb7zxBqZMmSI7EtkxlikREZGZeJ4pERGRmVimREREZuIApAcwGo24fv063NzcHumbOYiIyDoJIZCZmYmgoKD7fqEFwDJ9oOvXr1vMhcaJiKj8XblyBZUqVbrvPCzTB3BzcwNwe2W6u7tLTkNEROVFp9OhcuXKph64H5bpAxTt2nV3d2eZEhHZoZIc4uMAJCIiIjOxTImIiMzEMiUiIjITy5SIiMhMLFMiIiIzsUyJiIjMxDIlIiIyE8uUiIjITCxTIiIiM7FMiYiIzMQyJSIiMhPLlIiIyEwsUyIiIjOxTImIiMzEMiUiIjITy5SIiMhMLFMiIiIzsUyJiIjMxDIlIiIyE8uUiIjITCxTIiIiM7FMiYiIzMQyJSIiMhPLlIiIyEwsUyIiIjOxTImIiMzEMiUiIjITy5SIiMhMLFMiIiIzsUyJiIjMxDIlIiIyE8uUiIjITCxTIiIiM7FMiYiIzMQyJSIiMhPLlIiIyEwsUyIiIjNZVZnu2LEDzzzzDIKCgqBQKLB69eoHLhMXF4fHHnsMarUatWrVwoIFC8o8JxER2RerKtPs7Gw0atQIc+bMKdH8Fy5cQJcuXdC2bVscOXIEI0aMwKuvvopNmzaVcVIiIrInjrIDPIynnnoKTz31VInnnzt3LqpXr47PP/8cAFCnTh3s2rULM2bMQFRUVFnFJCIiO2NVW6YPa+/evYiMjCw2LSoqCnv37pWUiMi6CCEghJAdg8jiWdWW6cNKTEyEv79/sWn+/v7Q6XTQ6/Vwdna+Y5m8vDzk5eWZftbpdGWek6isFBQU4OLFizh37hzS0tKQlZWFzMxMZGZmmv5e9KdOl4kMXSZ0mTpkZWUjOysTOTnZEEYjnLUucHFxhaubK9zd3ODm5gYPd3e4ubnCzc0Nrq63//z3393d3VGtWjXUqlULGo1G9qogKlM2XaaPIiYmBpMmTZIdg6jEhBC4fv06Tp8+bbqdOn0aJ06ewqWLF1BYUFBsfke1Fg5qDZQqLRROGsDJGcJJDYWTM5QqLyjcg6Cs4AwHlQYeKu3t58jPRZ5Bj1xDLpINehhT9BDXk6DIvwQU5EIY9BCGXBTk5aAwTw8hjKbnUygUCKxYGXVCgxEaEoLg4GDTrWrVqnBwcCjX9UVUFmy6TAMCApCUlFRsWlJSEtzd3e+6VQoA48aNw8iRI00/63Q6VK5cuUxzEpWEXq/H33//Xaw0j584hXPnzkCfkwMAUCgdoPEOgMIjEA5edeHRrgMcvYLg5BUEpbMbFE5qKBRle3RHCAFRkAdjbjYKMhJRkHoNWanXsffyNexJ2IC8W/NgLDAAAJycVKhavQbqhoYgJOR/JduwYUN4enqWaU6i0mTTZdqiRQv89ttvxaZt3rwZLVq0uOcyarUaarW6rKMRPZBer8eff/6JuLg4xG7dhn3x8cjPv11Cag9fOHgFQekRCE14E7h6V4STV0U4evpD4eAkNbdCoYDCSQOlkwaObj5ApXrF7hfGQhRm3kJ+6jUUpF1DUuo1XD96FZt370duaiKEMEKhUKBBozBEtmuLNm3aoFWrVixXsmgKYUWjC7KysnD27FkAQOPGjTF9+nS0bdsW3t7eqFKlCsaNG4dr165h4cKFAG6fGlO/fn28+eabePnll7F161YMHz4cGzZsKPFoXp1OBw8PD2RkZMDd3b3MXhtRbm5usfKMj49HviEPTlp3OFWqB3XlBlBXqgsn74pQqu6+Z8XaiYJ85KffgOH6KeRe/hsFV48iLyMFSqXyjnL18PCQHZds3MN8/ltVmcbFxaFt27Z3TB8wYAAWLFiAl156CRcvXkRcXFyxZd5++20cP34clSpVwgcffICXXnqpxM/JMqWykpubi/j4eMTFxWFL7NZ/lacbnCrVh7pyA2iqNICTb9Uy3zVrqYQQKMhIQt7lv5F7OYHlSuXKZstUBpYplaYbN27gp59+wuo1a/Hnn3/+pzzr/1Oe1ey2PB9ECIGC9ETkXk5A3pUEFFxNQF7GTSiVSjQMa4ynOz+Ffv36ITQ0VHZUsgEs01LEMiVz6XQ6rFq1Cj8uXITtcdsApQM01RpDXaXR7fL0Y3k+qn+Xa+7lv2C4cBAF+iw0avwYBvR/EX369EFgYKDsmGSlWKaliGVKj8JgMGDTpk1YvHgxVq9ZC0NeLrRVG0JTJwLakCfgoHGVHdEmiQID9OcOIOf4NujPHwCMhWjbth2io/vjueeeg5ubm+yIZEVYpqWIZUolJYTA3r17sXjxYvz08zKkp6VC41cNmjpt4FK3NRzd/WRHtCuFuVnIObkLuSfikHP5KNQaZ3Tr2hX9+7+Ijh07wslJ7qhnsnws01LEMqUHOXnyJJYsWYKFi5fg8sULUHtUgDo0Ai5120DlV112PAJQkJGM7BPbkXtiO3KTL8LL2wd9+/TGiy++iMcffxwKhUJ2RLJALNNSxDKluykoKMDy5cvx+fQZOHTwABw1LtAEPwGXem2grlyfx0AtlBAC+SkXkH0sDrknd8Cgu4mq1WvgrWFDMWjQILi6cvc7/Q/LtBSxTOnfcnNzsWDBAsR88ikuX7wAbY0m0DbsCG3NZlA4qmTHo4cgjIXIvXIU2QlboD+5A25u7nh7xFsYNmwYvL29ZccjC8AyLUUsUwKAzMxMzJ07F59N+xwpKclwCX0S7uE9oPKvKTsalYKCjGTo9v2KnITNUDk54PXXXsOoUaNQsWJF2dFIIpZpKWKZ2reUlBTMnj0bs2Z/gezsbGjrtYN7eHc4efND1hYVZqdDd3Atco78BkWBAQMGRGPMmDGoVauW7GgkAcu0FLFM7dOVK1fw2Wef4dt536HAKKBtGAX3Zs/B0b2C7GhUDox52cg8/DtyDq1BQXYGevTogXHjxiEsLEx2NCpHLNNSxDK1LydPnsTUqZ9g8ZLFUKqcoW38NNyaPAMHZ/7b2yNjfh6yj8Yie/+vyEtLRFSnTnj/vffQqlUr2dGoHLBMSxHL1D6cOnUK4957D6tXrYKTmw9cmnSFa1gnm72gPD0cYSxE9okdyN73C3KTL+LxFi3xydQYtG7dWnY0KkMs01LEMrVt2dnZ+Oijj/D559Ph4OYDl+Y94Fq/PRSOPKGf7iSEEfqz+5H158/QXz+Dvi+8gM+nTeMlC20Uy7QUsUxtkxACv/zyC4a/NQLJKTfh2rw73MO7Q+nE77KlBxPCiOyEWOh2LICTohD/N3kyhg4dyqsq2ZiH+fznmeVkd06ePIn2kR3Qs2dP6Fwqwf/lOfB88gUWKZWYQqGEa8MO8H/1GzgER2DUqHfQoFEYtm/fLjsaScIyJbuRlZWFMWPGoEGDhthz5Dh8e0xEhec/gJNngOxoZKUcNK7w7jAEAQNm4HKmQJs2bdC3b19cv35ddjQqZ9zN+wDczWv9hBBYuXIlho94GykpN+Ea3gMe4d15xSIqVUIYkX10KzJ3LICjyMfkSZMwfPhw7vq1YtzNS/SPkydPol37SPTq1QuZRbt0n+jLIqVSp1Ao4dogEn6vzIVDSFuMHv0uGjRshLi4ONnRqBywTMkmZWVl4d1330WDBg2x968T3KVL5eb2rt/XETBgJi5nKdC2bVvu+rUD3M37ANzNa33279+P7j174fr1G9ylS1IV7frV7VgAlaIQC+bPR48ePWTHohLibl6yS0IIzJgxAy1bPoGbBWr4D/ySu3RJqqJdv/6vzAUqNkLPnj0xZMgQ5Obmyo5GpYxlSjbh1q1bePrpZzBy5EhoGz8N375T4eTFE+nJMjhoXOHz7Bh4R72Jb7+bj2bNw3Hq1CnZsagUsUzJ6u3atQsNGjbC5rid8O0+AV7tXoHCgSMoybIoFAq4hT0F//7TcPZGGho/1gSLFy+WHYtKCcuUrJbRaERMTAwi2rRBuoMn/AbMhrZWc9mxiO5L5VcDvv2nw6F6c/Tv3x8DBw5Edna27FhkJg5AegAOQLJMSUlJ6NfvRcRujYX7473g+eQLUCgdZMcieihZCbFI3/I1alavhl9WrkD9+vVlR6J/4QAksmmxsbFo0LARdsYfhF/PyfBq3Z9FSlbJtUF7+PefgctpuWjStBm+++47cPvGOrFMyWoUFBTggw8+QIcOHZCtDYTfgNlwrt5YdiwiszhVqAzfFz+HKrQNBg0ahL4vvACdTic7Fj0kR9kBiEoiMTERPXr2wp7du+Hx5Itwf7wHt0bJZiid1PDpNBSaqg3xy+ovEb9vP1b/+gsaNWokOxqVELdMyeKdOXMGzcMfx/6/j8Ov78fwaNmbRUo2yaVOa/hFz0SSXoEnnnwSW7dulR2JSohlShbtwIEDeLxFS6TojfDt9xk0lTlAg2ybk1cQKvSJgfALQadOT2H58uWyI1EJsEzJYm3evBmtI9pAr6mACn0/gaO7n+xIROVCqXJGhefHQxXcEn369MGXX34pOxI9AMuULNJPP/2Ezp27QBFYBxV6/R8cnHlaEtkXhYMTfLqMhGuTZzFs2DCMHz+eI30tGAcgkcWZNWsWRowYAdf67eDdaTgUDnybkn1SKJTwavcqHFy9MWXKFCQmJmLu3LlwdOT/CUvDfxGyGEIIjBs3Dp988gncmz8PzzYDoVAoZMcikkqhUMAjvDsctJ6Y/8NsJKekYNnPP8PZ2Vl2NPoXlilZhIKCAgwaNAgLFiyAV9tX4N78OdmRiCyKa4P2UGrd8duaqWgf2QEb1q+Dl5eX7Fj0Dx4zJelycnLQtWs3LFy0CD5Pj2KREt2DtmYz+PaeggNHEvDEk61w7do12ZHoHyxTkio1NRXt2kdi05ZYVHh+AlzrtZUdiciiqSuGwrfvJzh/PQXhj7fAyZMnZUcisExJouTkZLR84kkcSjgO395T4FyjiexIRFbBqUJlVOj7KW7lKdGi5RM4cuSI7Eh2j2VKUmRmZiKq01O4cC0Jvn2nQh0UIjsSkVVxdK+ACn2nIk/jgw4do3D+/HnZkeway5TKncFgQNduz+HoiVPw6f4hnHwqy45EZJUcnN3g030isoxOaBfZAUlJSbIj2S2WKZUro9GI/tHR2L5jB3yeex8q/xqyIxFZNQcXT3j3mIQbN9MR1ekpZGZmyo5kl1imVG6EEBgxYgSWL18O76ffgaZKQ9mRiGyCk2cAfHp8iGMnT+PZrt2Ql5cnO5LdYZlSuZk6dSq++OILeHcYApeQJ2THIbIpKr8a8HluPHbs3IX+0dEwGo2yI9kVlimVi++//x7vvfcePJ7oC7fGnWXHIbJJmioN4PP0O1ixYgWGDx/Oa/mWI5Yplbm1a9di8ODBcA3rBI8nXpAdh8imaUNawrvjG5gzZw5iYmJkx7EbvJwglandu3ejZ6/ecK79OLw7DOG1donKgVvYUyjMTsf7778PPz8/vPrqq7Ij2TyWKZWZY8eO4anOXeAYUBs+T78DhdJBdiQiu+HRsg8Ks9Pw2muvwc/PD88++6zsSDaNu3mpTFy+fBntO3REgdYHPs+Nh8JRJTsSkV1RKBTwjnwNzrVboGev3ti1a5fsSDaNZUqlLjs7Gx07PYX0XCO8u38IpdpFdiQiu6RQOsDn6VFwDAhG5y5P8ypJZYhlSqVu6NChOHvuPLyfnwBHV2/ZcYjsmsJRBZ9u78HgqEXPXr1hMBhkR7JJLFMqVYsWLcKCBQvgGTkEqgpVZMchIgBKjSu8nh6NI0eOYOzYsbLj2CSWKZWaU6dO4bXXX4dL/XZwbdBedhwi+hd1YDA8IgZixowZWLdunew4NodlSqVCr9eje4+eEFofeHcYIjsOEd2FW9Nn4VL7cfSPHoArV67IjmNTWKZUKkaOHIkTJ0/B65l3oVQ5y45DRHehUCjg9dRbyIUTevXug4KCAtmRbAbLlMy2cuVKzJ07F57tB0HlV112HCK6DwdnN3h2eQfx8fGYOHGi7Dg2g2VKZjl//jxeevlluIQ+CddGnWTHIaIS0FSqC48n+yEmJgabN2+WHccmsEzpkRkMBvTs1RsFjq7w7jSMlwoksiLuj/eAc7Uw9H2hHxITE2XHsXosU3pkY8eOxZEjR+D1zGhemIHIyigUSnh3GYnMvEL06fsCCgsLZUeyaixTeiTr1q3DjBkz4BExEOrAYNlxiOgROLh4wbPLKGzfHsdvmDETy5Qe2pUrV9A/egBcaofDrSkvnk1kzZyrNoJHiz6YOHEiduzYITuO1WKZ0kMRQmDwa68hVzjC66m3eJyUyAZ4PNEHmkp18WL0AOj1etlxrBLLlB7KunXrsPH33+HebhAcnN1lxyGiUqBQOsAzahiuXb2KTz/9VHYcq8QypRLT6/V4c9hwaGs0gXPtFrLjEFEpcvKuCNdm3TDl4xh+u8wjYJlSiU2dOhXXr1+HZ/vB3L1LZIM8WvSBUuuB4cPfkh3F6lhdmc6ZMwfVqlWDRqNBeHg49u3bd895FyxYAIVCUeym0WjKMa3tOHfuHGKmfgLXZs/Dybui7DhEVAaUKg3cIl7Ghg3rsX79etlxrIpVlemyZcswcuRITJw4EYcOHUKjRo0QFRWF5OTkey7j7u6OGzdumG6XLl0qx8S2QQiBocOGQan1gEeLnrLjEFEZ0oY8AW31xnhz2HDk5ubKjmM1rKpMp0+fjkGDBmHgwIGoW7cu5s6dC61Wi/nz599zGYVCgYCAANPN39+/HBPbBtOgozavQunELXsiW6ZQKODZ/jVcvXKFg5EegtWUqcFgwMGDBxEZGWmaplQqERkZib17995zuaysLFStWhWVK1dG165dcezYsfKIazP0ej2GFg06CuagIyJ74ORTCa5Nbw9GunDhguw4VsFqyvTmzZsoLCy8Y8vS39//nteVDAkJwfz587FmzRosXrwYRqMRLVu2xNWrV+/5PHl5edDpdMVu9mzq1Km4du0aBx0R2RmPlr2h0Lhh+FscjFQSVlOmj6JFixaIjo5GWFgYIiIi8Ouvv8LX1xfffPPNPZeJiYmBh4eH6Va5cuVyTGxZTIOOmnPQEZG9Uaqc4dbmFaxftw4bNmyQHcfiWU2ZVqhQAQ4ODkhKSio2PSkpCQEBASV6DCcnJzRu3Bhnz5695zzjxo1DRkaG6WbP30Y/bPhwKJ094PF4L9lRiEiC24ORwvDG0GEcjPQAVlOmKpUKTZo0QWxsrGma0WhEbGwsWrQo2bG8wsJCJCQkIDAw8J7zqNVquLu7F7vZo3Xr1uH3336De9tXoVRx0BGRPfr3YKTPPvtMdhyLZjVlCgAjR47EvHnz8OOPP+LEiRMYMmQIsrOzMXDgQABAdHQ0xo0bZ5p/8uTJ+OOPP3D+/HkcOnQIL774Ii5duoRXX31V1kuwCgaD4Z8rHT3GQUdEds7JpzJcm3bF/0352K731D2Io+wAD6N3795ISUnBhAkTkJiYiLCwMGzcuNE0KOny5ctQKv/3+0FaWhoGDRqExMREeHl5oUmTJtizZw/q1q0r6yVYhaVLl+LKpYsIfPkdDjoiIni06A19wh+YNm0aZs2aJTuORVIIIYTsEJZMp9PBw8MDGRkZdrHL12g0IqROXdwQnqjw/Aey4xCRhUjfuQR5h9fgyuVLqFChguw45eJhPv+tajcvlb3Vq1fj7OlTcAvnlY6I6H/cmj6D/EIjZs+eLTuKRWKZkokQAv835WNoqzaEumKo7DhEZEEcnN2hbRiFmbNm2/3593fDMiWT2NhYHD50EK7hPWRHISIL5N7sOWRnZ9/3XH17xTIlk/+b8jGcA2tBU62x7ChEZIEc3SvAuW5bfDbtc553+h8sUwIA7Nu3D9vjtsGleQ+O4CWie/II746UlGT8+OOPsqNYFJYpAQCmfPwxNBUqQcvzSonoPpx8KsElpCU+nvoJCgoKZMexGCxTwrFjx7B2zRq4NHseCqWD7DhEZOHcwnvi8sULWLFihewoFoNlSpg69ROoPXzhUq+t7ChEZAXUAbWgrdEE//dxDHipgttYpnbu4sWLWPrTUmibdIPCwUl2HCKyEm7hPXD8aAJ+++032VEsAsvUzn322Wdw0LjCtVGU7ChEZEXUlevDuVIdfPR/U7h1CpapXUtJScF338+HtvHT/GYYInooCoUCruE9EP/nXuzatUt2HOlYpnbs559/Rn5BPtwad5YdhYiskHPNZtB4B2H+/Pmyo0jHMrVjCxYugnONpnDQesiOQkRWSKFQQl0nAstXroRer5cdRyqWqZ06c+YMDh3YD22dNrKjEJEVc6nbBjlZWVi3bp3sKFKxTO3UkiVL4KjRwrlWc9lRiMiKOXlXhHPFECxavFh2FKlYpnZICIEFCxdBXbsllE5q2XGIyMppQiPw+++/49atW7KjSMMytUP79u3DpQvn4VK3jewoRGQDXOq0gtEo7PqKSCxTO7Ro0SKo3CtAU6WB7ChEZAMcXLzgXL0xfly4SHYUaVimdiY/Px8//bwMmtDWvA4vEZUa5zoR+HPvHly4cEF2FClYpnZm8+bNSL11k7t4iahUaWu3gKPaGUuXLpUdRQqWqZ1ZtGgxNH7V4ORXXXYUIrIhSpUG6lrhWLBwkV1eXpBlakcyMzOxavVqaOpE8AvAiajUudRti7OnT+Hw4cOyo5Q7lqkdWb16NfJy9XCpEyE7ChHZIE21MKhcvbDYDs85ZZnakYWLFkNbpT4cPfxkRyEiG6RQOkAd8iQWLVmKwsJC2XHKFcvUTty6dQtbY7dAw8sHElEZcqnbBjeTk7Bjxw7ZUcoVy9RO7NixA0ajEc41msiOQkQ2TBVYGypXD2zbtk12lHLFMrUT27Ztg8YnCI7uvrKjEJENUyiUcKxYD1tit8qOUq5YpnZiS+w2OFasLzsGEdkBdeUG2L9vH3JycmRHKTcsUztw8+ZNnDh+FGpePpCIyoGmSgMUFORj7969sqOUG5apHSgaCKCpzC1TIip7ThWqQOXigbi4ONlRyg3L1A7ExcXxeCkRlRuFQgnHSvUQu9V+BiGxTO0Aj5cSUXnTVGloV8dNWaY2jsdLiUgGdWX7Om7KMrVx27dvB8DjpURUvoqOm9rL+aYsUxvH46VEJINCoYBjpfp2c9yUZWrjtmzl8VIikkNTpQEO7N+P7Oxs2VHKHMvUhqWkpODk8WM8XkpEUtjTcVOWqQ373/mlLFMiKn9OFapA5eppF+ebskxt2I4dO/45XlpBdhQiskMKhQKOFethW9x22VHKHMvUhh09dgxKn2qyYxCRHXPyq45jx4/LjlHmWKY27OTJ03D0DpIdg4jsmJNXRWSkpSI1NVV2lDLFMrVRer0e169dgZNXRdlRiMiOOXnf/gw6c+aM5CRli2Vqo86ePQsAcPRmmRKRPI5egQCA06dPS05StlimNqrojevEMiUiiZQqZ6g9fFmmZJ1Onz4NJ2c3KJ3dZUchIjvn4BnEMiXrdPr0aTh5B0GhUMiOQkR2TukViOMnTsmOUaZYpjbqxMlTUHhyJC8RyefkVRFnz56BEEJ2lDLDMrVRp06fhqMXy5SI5HP0rohcfQ6uX78uO0qZYZnaoNTUVKSn3uLgIyKyCEWfRbZ83JRlaoOKzudimRKRJXD08IdC6cAyJetS9Iblbl4isgQKB0dovANZpmRdTp8+DbVHBShVzrKjEBEBABQegTh5ynZH9LJMbdDp06fh4BkoOwYRkYmDV5BNnx7DMrVB167fgMLFR3YMIiITRzcfpCQnyY5RZlimNihDlwkFd/ESkQVRqLTQ52Tb7LmmLFMblJmZyeOlRGRRlCoNjEYjcnJyZEcpEyxTG5SdlcUtUyKyKEWfSVlZWZKTlA2WqQ3KzuaWKRFZlqLPpMzMTMlJygbL1MYYjUboc3KgcNLIjkJEZKJw4pYpWZHs7GwA4JYpEVkUbpmSVSn6rU+h1kpOQkT0PwrV7b1lLFOyCkVvVCV38xKRBVGqbv+Cz928ZBWKypSjeYnIkiic1AC4ZWox5syZg2rVqkGj0SA8PBz79u277/wrVqxAaGgoNBoNGjRogN9++62ckspR9Fsfj5kSkSVRKB3goNJwy9QSLFu2DCNHjsTEiRNx6NAhNGrUCFFRUUhOTr7r/Hv27EHfvn3xyiuv4PDhw+jWrRu6deuGo0ePlnPy8sMtUyKyVI5qLbdM/61du3aYNGnSHdPT0tLQrl07s0Pdy/Tp0zFo0CAMHDgQdevWxdy5c6HVajF//vy7zj9r1ix06tQJo0ePRp06dfDRRx/hsccew5dffllmGWXjlikRWSqlSsMy/be4uDh8+eWX6Natm+lUDAAwGAzYvn17qYX7N4PBgIMHDyIyMtI0TalUIjIyEnv37r3rMnv37i02PwBERUXdc35bYNoy/ef4BBGRpVConLmb97+2bNmCxMREPP7447h48WIpRrq7mzdvorCwEP7+/sWm+/v7IzEx8a7LJCYmPtT8AJCXlwedTlfsZk1ycnLg4KSGQmFVe/CJyA4IhRIFBQWyY5SJR/7EDQwMxPbt29GgQQM0a9YMcXFxpRhLnpiYGHh4eJhulStXlh3poTg7O6OwwGCz38xARNZLIQQcHBxkxygTj1SmCoUCAKBWq7F06VK89dZb6NSpE7766qtSDfdvFSpUgIODA5KSin8fXlJSEgICAu66TEBAwEPNDwDjxo1DRkaG6XblyhXzw5cjNzc3QAiI/FzZUYiIihH5+tufUTbokcr0v1s948ePx5IlS/D555+XSqi7UalUaNKkCWJjY03TjEYjYmNj0aJFi7su06JFi2LzA8DmzZvvOT9w+xcEd3f3YjdrUvRGFQaWKRFZFmOeHq6urrJjlAnHR1nowoUL8PX1LTate/fuCA0NxYEDB0ol2N2MHDkSAwYMQNOmTdG8eXPMnDkT2dnZGDhwIAAgOjoaFStWRExMDADgrbfeQkREBD7//HN06dIFP//8Mw4cOIBvv/22zDLKVvRGNRpy4AAvyWmIiP6n0GC7W6aPVKZVq1a96/R69eqhXr16ZgW6n969eyMlJQUTJkxAYmIiwsLCsHHjRtMgo8uXL0Op/N/GdsuWLbF06VKMHz8e7733HmrXro3Vq1ejfv36ZZZRtqI3qtGgl5yEiOh/hDCigFumlmPo0KEYOnToXe+72yConj17omfPnmWcynIUvVF5zJSILEnRoSdb3TLl+RM2hlumRGSJij6TWKZkFUxbpixTIrIgRZ9Jtrqbl2VqY/43AIllSkSWw5jP3bxkRZRKJZy1Wm6ZEpFFEYYcANwyJSuidXHllikRWRQjByCRtXF1deWWKRFZFMEBSGRtXF25ZUpElsVo0EOhUECr1cqOUiZYpjbIw92dW6ZEZFGEQQ9nrYvp2u62hmVqgwIDAiBy0mTHICIyKcxKRQVfP9kxygzL1AaFhATDmH5ddgwiIpOCtGuoWydEdowywzK1QcHBwchNTzGNniMikk1k3EBoCMuUrEhwcDAAoIBbp0RkAYSxELmp102fTbaIZWqDit6w+aksUyKSryAjCaKwkGVK1sXHxwcenl4oSL0mOwoRkemziGVKVic4OBj5aSxTIpIvP/U61BpnVKxYUXaUMsMytVF1QkMg0m/IjkFEhPy0a6hRsxaUStutHNt9ZXaOW6ZEZCmMaddRN9R2R/ICLFObFRwcjPxsHQr1OtlRiMjOGdOvIyTEdo+XAixTm2U6PYaDkIhIImN+LnLTk1G7dm3ZUcoUy9RG1apVCwBPjyEiuQrSbo/dsOWRvADL1Ga5uLggILAij5sSkVT5dnBaDMAytWkhIcHczUtEUhWkXYe7hyd8fHxkRylTLFMbVr9eXYhbl2THICI7Zki+gDp16tjsV68VYZnasFatWkF/8yoKslJlRyEiOySEQOH1Y2gT0Vp2lDLHMrVhERERAIC8ywmSkxCRPSpIvYY8XSratGkjO0qZY5nasICAANSqHYLcKyxTIip/uVcSoHRwwBNPPCE7Spljmdq4DpHtUHjtmOwYRGSH8i4noEmTpnBzc5MdpcyxTG1cmzZtoE+5wuOmRFSuhBDIv3oU7du1lR2lXLBMbRyPmxKRDAWpV2HItI/jpQDL1Ob5+/ujVnAoj5sSUbnKvWw/x0sBlqld6NC+LY+bElG5yr1y+3ipq6ur7CjlgmVqB0zHTTNvyY5CRHZACIGCq8fs5ngpwDK1C0XHLPKuHJUbhIjsQtHx0rZtWaZkQ/z8/BAcUge5HIREROUg93ICHBwd0bJlS9lRyg3L1E5Etm+LwmvcMiWispd7OQGP2dHxUoBlajfatGlz+zq9PG5KRGXo9vHSo4i0o+OlAMvUbkREREChUCD3wkHZUYjIhuUnn4chK82ujpcCLFO74efnh9YRbaA/sUN2FCKyYdnH4uDtU8FuLtZQhGVqR6L7v4icS3+hIPOm7ChEZIOEsRB5p3aib5/ecHJykh2nXLFM7Uj37t3h5KRCDrdOiagM5F5OQJ7uJvr37y87SrljmdoRDw8PPPPM08g9sV12FCKyQdnH4lC1eg00b95cdpRyxzK1M9H9+0OfeA6GlEuyoxCRDTHm5yHv7B68FN0fCoVCdpxyxzK1M0899RTcPTyRfTxOdhQisiH6s/tQkJuDfv36yY4iBcvUzqhUKvTp3Qt5J7dDCKPsOERkI/Qn4vBY02aoXbu27ChSsEztUP/+/ZGXnoy8q8dlRyEiG1Co1yHn/AG8FG1/A4+KsEztUMuWLVGxchVkH4uTHYWIbEDOyV1QAOjdu7fsKNKwTO2QUqnEgP4vIu/0LoiCfNlxiMjK5Z6IQ4cOHeDn5yc7ijQsUzvVr18/5OuzoD9/QHYUIrJi+emJyLlyHP1ffFF2FKlYpnaqbt26aNAoDDkc1UtEZsg5vh3OWi26desmO4pULFM79lJ0f+jP7UNhbpbsKERkhYQQyD25Hc8/9zxcXFxkx5GKZWrHXnjhBTgoFMg6slF2FCKyQrkXDyM35TJefnmg7CjSsUztWEBAAAYMiEbOoTUw5ufJjkNEViYrfiUaP9bE7r5u7W5YpnZuzJgxKMjOQPbRWNlRiMiK5F07iZxLf2P8++/Z5eUD/4tlaudq1aqF7j16IHv/Kghjoew4RGQlMuNXoFZwiN0PPCrCMiW8N24c8tJuIJtfzUZEJWBIuYjsM/F4f9xYKJWsEYBlSgDCwsIQ1akTsvf9wuv1EtED6eJXIrBiJbzwwguyo1gMlikBAN5/7z3kJl+E/tx+2VGIyILlpyci58ROjH13NFQqlew4FoNlSgCAVq1a4fEWLZEVvxJCCNlxiMhC6fb9Ck9PT7z66quyo1gUlimZjH//PeivnkDelaOyoxCRBSrMSkNOwhaMGvk2tFqt7DgWhWVKJp07d0a9+g2QGb9SdhQiskC6A2ug0ajw5ptvyo5icVimZKJQKPD+e+OQc/4g8hLPyo5DRBbEmJuFnL9+w9A33oCnp6fsOBaHZUrF9OzZE1WqVUdm/ArZUYjIgmQe/g0KYyHefvtt2VEsEsuUinF0dMR7Y8cg+9Qe5N+6KjsOEVkAY34ucg6txcsDX0JAQIDsOBbJaso0NTUV/fr1g7u7Ozw9PfHKK68gK+v+33bSpk0bKBSKYrfXX3+9nBJbrwEDBiAgMAgZOxbIjkJEFkAX/wuMudkYM2aM7CgWy2rKtF+/fjh27Bg2b96M9evXY8eOHRg8ePADlxs0aBBu3Lhhun366aflkNa6aTQazJ45A9mn/+R5p0R2Lj/tBjLjf8E774xC9erVZcexWI6yA5TEiRMnsHHjRuzfvx9NmzYFAHzxxRfo3Lkzpk2bhqCgoHsuq9VquVviEfTo0QNt2rbD3q3zoKnaCApHnpxNZI8yts5DgL8fxo8fLzuKRbOKLdO9e/fC09PTVKQAEBkZCaVSifj4+Psuu2TJElSoUAH169fHuHHjkJOTc9/58/LyoNPpit3skUKhwFdzvkSBLhkZ8b/IjkNEEuScjUf22X2YPWum3X/594NYRZkmJibCz8+v2DRHR0d4e3sjMTHxnsu98MILWLx4MbZt24Zx48Zh0aJFePHFF+/7XDExMfDw8DDdKleuXCqvwRrVqVMHI99+G1nxK1GQkSQ7DhGVI2N+HnRbv0NkZAc8//zzsuNYPKllOnbs2DsGCP33dvLkyUd+/MGDByMqKgoNGjRAv379sHDhQqxatQrnzp275zLjxo1DRkaG6XblypVHfn5bMGHCBFSo4IP0rfNkRyGicqSL/wWFmTcxZ86X/L7SEpB6zHTUqFF46aWX7jtPjRo1EBAQgOTk5GLTCwoKkJqa+lDHQ8PDwwEAZ8+eRc2aNe86j1qthlqtLvFj2jpXV1fMnjkDvXv3hsu5/XCu2Ux2JCIqY/npiciMX4nRo0YiODhYdhyrILVMfX194evr+8D5WrRogfT0dBw8eBBNmjQBAGzduhVGo9FUkCVx5MgRAEBgYOAj5bVXPXv2xFdfz8WfHIxEZBcyts6Dv78fPvjgA9lRrIZVHDOtU6cOOnXqhEGDBmHfvn3YvXs3hg4dij59+phG8l67dg2hoaHYt28fAODcuXP46KOPcPDgQVy8eBFr165FdHQ0WrdujYYNG8p8OVZHoVDg66/m3B6MtO9X2XGIqAzlnN2H7DPxmD1zBgcdPQSrKFPg9qjc0NBQtG/fHp07d8aTTz6Jb7/91nR/fn4+Tp06ZRqtq1KpsGXLFnTs2BGhoaEYNWoUunfvjnXr1sl6CVatTp06eHvECGT9uYKDkYhslCgwQLdtHtq1j0T37t1lx7EqCsEvr7wvnU4HDw8PZGRkwN3dXXYcqTIzM1E7JBRZblVR4bn3ZccholKWvvsnZP+5HEePJiAkJER2HOke5vPfarZMST43NzfMmjEd2af3Qn/ugOw4RFSK8tMTkRW/EiNHvs0ifQQsU3oovXr1QkSbtsiI/QbGvGzZcYioFAhhRPrmr+DrW4GDjh4Ry5QeikKhwPzvv4NjQRZSN30JHiUgsn66+F+Rc/4QfvxhPlxdXWXHsUosU3poNWrUwPzvvkP2iZ3I+muT7DhEZIbcqyeQsXMRxo4di44dO8qOY7VYpvRIevXqhddeew0ZW+fBkHJRdhwiegSF+kykb/gM4eHh+Oijj2THsWosU3pkM2bMQGhIMNLWfQKjIVd2HCJ6CEIIpG2cBbUwYNnPP8HR0Sq+RMxisUzpkTk7O2PliuVA1i2kbZkrOw4RPYTMg+uQffpPLFr4I6pUqSI7jtVjmZJZQkND8c3cr5GVsAVZR2NlxyGiEsi7cQYZcfPx1ltv4dlnn5UdxyawTMls0dHRiI4egIwtc5F/y76/ZYfI0hnzspG2/lM0atQIn376qew4NoNlSqVizpwvUa1qFaSu+wzG/DzZcYjoLoQQSN30JRzzs7Bi+TKoVPzSitLCMqVS4erqil9WLIcx/TrStn4nOw4R3UXWX5uQfWIn5n/33T2/hpIeDcuUSk3Dhg3xxexZyDryO7JP7pIdh4j+xZByERlb5+G1115Dr169ZMexOSxTKlWDBg1Cz169kL7pC+Sn3ZAdh4gAGA16pK37BKEhwZgxY4bsODaJZUqlSqFQ4Lt581ApKACpv05GYU6G7EhEdk0UFuDW2k+gzEnFyhXL4ezsLDuSTWKZUqlzd3fH5k0boRV63PplMi/oQCSJEEak/j4Lhkt/YfWqVQgNDZUdyWaxTKlM1KpVC39s2ghFxlXcWhMDUVggOxKR3UmPW4CsY9uwaNFCdOjQQXYcm8YypTLTpEkTrFm9GobLf+PW77MghFF2JCK7odv3K3T7fsWsWbPQp08f2XFsHsuUylRkZCQWL16EnONxSI9bIDsOkV3IOrYNadvmY+zYsRg+fLjsOHaBVzamMte7d28kJydj+PDhUGo94RH+vOxIRDZLf/4g0n6fiYEDB+Ljjz+WHcdusEypXAwbNgw3btxATEwMHFw84Vq/nexIRDYn7/op3FoTg05RnfDtt99CoVDIjmQ3WKZUbqZMmYLExET8uHAWHJzd4VyzqexIRDYj/9ZV3Pp1Mpo+1hgrViznV6qVMx4zpXKjUCjw7bff4qmnnsKttVORd/2U7EhENqEg8yZurZyAGpWD8NuG9dBqtbIj2R2WKZUrR0dHLF+2DM2aPIZbv07mt8wQmcmYm4VbKz+Et4sKWzb/AW9vb9mR7BLLlMqdVqvFhvXrUKNKRdxaOREFGUmyIxFZJWNeDm7++hHUhgzEbv4DlSpVkh3JbrFMSQpvb29s+WMT/D1dkLL0XRiSL8iORGRVCrPTcXPZ+1CmX8bvv21AnTp1ZEeyayxTkqZSpUqI37sHIdUqIeXncci9clR2JCKrkJ+eiJSfxsC1UIddO3agRYsWsiPZPZYpSRUQEIBdO3fgifBmSFk+ATmn98qORGTRDEnncXPpuwj00ODPvXsQFhYmOxKBZUoWwN3dHZs2/o7nuj2Lm6tjkHlko+xIRBYp9/LfSPl5HOrWqob4vXtQo0YN2ZHoHyxTsghqtRrLfv4ZQ4a8jtRNXyJ9908QQsiORWQxsk/tRsqKiWjV8nHs2B4HPz8/2ZHoX3hWL1kMBwcHfPnllwgMDMQHH3wAY046vNoPhkLpIDsakVSZh39D6uav0atXLyxauBAqlUp2JPoPlilZFIVCgfHjx8Pf3x+vv/46jDkZ8OkyCgpHJ9nRiMqdEAIZu5ciY/dPGDZsGGbOnAmlkjsULRH/VcgiDRo0CL/88gsM5/fj5i8fwpiXIzsSUbkSxkKk/jEHGbt/QkxMDGbNmsUitWD8lyGL1a1bN2zZ/AeUqReQ8vM4FGalyY5EVC5EgQG31n6CnITN+P777zF27FhetN7CsUzJorVu3Rp7du2Cu8hGytJ3kZd4VnYkojJVoLuJlOXjkX/xEFavWoWXX35ZdiQqAZYpWbwGDRpgX/yfqFMtEMmL34HuwFqO9CWblHNuP5IXvgWPwgzEbduKZ555RnYkKiGWKVmFqlWr4s+9ezBs6JtIi/0Wt1Z/jEJ9puxYRKVCFOYjbev3SFk5CR0insTRv//iVY2sDMuUrIZarcbMmTOxZs0aOCSdQMrCt5B37YTsWERmuX1pwLHIObwe06dPx/r16+Dj4yM7Fj0klilZnWeffRYJf/+FsNCaSFo6Fhl/roQQRtmxiB5a9qndSF44AhUc87B79y68/fbbHGhkpVimZJWqVKmCnTu2493R7yB9+wLcXDkJhdnpsmMRlYgoMCB189e4uToGz3aOwt9HDqN58+ayY5EZWKZktZycnDB16lRs3LgRmoxLSF74FnIv/y07FtF95adeQ8qS0cg9ugVfffUVVq5YAU9PT9mxyEwsU7J6UVFRSPj7LzzeuAGSfx6P9F1LIYyFsmMR3SH7eBySF76NQFcl9sX/iSFDhnC3ro1gmZJNCAoKwtbYLfjww4nQ7f0ZN5dPQEHmLdmxiAAARkMubv0+GzfXTUOvHs/hyKGD/Oo0G8MyJZvh4OCACRMmYGtsLFxzk5A0/w3o9q/hVipJI4RAzqk9SJ7/BgrO7MIPP/yAxYsWwc3NTXY0KmUsU7I5bdq0wYnjx/DqS/2Rvu07JC8cgdwrR2XHIjuTn3oNN1dORMrqj9HuiaY4mvA3XnrpJe7WtVEsU7JJ3t7e+Prrr7F//37Ur+KLpKVjcXP95yjISpUdjWyc0ZCLtO0/InH+m/ApuIW1a9fitw0bULNmTdnRqAyxTMmmNWnSBPF/7sV3330H1Y2/kfT969z1S2VCCHH7vNH5b0B/aC0+GP8+Tp08wUsC2gmF4EVO70un08HDwwMZGRlwd3eXHYfMkJqaivfffx/ffPMN1L5V4RH5OjSV68uORTYgP/Ua0mO/Qc75Q+jcuQtmz57FLVEb8DCf/9wyJbtRbNdvVb9/dv1O465femTFdukWpmLt2rXYsGE9i9QOsUzJ7hTt+v3++++hupHwz67f1RCFBbKjkZUw7dL94fYu3QkfjMepE8e5S9eOcTfvA3A3r21LTU3F+PHjMXfuXKh9q8D18d7QhjwBhdJBdjSyQEII5F1JQObeZci5+Be6dHkas2fPQo0aNWRHozLA3bxEJeTt7Y2vvvoKBw4cQMsGtXFz7adInv8GMo9shCjIlx2PLIQQRuSciUfKktFI+uk9VHM1Yt26dVi/fh2LlABwy/SBuGVqXw4cOICPY2KwetUqOLn5wKXJs3ANewpKlbPsaCSBMBYi+8QOZO9bidzkS3i8RUuMf/89dO7cmeeL2oGH+fxnmT4Ay9Q+nTx5Ep988gkWLV4MpcoZ2rCn4db0GTg48z1gD4z5echO2ILsA6uQl5aIqE6d8P5776FVq1ayo1E5YpmWIpapfbt8+TKmTZuGb+d9hwKjgLZhFNybPQdH9wqyo1EZMOZlI/Pwb8g5tBYF2Rno3qMH3hs3jtfRtVMs01LEMiUASElJwezZszFr9hfIzs6Gtl47uId3h5N3RdnRqBQUZqdDd2ANcv76HYoCAwYMiMaYMWNQq1Yt2dFIIpZpKWKZ0r/pdDp88803+Gza50hJSYZLSEu4NIyCpmojjgC2MkIIGBLPICthC/RHY6FycsCQ11/HqFGjEBQUJDseWQCWaSlimdLd5Obm4scff8Rnn0/HuTOnoXLzhjqkFVzqtYXKvyYHp1iw/LQbyD4eh7yT25F78yoq+Pph2NA3MXToUHh7e8uORxaEZVqKWKZ0P0IIHDx4EIsWLcKSn37GrZRkaHyrQB3aGi5128DJM0B2RAJQmJOBnJM7oT+xHfqrJ6B1cUH357ujf/8X0bZtWzg6OsqOSBaIZVqKWKZUUgUFBYiNjcXixUvwy6+/QJ+TA22lutDUbQNt6JMcCVzOjPm50J+JR86J7dBfOAilQoGOHTsiun9/PPvss9BqtbIjkoVjmZYilik9iuzsbKxduxYLFy3CH3/8AQHAuUYTaOu0hXOt5lA6qWVHtEnCWIjcS3/f3o17Zi8K8nLQrHk4BkT3R69eveDr6ys7IlkRlmkpYpmSuZKTk7F8+XL8uHARDuzfB0eNFuoazaGp2hDqKg3h6OHPY6xmKMxOR+6Vo8i9/DcM5+Jh0N1CjVq1MaD/i+jXrx8vOk+PjGVailimVJrOnDmDpUuXYtWatUj46wiMRiM0Xv5wqFgPmsoNoK7SgOX6AP8rzwQUXjsKffIlAEDNWsHo/FQU+vfvj6ZNm3IdktlYpqWIZUplJT09Hbt27cK2bduwZes2JPx1BEIIlut/3Ks8a9Ssjfbt2qBt27Zo06YNAgMDJSclW2OTZTplyhRs2LABR44cgUqlQnp6+gOXEUJg4sSJmDdvHtLT0/HEE0/g66+/Ru3atUv8vCxTKi/p6enYuXMn4uLi7l2ulerC0TPAZs9pFcKIwsxbyLt+CnlXElBw9Rj0yRcBFC/PiIgIngtKZc4my3TixInw9PTE1atX8f3335eoTD/55BPExMTgxx9/RPXq1fHBBx8gISEBx48fh0ajKdHzskxJlrS0tGLlevTvvyCEgNLBEWqfICjcA+DoVRGO3hXh5B0ER6+KcHD1toqt2EJ9JgpSryE/7RryU6+jIPUaoLuBvFvXUGjIBQBUr1GrWHlWrMirTVH5sskyLbJgwQKMGDHigWUqhEBQUBBGjRqFd955BwCQkZEBf39/LFiwAH369CnR87FMyVKkpaXhwIEDOHPmDE6fPo2Tp07hxMnTuHr5IoxGIwDAUe0MlXdFwCMQTt7/FK1XEBy9gqDUuJZb0QohIAx6FGQkmsoyP+0aRPqN2wWarTPNGxBYESEhwagTGoLg4GAEBwcjLCyM5UnSPcznv82eqXzhwgUkJiYiMjLSNM3DwwPh4eHYu3fvPcs0Ly8PeXl5pp91Ot1d5yMqb15eXujQoQM6dOhQbLrBYMD58+dx+vRp0+3EyVM4dToOKXsS/zejQgFHlTMc1M5QqpyhUDkDThoIRw0Uqn+mOWmgVGmhUGlM8ygUShgNegiD/vaf+bkwGnL+mZYLRX4uUJAL5OtRmHd7noI8PYSx0PTU7h6eqBMSgrqPNUNwcD9TadaqVQsuLi7ltQqJyozNlmli4u0PEX9//2LT/f39TffdTUxMDCZNmlSm2YhKk0qlQmhoKEJDQ++4LzMzE2fOnMHZs2eRnp6OrKwsZGZmIjMz819/z0KGTgdd5k1kZtz+OSf79q1oixcAtC4ucHFxg6ubK1xd3eDh4wZ3twpwd3eDq6sr3Nzc4OZW/O81atRAcHAwfHx8ynOVEJU7qWU6duxYfPLJJ/ed58SJE3f9kCgr48aNw8iRI00/63Q6VK5cudyen6g0ubm54bHHHsNjjz320MsKIZCbm4vCwkJotVoolcoySEhkG6SW6ahRo/DSSy/dd54aNWo80mMHBNy+JmpSUlKxIfNJSUn3/W5CtVoNtZpXpyFSKBRwdnaWHYPIKkgtU19f3zK7vFf16tUREBCA2NhYU3nqdDrEx8djyJAhZfKcRERkn6xmv83ly5dx5MgRXL58GYWFhThy5AiOHDmCrKws0zyhoaFYtWoVgNu/VY8YMQL/93//h7Vr1yIhIQHR0dEICgpCt27dJL0KIiKyRVYzAGnChAn48ccfTT83btwYALBt2za0adMGAHDq1ClkZGSY5nn33XeRnZ2NwYMHIz09HU8++SQ2btxY4nNMiYiISsLqzjMtbzzPlIjIPj3M57/V7OYlIiKyVCxTIiIiM7FMiYiIzMQyJSIiMhPLlIiIyEwsUyIiIjOxTImIiMzEMiUiIjITy5SIiMhMLFMiIiIzsUyJiIjMxDIlIiIyE8uUiIjITCxTIiIiM7FMiYiIzMQyJSIiMhPLlIiIyEwsUyIiIjOxTImIiMzEMiUiIjITy5SIiMhMLFMiIiIzsUyJiIjMxDIlIiIyE8uUiIjITCxTIiIiM7FMiYiIzMQyJSIiMhPLlIiIyEwsUyIiIjOxTImIiMzEMiUiIjITy5SIiMhMLFMiIiIzsUyJiIjMxDIlIiIyE8uUiIjITI6yA1g6IQQAQKfTSU5CRETlqehzv6gH7odl+gCZmZkAgMqVK0tOQkREMmRmZsLDw+O+8yhESSrXjhmNRly/fh1ubm5QKBSy4zyQTqdD5cqVceXKFbi7u8uOY7G4nkqG66lkuJ5KxtrWkxACmZmZCAoKglJ5/6Oi3DJ9AKVSiUqVKsmO8dDc3d2t4s0qG9dTyXA9lQzXU8lY03p60BZpEQ5AIiIiMhPLlIiIyEwsUxujVqsxceJEqNVq2VEsGtdTyXA9lQzXU8nY8nriACQiIiIzccuUiIjITCxTIiIiM7FMiYiIzMQytQFTpkxBy5YtodVq4enpWaJlhBCYMGECAgMD4ezsjMjISJw5c6Zsg0qWmpqKfv36wd3dHZ6ennjllVeQlZV132XatGkDhUJR7Pb666+XU+LyMWfOHFSrVg0ajQbh4eHYt2/ffedfsWIFQkNDodFo0KBBA/z222/llFSuh1lPCxYsuON9o9FoyjGtHDt27MAzzzyDoKAgKBQKrF69+oHLxMXF4bHHHoNarUatWrWwYMGCMs9ZFlimNsBgMKBnz54YMmRIiZf59NNPMXv2bMydOxfx8fFwcXFBVFQUcnNzyzCpXP369cOxY8ewefNmrF+/Hjt27MDgwYMfuNygQYNw48YN0+3TTz8th7TlY9myZRg5ciQmTpyIQ4cOoVGjRoiKikJycvJd59+zZw/69u2LV155BYcPH0a3bt3QrVs3HD16tJyTl6+HXU/A7QsT/Pt9c+nSpXJMLEd2djYaNWqEOXPmlGj+CxcuoEuXLmjbti2OHDmCESNG4NVXX8WmTZvKOGkZEGQzfvjhB+Hh4fHA+YxGowgICBCfffaZaVp6erpQq9Xip59+KsOE8hw/flwAEPv37zdN+/3334VCoRDXrl2753IRERHirbfeKoeEcjRv3ly8+eabpp8LCwtFUFCQiImJuev8vXr1El26dCk2LTw8XLz22mtlmlO2h11PJf2/aMsAiFWrVt13nnfffVfUq1ev2LTevXuLqKioMkxWNrhlaocuXLiAxMREREZGmqZ5eHggPDwce/fulZis7Ozduxeenp5o2rSpaVpkZCSUSiXi4+Pvu+ySJUtQoUIF1K9fH+PGjUNOTk5Zxy0XBoMBBw8eLPY+UCqViIyMvOf7YO/evcXmB4CoqCibfd8Aj7aeACArKwtVq1ZF5cqV0bVrVxw7dqw84loVW3o/8dq8digxMREA4O/vX2y6v7+/6T5bk5iYCD8/v2LTHB0d4e3tfd/X/MILL6Bq1aoICgrC33//jTFjxuDUqVP49ddfyzpymbt58yYKCwvv+j44efLkXZdJTEy0q/cN8GjrKSQkBPPnz0fDhg2RkZGBadOmoWXLljh27JhVXuu7rNzr/aTT6aDX6+Hs7Cwp2cPjlqmFGjt27B0DGP57u9d/ZHtS1utp8ODBiIqKQoMGDdCvXz8sXLgQq1atwrlz50rxVZCtadGiBaKjoxEWFoaIiAj8+uuv8PX1xTfffCM7GpURbplaqFGjRuGll1667zw1atR4pMcOCAgAACQlJSEwMNA0PSkpCWFhYY/0mLKUdD0FBATcMVikoKAAqamppvVREuHh4QCAs2fPombNmg+d15JUqFABDg4OSEpKKjY9KSnpnuskICDgoea3BY+ynv7LyckJjRs3xtmzZ8siotW61/vJ3d3dqrZKAZapxfL19YWvr2+ZPHb16tUREBCA2NhYU3nqdDrEx8c/1IhgS1DS9dSiRQukp6fj4MGDaNKkCQBg69atMBqNpoIsiSNHjgBAsV9CrJVKpUKTJk0QGxuLbt26Abj9/b2xsbEYOnToXZdp0aIFYmNjMWLECNO0zZs3o0WLFuWQWI5HWU//VVhYiISEBHTu3LkMk1qfFi1a3HFqldW+n2SPgCLzXbp0SRw+fFhMmjRJuLq6isOHD4vDhw+LzMxM0zwhISHi119/Nf08depU4enpKdasWSP+/vtv0bVrV1G9enWh1+tlvIRy0alTJ9G4cWMRHx8vdu3aJWrXri369u1ruv/q1asiJCRExMfHCyGEOHv2rJg8ebI4cOCAuHDhglizZo2oUaOGaN26tayXUOp+/vlnoVarxYIFC8Tx48fF4MGDhaenp0hMTBRCCNG/f38xduxY0/y7d+8Wjo6OYtq0aeLEiRNi4sSJwsnJSSQkJMh6CeXiYdfTpEmTxKZNm8S5c+fEwYMHRZ8+fYRGoxHHjh2T9RLKRWZmpunzB4CYPn26OHz4sLh06ZIQQoixY8eK/v37m+Y/f/680Gq1YvTo0eLEiRNizpw5wsHBQWzcuFHWS3hkLFMbMGDAAAHgjtu2bdtM8wAQP/zwg+lno9EoPvjgA+Hv7y/UarVo3769OHXqVPmHL0e3bt0Sffv2Fa6ursLd3V0MHDiw2C8cFy5cKLbeLl++LFq3bi28vb2FWq0WtWrVEqNHjxYZGRmSXkHZ+OKLL0SVKlWESqUSzZs3F3/++afpvoiICDFgwIBi8y9fvlwEBwcLlUol6tWrJzZs2FDOieV4mPU0YsQI07z+/v6ic+fO4tChQxJSl69t27bd9bOoaN0MGDBARERE3LFMWFiYUKlUokaNGsU+p6wJvzWGiIjITBzNS0REZCaWKRERkZlYpkRERGZimRIREZmJZUpERGQmlikREZGZWKZERERmYpkSERGZiWVKRERkJpYpERGRmVimREREZmKZElExKSkpCAgIwMcff2yatmfPHqhUKsTGxkpMRmS5eKF7IrrDb7/9hm7dumHPnj0ICQlBWFgYunbtiunTp8uORmSRWKZEdFdvvvkmtmzZgqZNmyIhIQH79++HWq2WHYvIIrFMieiu9Ho96tevjytXruDgwYNo0KCB7EhEFovHTInors6dO4fr16/DaDTi4sWLsuMQWTRumRLRHQwGA5o3b46wsDCEhIRg5syZSEhIgJ+fn+xoRBaJZUpEdxg9ejRWrlyJv/76C66uroiIiICHhwfWr18vOxqRReJuXiIqJi4uDjNnzsSiRYvg7u4OpVKJRYsWYefOnfj6669lxyOySNwyJSIiMhO3TImIiMzEMiUiIjITy5SIiMhMLFMiIiIzsUyJiIjMxDIlIiIyE8uUiIjITCxTIiIiM7FMiYiIzMQyJSIiMhPLlIiIyEwsUyIiIjP9PySICVygBUTTAAAAAElFTkSuQmCC\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 object 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.intersections(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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Box.html) and contain these methods as well, which can come in handy when doing validation.\n", "\n", "### Structures\n", "\n", "The new version of tidy3d redefines the notion of [Structure](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Structure.html) as something that simply contains a [Geometry](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.components.geometry.Geometry.html) and a [Medium](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.components.medium.AbstractMedium.html). Therefore, the call structure is a bit different." ] }, { "cell_type": "code", "execution_count": 11, "id": "07727a55", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.302074Z", "iopub.status.busy": "2023-02-03T01:46:34.301905Z", "iopub.status.idle": "2023-02-03T01:46:34.308970Z", "shell.execute_reply": "2023-02-03T01:46:34.308551Z" } }, "outputs": [ { "data": { "text/html": [ "
[19:46:34] INFO     3 validation errors for Structure                                               4244360487.py:7\n",
       "                    geometry                                                                                       \n",
       "                      field required (type=value_error.missing)                                                    \n",
       "                    center                                                                                         \n",
       "                      extra fields not permitted (type=value_error.extra)                                          \n",
       "                    size                                                                                           \n",
       "                      extra fields not permitted (type=value_error.extra)                                          \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:34]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m \u001b[1;36m3\u001b[0m validation errors for Structure \u001b]8;id=31857;file:///var/folders/80/rm392zc51jz32327xblmmg2c0000gn/T/ipykernel_11210/4244360487.py\u001b\\\u001b[2m4244360487.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=683749;file:///var/folders/80/rm392zc51jz32327xblmmg2c0000gn/T/ipykernel_11210/4244360487.py#7\u001b\\\u001b[2m7\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m geometry \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m field required \u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[35mvalue_error\u001b[0m.missing\u001b[1m)\u001b[0m \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m center \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m extra fields not permitted \u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[35mvalue_error\u001b[0m.extra\u001b[1m)\u001b[0m \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m size \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m extra fields not permitted \u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[35mvalue_error\u001b[0m.extra\u001b[1m)\u001b[0m \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# old way\n", "try:\n", " dielectric_box = td.Structure(\n", " center=(0, 0, 0), size=(1, 1, 1), medium=td.Medium(permittivity=2.0)\n", " )\n", "except Exception as e:\n", " td.log.info(e)\n", "\n", "# new way\n", "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 work more or less similarly to the old version, with a few minor API changes.\n", "\n", "1. `PointDipole` and `VolumeSource` were combined into a single [VolumeSource](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.VolumeSource.html?highlight=volumesource) object. For a dipole, specify the `size=(0,0,0)`.\n", "\n", "2. Instead of specifying injection axis, plane wave, mode source, and gaussian beam sources must have a planar geometry (one size=0 element) and `direction` (`'+'` or `'-'`) specifying the direction along the normal axis to send the fields." ] }, { "cell_type": "code", "execution_count": 12, "id": "b06caa0b", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.311137Z", "iopub.status.busy": "2023-02-03T01:46:34.310974Z", "iopub.status.idle": "2023-02-03T01:46:34.314404Z", "shell.execute_reply": "2023-02-03T01:46:34.314009Z" } }, "outputs": [], "source": [ "# note the change in kwarg values\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", "Monitors have received some major changes in the new version.\n", "Before, monitors were split up according to whether they measured values in the time or frequency domain.\n", "\n", "- TimeMonitor\n", "\n", "- FreqMonitor\n", "\n", "The contents of the `store` argument told the solver what kind of data to load into the monitor data.\n", "\n", "In the new version, each monitor stores a single type of data and we have expanded the number of monitors.\n", "\n", "The following monitors measure their corresponding values in the frequency-domain\n", "\n", "- [FieldMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.FieldMonitor.html)\n", "\n", "- [FluxMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.FluxMonitor.html)\n", "\n", "- [ModeMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeMonitor.html)\n", "\n", "And the following measure their values in the time-domain\n", "\n", "- [FieldTimeMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.FieldTimeMonitor.html)\n", "\n", "- [FluxTimeMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.FluxTimeMonitor.html)\n", "\n", "This splitting up of monitor types means less accounting about what values are stored, and each monitor type has a corresponding data type in the simulation data.\n", "\n", "Otherwise, monitors function very similarly, with a few minor API changes.\n", "\n", "Note: all monitors must be *named* (have a `name` argument supplied). The data returned by the server will be indexed by the monitor name." ] }, { "cell_type": "code", "execution_count": 13, "id": "f37ac987", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.316509Z", "iopub.status.busy": "2023-02-03T01:46:34.316374Z", "iopub.status.idle": "2023-02-03T01:46:34.319765Z", "shell.execute_reply": "2023-02-03T01:46:34.319399Z" } }, "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", "Mode objects have also gone through major revisions.\n", "\n", "In the previous versions of Tidy3D, there were convenience functions for viewing mode profiles (`Simulation.viz_modes`), and ultimately the mode information needed to be set manually using `Simulation.set_mode()`.\n", "\n", "In the new version, we introduce a [ModeSpec](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeSpec.html) object that stores all of the specifiction needed for the mode solver to know which modes to inject or measure in the [ModeSource](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeSource.html) and [ModeMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeMonitor.html) objects.\n", "\n", "For example:" ] }, { "cell_type": "code", "execution_count": 14, "id": "86f4f9e1", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.321843Z", "iopub.status.busy": "2023-02-03T01:46:34.321689Z", "iopub.status.idle": "2023-02-03T01:46:34.324121Z", "shell.execute_reply": "2023-02-03T01:46:34.323712Z" } }, "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": 15, "id": "5b42e241", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.326421Z", "iopub.status.busy": "2023-02-03T01:46:34.326093Z", "iopub.status.idle": "2023-02-03T01:46:34.329783Z", "shell.execute_reply": "2023-02-03T01:46:34.329395Z" } }, "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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.plugins.ModeSolver.html) is designed to help users come up with the correct [ModeSpec](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeSpec.html) for their problem, at which point it can be used directly in [ModeSource](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeSource.html) and [ModeMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeMonitor.html) objects without setting it explicitly using a [Simulation](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Simulation.html) method. For more details, refer to the [mode solver tutorial notebook](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/notebooks/ModeSolver.html)." ] }, { "cell_type": "markdown", "id": "9de5a1b1", "metadata": {}, "source": [ "### Absorbing Boundaries\n", "\n", "Absorbing boundaries are defined a bit differently in the new version, there are three types of boundaries\n", "\n", "- [td.PML()](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.PML.html) defines a standard PML, with an adjustable number of layers.\n", "\n", "- [td.StablePML()](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.StablePML.html) defines a PML with 'stable' profile, which can reduce divergence at the expense of more layers.\n", "\n", "- [td.Absorber()](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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 lyers on the x, y, z sides of the simulation, one may use the convenience functions provided in [td.BoundarySpec()](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.BoundarySpec.html) and [td.Boundary()](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Boundary.html), as shown below.\n", "\n", "Periodic boundaries are always used on each side of the simulation, so if a boundary is not specified along a dimension, the simulation will be periodic in that direction." ] }, { "cell_type": "code", "execution_count": 16, "id": "bda9c2eb", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.331927Z", "iopub.status.busy": "2023-02-03T01:46:34.331783Z", "iopub.status.idle": "2023-02-03T01:46:34.334594Z", "shell.execute_reply": "2023-02-03T01:46:34.334191Z" }, "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, as before, [Simulation](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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", "Again, there are some minor API changes, but overall they look very similar.\n", "\n", "- [Simulation](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Simulation.html) accepts an optional `medium` parameter, specifying the background medium (air by default).\n", "\n", "- `mesh_step` and `resolution` were removed in favor of 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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/notebooks/AutoGrid.html)." ] }, { "cell_type": "code", "execution_count": 17, "id": "11cf6c24", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.336613Z", "iopub.status.busy": "2023-02-03T01:46:34.336460Z", "iopub.status.idle": "2023-02-03T01:46:34.340007Z", "shell.execute_reply": "2023-02-03T01:46:34.339621Z" }, "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(x=td.Boundary.periodic(), y=td.Boundary.pml(), z=td.Boundary.periodic()),\n", " structures=[dielectric_box],\n", " sources=[dipole],\n", " monitors=[mon1, mon2],\n", ")\n" ] }, { "cell_type": "markdown", "id": "09dba7ad", "metadata": {}, "source": [ "A defined [Simulation](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Simulation.html) also provides several useful methods in addition to the ones inhereted from [Box](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Box.html)." ] }, { "cell_type": "code", "execution_count": 18, "id": "c9ccd22a", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.342106Z", "iopub.status.busy": "2023-02-03T01:46:34.341932Z", "iopub.status.idle": "2023-02-03T01:46:34.747819Z", "shell.execute_reply": "2023-02-03T01:46:34.747389Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x=(-1.9, -1.7000000000000002, -1.5, -1.2999999999999998, -1.1, -0.8999999999999999, -0.6999999999999998, -0.4999999999999999, -0.29999999999999993, -0.09999999999999998, 0.10000000000000009, 0.30000000000000027, 0.5000000000000002, 0.7000000000000002, 0.9000000000000001, 1.1, 1.3000000000000003, 1.5000000000000002, 1.7000000000000002, 1.9000000000000001) y=(-4.299999999999999, -4.1, -3.8999999999999995, -3.6999999999999997, -3.4999999999999996, -3.3, -3.0999999999999996, -2.9, -2.6999999999999997, -2.5, -2.3, -2.1, -1.9, -1.7000000000000002, -1.5, -1.2999999999999998, -1.1, -0.8999999999999999, -0.6999999999999998, -0.4999999999999999, -0.29999999999999993, -0.09999999999999998, 0.10000000000000009, 0.30000000000000027, 0.5000000000000002, 0.7000000000000002, 0.9000000000000001, 1.1, 1.3000000000000003, 1.5000000000000002, 1.7000000000000002, 1.9000000000000001, 2.0999999999999996, 2.3, 2.499999999999999, 2.6999999999999993, 2.8999999999999986, 3.0999999999999988, 3.299999999999998, 3.4999999999999982, 3.6999999999999975, 3.8999999999999977, 4.099999999999998, 4.299999999999997) z=(-1.9, -1.7000000000000002, -1.5, -1.2999999999999998, -1.1, -0.8999999999999999, -0.6999999999999998, -0.4999999999999999, -0.29999999999999993, -0.09999999999999998, 0.10000000000000009, 0.30000000000000027, 0.5000000000000002, 0.7000000000000002, 0.9000000000000001, 1.1, 1.3000000000000003, 1.5000000000000002, 1.7000000000000002, 1.9000000000000001) type='Coords'\n" ] }, { "data": { "image/png": "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iv/+jjvuYADYAw88wBhj7J133mEA2OOPPy5Yj1tvvZUBYL29vbLqL+W4hx56iJnNZvbqq69mfb927VoGgL3++uuMMcY++eQTZjab2Xe+852s38PY6LVgjLFp06axI488csx5/vGPfzAA7B//+AdjjLF4PM6amprY9OnT2dDQEL/f008/zQCwFStW8N+deeaZDAC77rrrssqcOXMmO+iggwpfBMbY4ODgmO9+9KMfMafTyYaHh/nvTjzxRLbnnnuKlsfR3d3N6urq2De/+U0Wi8XYzJkz2cSJE1l/f3/WfnvuuScDIPp3zTXX8McsWbKEWSyWvOdtbGxkp59+esG6TZs2jR111FFjvn///fcZALZ27VrGGGOPP/44A8A2bdo0Zt+FCxeylpYWsctAEARBEARBlBk01ZwoGdLpNNavX4+TTjppTDYQAEwmU9bnxYsXw2Kx8J9ffPFFxONxXHbZZVmLiS1evBgej4efKlxbWwsAeP755zE4OJi3Llzm96mnnkI6nZb8G6Qc9/jjj2O//fbD1KlT4ff7+b+jjjoKwMiUZwBYv3490uk0VqxYMWZxtNxrIYXNmzejp6cHF110EaqqqvjvTzzxREydOjXvVOoLLrgg6/MRRxyBzs5O0XNVV1fz/x8YGIDf78cRRxyBwcFBbNmyRXbdOVpaWnDnnXdiw4YNOOKII9DR0YEHHnhgTJb5kUcewYYNG0T/Fi1axB8zNDSUNaMik6qqKgwNDRWs29DQEBwOR95jue2Z/wrtK3YegiAIgiAIovygqeZEydDb24twOIzp06dL2n/SpElZn7dt2wYA2HfffbO+t9vtmDx5Mr990qRJWLp0KW655RY88sgjOOKII3DyySfjjDPO4Dvlp512Gu677z6cd955WLZsGY4++mh897vfxSmnnFJwhXApx33yySf48MMP0djYmLeMnp4eAMBnn30Gs9mMr371q5KuhxhC1wcApk6ditdeey3ru6qqqjF19Pl8CAaDoud6//33cfXVV+Pll19GOBzO2pb5Hr0STj/9dDz88MN45plncP755+Poo48es89hhx0mu9zq6mp+HYFchoeHswYThI7P947+8PAwvz3zX6F9xc5DEARBSGPjxo2YN28e/vGPf/DrnxAEQRQLyngTZYuaDsrNN9+M//3vf/jZz36GoaEh/PjHP8a0adOwY8cOvuxNmzbhxRdfxA9/+EP873//w2mnnYZvfvObBd8dlnJcOp3G/vvvL5iFzV3cq1hkziaQQygUwpFHHon//ve/uO666/C3v/0NGzZswK9//WsAkDWDIB+BQACbN28GAHzwwQd5y+vt7cWuXbtE/zJ1s1tbW5FKpfiBD454PI5AIIC2traC9WptbUV3d/eY77nvuONbW1uzvs/dV+w8BEEQRDZ33XUX1q1bV+xqKOLRRx/FbbfdVuxqZHH//fdjv/32Q1VVFfbZZx/cfvvtko+NxWK46qqr0NbWhurqasyePRsbNmzIu+8bb7yBww8/HE6nEy0tLfjxj3+c1S4TxHiDOt5EydDY2AiPx4P33ntP0fF77rknAOCjjz7K+j4ej+Pzzz/nt3Psv//+uPrqq7Fp0ya8+uqr2LlzJ9auXctvN5vNOProo3HLLbfggw8+wA033ICXX36ZnwouhNhxU6ZMQV9fH44++mjMnz9/zB+XkZ4yZQrS6TQ++OCDgueTOu1c6Ppw3+VeH6Vs3LgRgUAA69atw6WXXopvfetbmD9/fl4pLiVT5pcsWYKBgQGsWrUKr732Wt6AZdasWWhtbRX9W716NX/MgQceCAB8p55j8+bNSKfT/HYhDjzwQHz88cdjMvxvvfVWVvnTp0+H1Wodc554PI6Ojg7R8xAEQRDZCHW8v/GNb2BoaAjf+MY3jK+UREqt43333XfjvPPOw7Rp03D77bdjzpw5+PGPf8wPnotx1lln4ZZbbsEPfvAD/Pa3v4XFYsEJJ5wwZlZdR0cHjj76aAwODuKWW27Beeedh3vuuQcLFy7U42cRRElAHW+iZDCbzViwYAH+9re/jemUAAATkZyfP38+7HY7fve732Xte//996O/vx8nnngigBE5p2QymXXs/vvvD7PZzE//7evrG1M+1yHKN0WYQ8pxp556Knbu3Il77713zL5DQ0P8Cu0LFiyA2WzGddddNyarm/n7XC7XGLm0fBx88MFoamrC2rVrs37Ds88+iw8//JC/PmrhMuWZdYzH47jrrrvG7OtyuWRNPX/iiSfw2GOP4cYbb8SyZctw+umn4+qrr8bHH3+ctZ+Sd7yPOuoo1NXVYc2aNVllrVmzBk6nM+v6+P1+bNmyJWuNgFNOOQWpVAr33HMP/10sFsODDz6I2bNno729HcDIGgPz58/Hww8/jIGBAX7fhx56CJFIhIIOgiAUwbUdxChmsxlVVVUFXxEjRhkaGsLPf/5znHjiiXjiiSewePFi/OEPf8APfvAD/PKXvxR91exf//oX/vSnP2HVqlW46aabcP755+Pll1/GnnvuiSuvvDJr35/97Gfw+XzYuHEjLrjgAlx//fW444478Nxzz/GSqQQx7iju2m4Ekc2OHTtYS0sLczqd7LLLLmN33303W7lyJZs2bRoLBoOMsdFVzfOtfH7NNdcwAOyYY45hd9xxB7vkkkuYxWJhs2bNYvF4nDHG2JNPPsn22GMPdtlll7G77rqL/e53v2OzZs1iNpuNvfnmm4wxxi699FI2c+ZMdvXVV7N7772X3XDDDWyPPfZgEyZMYKFQSLD+Uo5LpVLshBNOYCaTiZ1++uns9ttvZ7fddhu74IILWF1dXdbv+sUvfsEAsEMPPZStXr2a3X777WzRokVs2bJl/D4XXXQRM5lM7Je//CX74x//yF566SXG2NhVzTOv3ezZs9ltt93Gli9fzpxOJ9trr73468vYyKrmLpdL8PoWwu/3M5/Px/bcc0928803s1tuuYXNnDmTzZgxY0x9fvOb3zAA7Cc/+Ql79NFH2V//+lfBcnfv3s0aGhrYvHnz+FXd/X4/a25uZnPmzBmz8rsS7rzzTgaAnXLKKezee+9lixYtYgDYDTfckLUfdx0yfwtjI6uSW61WdsUVV7C7776bHXroocxqtbJXXnkla7+3336bORwONnPmTLZmzRr285//nFVVVbFjjjlG9W8gCKL82bFjBzvnnHNYa2srs9vtbK+99mIXXHABi8VijLFRX75x40Z24YUXssbGRub1evnj77zzTvbVr36V2e121trayi666KIsH88YYx9//DH77ne/y5qbm5nD4WB77LEHO+2007LauBdeeIEddthhrLa2lrlcLvaVr3yFLV++XLT+Uo4bHh5mK1asYFOmTGF2u51NmDCBXXHFFVnKFxwPPfQQmzVrFquurmZer5cdccQR7Pnnn2eM5Vex4JQ+8rWDjDH25z//mX3ta19jVVVVrL6+nv3gBz9gO3bsyNqHawd37NjBvv3tbzOXy8UaGhrYT3/60yxFFSHWr1/PTjjhBP4eTp48mV133XVZxx555JFj6l5I6eOBBx5gANj999+f9f0NN9zAALBnnnlGtF6FeOaZZ/KW88YbbzAA7KGHHip4/BVXXMEsFssYpZFf/epXDADbvn07Y4yx/v5+vq3MJBaLMbfbzc4991xVv4MgShXqeBMlx7Zt29iiRYtYY2MjczgcbPLkyWzJkiVjAo58HW/GRuTDpk6dymw2G2tubmYXXnhhVsDR2dnJzjnnHDZlyhRWVVXF6urq2Lx589iLL77I7/PSSy+xb3/726ytrY3Z7XbW1tbG/u///o99/PHHBesu9bh4PM5+/etfs2nTpjGHw8F8Ph876KCD2LXXXjumwXrggQfYzJkz+f2OPPJItmHDBn77rl272IknnshqamokBRyPPfYYX15dXV3BgCMXKR1vxhh7/fXX2de//nVWXV3N2tra2JVXXsmef/75MfWJRCLs+9//PvN6vaIBx3e/+11WU1PDtm7dmvX9U089xQCwX//616L1ksI999zD9t13X2a329mUKVPYrbfemiXfxphwx3toaIhdfvnlrKWlhTkcDjZr1iz23HPP5T3Pq6++yg499FBWVVXFGhsb2ZIlS1g4HNbkNxAEUb7s3LmTtbW18QPQa9euZb/4xS/YfvvtN2YA+qtf/So78sgj2e23385uvPFGxtiof5o/fz67/fbb2cUXXzxmADoWi7FJkyaxtrY2dv3117P77ruPXXvttWzWrFm8j33vvfeY3W5nBx98MPvtb3/L1q5dyy6//HL2jW98o2D9pRyXSqXYMccckzXIfvHFFzOr1cq+/e1vZ5W3cuVKfgD6pptuYr/97W/Z97//fXbVVVcxxkYG0ydMmMCmTp3KHnroIfbQQw+xF154gTFWeAB61qxZ7NZbb2XLli1j1dXVeQegq6qq2LRp09g555zD1qxZw773ve8xAOyuu+4SvY8LFixgp556KrvpppvYmjVr2MKFCxkAdvnll/P7vPDCC+zAAw9kDQ0NfN2ffPLJguV+61vfYrW1tXwn9n//+x+z2+1jOqt9fX2st7dX9C8ajfLHXH/99QwA2717d1ZZsViMmc1mtnTp0oJ1mz9/Pttvv/3GfP/iiy8yAPzg+muvvcYAsMcee2zMvocffjj72te+VvA8BFGuUMebIAiCIAiiRFi0aBEzm815B5e5QUCu83j44YdnZVB7enqY3W5nxxxzTNYsoDvuuIMBYA888ABjjLF33nmHAWCPP/64YD1uvfVWBoD19vbKqr+U4x566CFmNpvZq6++mvX92rVr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11yD//znP5gxYwaOPfZY9PT0FLtqZccrr7yCJUuW4J///Cc2bNiARCKBY445BtFotNhVK2v+/e9/4+6778YBBxxQ7KoQCimLjvdZZ50Fxljev2JQrjp65VjvcqwzQPU2knKsM0D1NpJyrHMl8eyzz+KFF14QVSohCnPcccfhwQcfxDHHHIPJkyfj5JNPxuWXX46//OUvxa5aWXDLLbdg8eLFOPvss/HVr34Va9euhdPpxAMPPFDsqpUdzz33HM466yxMmzYNM2bMwLp167B9+3a8/fbbxa5a2RKJRPCDH/wA9957L3w+X7GrQyikbHW8CYIgCIIob3bv3o2DDjoI69evR0NDAyZNmoR33nkHBx54YLGrNi64+uqr8dxzz2Hz5s3FrkpJE4/H4XQ68cQTT2DBggX892eeeSZCoRCeeuqp4lVuHPDpp59in332wbvvvovp06cXuzplyZlnnom6ujrceuutmDt3Lg488EDcdtttxa4WIRMSRiYIgiAIwnAYYzjrrLNwwQUX4OCDD8bWrVuLXaVxxaefforbb7+dZhJIwO/3I5VKobm5Oev75uZmbNmypUi1Gh+k02lcdtllOOyww6jTrZA//elP+M9//oN///vfxa4KoZKymGpOEARBEER5sGzZMphMpoJ/W7Zswe23346BgQEsX7682FUuaaRez0x27tyJ4447DgsXLsTixYuLVHOCAJYsWYL33nsPf/rTn4pdlbKkq6sLl156KR555BFUVVUVuzqESmiqOUEQBEEQmtHb24tAIFBwn8mTJ+PUU0/F3/72N5hMJv77VCoFi8WCH/zgB/j973+vd1XLAqnX0263AwC++OILzJ07F1//+texbt060puXAE0114eLL74YTz31FDZt2oRJkyYVuzplyfr16/Gd73wHFouF/y6VSsFkMsFsNiMWi2VtI0ob6ngTBEEQBGE427dvRzgc5j9/8cUXOPbYY/HEE09g9uzZmDBhQhFrV57s3LkT8+bNw0EHHYSHH36YAnIZzJ49G4cccghuv/12ACNTpCdOnIiLL74Yy5YtK3LtygvGGC655BI8+eST2LhxI/bZZ59iV6lsGRgYwLZt27K+O/vsszF16lRcddVVNH2/zKBhUI0oNw3Sk08+GRMnTkRVVRVaW1vxwx/+EF988UWxq1WQctUoveGGG3DooYfC6XTC6/UWuzqC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\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": [ "## Changes to Simulation Submission\n", "\n", "Here we will discuss changes made to the process for submitting, managing, monitoring, and loading simulations from our server.\n", "\n", "Topics covered will include:\n", "* [tidy3d.web](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/api.html#submitting-simulations) functions.\n", "* working with [tidy3d.web.Job](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.container.Job.html) and [tidy3d.web.Batch](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.container.Batch.html) convenience containers." ] }, { "cell_type": "code", "execution_count": 19, "id": "9f16e7e9", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.750212Z", "iopub.status.busy": "2023-02-03T01:46:34.749906Z", "iopub.status.idle": "2023-02-03T01:46:34.879503Z", "shell.execute_reply": "2023-02-03T01:46:34.879060Z" } }, "outputs": [], "source": [ "import tidy3d.web as web\n" ] }, { "cell_type": "markdown", "id": "b388e315", "metadata": {}, "source": [ "### Web interface\n", "\n", "The new web interface provides the same functions as the original version with a few major changes.\n", "\n", "- [task_id = web.upload(sim, task_name)](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.webapi.upload.html) accepts the original [Simulation](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Simulation.html) object, whereas in the old version one had to convert it to a dictionary using `sim.export()` first. \n", "\n", "- [web.upload()](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.webapi.upload.html) returns the task_id directly, rather than the task info dictionary. To get the detailed task info run [web.get_info(task_id)](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.webapi.get_info.html)\n", "\n", "- [task_id = web.upload(sim, task_name)](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.webapi.upload.html) uploads the simulation as a `draft=True`, meaning it will not start running automatically unless explicitly told to with [web.start(task_id)](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.webapi.start.html).\n", "\n", "Usually, the most convenient way to run a single simulation in one line is with [web.run()](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.webapi.run.html#tidy3d.web.webapi.run), which simply performs all of the necessary steps one by one.\n", "\n", "Note, in the new version, the output of the simultion is a separate data object called a [SimulationData](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.SimulationData.html). Whereas before it was a [Simulation](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Simulation.html) object with the data loaded inside of it. We will discuss this is more detail in the following section." ] }, { "cell_type": "code", "execution_count": 20, "id": "1f75f482", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:46:34.881740Z", "iopub.status.busy": "2023-02-03T01:46:34.881584Z", "iopub.status.idle": "2023-02-03T01:47:00.589503Z", "shell.execute_reply": "2023-02-03T01:47:00.588916Z" } }, "outputs": [ { "data": { "text/html": [ "
[19:46:35] INFO     Created task 'web_demo' with task_id '159e3c1a-9b6f-4a35-9aba-68c5701e96b4'.      webapi.py:120\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:35]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Created task \u001b[32m'web_demo'\u001b[0m with task_id \u001b[32m'159e3c1a-9b6f-4a35-9aba-68c5701e96b4'\u001b[0m. \u001b]8;id=511914;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=727092;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#120\u001b\\\u001b[2m120\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": [
       "\u001b[?25l"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7856a453c9c7479b9e1f8576dd830fbb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n", "\u001b[?25h" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[19:46:38] INFO     Maximum FlexUnit cost: 0.025                                                      webapi.py:253\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:38]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Maximum FlexUnit cost: \u001b[1;36m0.025\u001b[0m \u001b]8;id=198963;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=783953;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#253\u001b\\\u001b[2m253\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO     status = queued                                                                   webapi.py:262\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m status = queued \u001b]8;id=377297;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=702574;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#262\u001b\\\u001b[2m262\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": [
       "\u001b[?25l"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f797d34ab1924227bb51905a386de9a0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
[19:46:41] INFO     status = preprocess                                                               webapi.py:274\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:41]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m status = preprocess \u001b]8;id=434047;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=723453;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#274\u001b\\\u001b[2m274\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n",
       "
\n" ], "text/plain": [ "\n", "\u001b[?25h\r", "\u001b[1A\u001b[2K" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[19:46:47] INFO     starting up solver                                                                webapi.py:278\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:47]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m starting up solver \u001b]8;id=725436;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=833814;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#278\u001b\\\u001b[2m278\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[19:46:54] INFO     running solver                                                                    webapi.py:284\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:54]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m running solver \u001b]8;id=25596;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=951478;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#284\u001b\\\u001b[2m284\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": [
       "\u001b[?25l"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4a523d76cb9a427eb67c384634955626",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n", "\u001b[?25h" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": [
       "\u001b[?25l"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "030d60b6a91f45a8ba9160159b620f5b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
[19:46:55] INFO     status = postprocess                                                              webapi.py:307\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:55]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m status = postprocess \u001b]8;id=641664;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=175282;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#307\u001b\\\u001b[2m307\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[19:46:58] INFO     status = success                                                                  webapi.py:307\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:58]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m status = success \u001b]8;id=71409;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=599410;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#307\u001b\\\u001b[2m307\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n",
       "
\n" ], "text/plain": [ "\n", "\u001b[?25h\r", "\u001b[1A\u001b[2K" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO     Billed FlexUnit cost: 0.025                                                       webapi.py:311\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Billed FlexUnit cost: \u001b[1;36m0.025\u001b[0m \u001b]8;id=339804;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=652297;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#311\u001b\\\u001b[2m311\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[19:46:59] INFO     downloading file \"output/monitor_data.hdf5\" to \"data/data.hdf5\"                   webapi.py:593\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:46:59]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m downloading file \u001b[32m\"output/monitor_data.hdf5\"\u001b[0m to \u001b[32m\"data/data.hdf5\"\u001b[0m \u001b]8;id=674561;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=168511;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#593\u001b\\\u001b[2m593\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": [
       "\u001b[?25l"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a7140b61369b4307a4a22cb453199da6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n", "\u001b[?25h" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[19:47:00] INFO     loading SimulationData from data/data.hdf5                                        webapi.py:415\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:47:00]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m loading SimulationData from data/data.hdf5 \u001b]8;id=143469;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=381355;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#415\u001b\\\u001b[2m415\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           WARNING  Simulation final field decay value of 0.00486 is greater than the simulation      webapi.py:421\n",
       "                    shutoff threshold of 1e-05. Consider simulation again with large run_time                      \n",
       "                    duration for more accurate results.                                                            \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING \u001b[0m Simulation final field decay value of \u001b[1;36m0.00486\u001b[0m is greater than the simulation \u001b]8;id=921535;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=809500;file:///Users/twhughes/Documents/Flexcompute/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#421\u001b\\\u001b[2m421\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m shutoff threshold of \u001b[1;36m1e-05\u001b[0m. Consider simulation again with large run_time \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m duration for more accurate results. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sim_data = web.run(sim, task_name=\"web_demo\", path=\"data/data.hdf5\")\n" ] }, { "cell_type": "markdown", "id": "fc5071ee", "metadata": {}, "source": [ "### Containers\n", "\n", "The new version also contains the convenience containers [Job](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.container.Job.html) and [Batch](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.container.Batch.html) for managing single and multiple tasks without needing to account for the `task_id` and other metadata.\n", "\n", "They follow the same basic API as the `web.` functions, except [Batch](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.web.container.Batch.html) objects return generators that can be iterated through to give [SimulationData](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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 wont cover all of the details here, for more information, see the [tutorial on the Web API](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/notebooks/WebAPI.html) or look at the examples in the other notebooks." ] }, { "cell_type": "markdown", "id": "b6045533", "metadata": {}, "source": [ "## Changes to Output Data\n", "\n", "Here we will discuss changes made to the output data from a simulation.\n", "\n", "Topics covered will include:\n", "\n", "- [SimulationData](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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 is now separated from the [Simulation](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Simulation.html) object that led to its creation.\n", "\n", "We call the data container for a single task a [SimulationData](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.SimulationData.html) object.\n", "\n", "In addition to storing the data for each of the individual monitors in the simulation, it has it's own useful functionality." ] }, { "cell_type": "code", "execution_count": 21, "id": "b4632332", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:47:00.983725Z", "iopub.status.busy": "2023-02-03T01:47:00.983606Z", "iopub.status.idle": "2023-02-03T01:47:01.104192Z", "shell.execute_reply": "2023-02-03T01:47:01.103776Z" } }, "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.0158\n", "Compute monitor modes time (s): 0.0020\n", "Rest of setup time (s): 3.0944\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.4162\n", "\n" ] }, { "data": { "text/html": [ "
╭─────────────────────────────── <class 'tidy3d.components.simulation.Simulation'> ───────────────────────────────╮\n",
       " Contains all information about Tidy3d simulation.                                                               \n",
       "                                                                                                                 \n",
       " ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ \n",
       "  Simulation(                                                                                                  \n",
       "  type='Simulation',                                                                                       \n",
       "  center=(0.0, 0.0, 0.0),                                                                                  \n",
       "  size=(4.0, 4.0, 4.0),                                                                                    \n",
       "  run_time=1e-12,                                                                                          \n",
       "  medium=Medium(name=None, frequency_range=None, type='Medium', permittivity=1.0, conductivity=0.0),       \n",
       "  symmetry=(0, 0, 0),                                                                                      \n",
       "  structures=(                                                                                             \n",
       "  │   │   Structure(                                                                                           \n",
       "  │   │   │   geometry=Box(type='Box', center=(0.0, 0.0, 0.0), size=(1.0, 1.0, 1.0)),                          \n",
       "  │   │   │   name=None,                                                                                       \n",
       "  │   │   │   type='Structure',                                                                                \n",
       "  │   │   │   medium=Medium(                                                                                   \n",
       "  │   │   │   │   name=None,                                                                                   \n",
       "  │   │   │   │   frequency_range=None,                                                                        \n",
       "  │   │   │   │   type='Medium',                                                                               \n",
       "  │   │   │   │   permittivity=2.0,                                                                            \n",
       "  │   │   │   │   conductivity=0.0                                                                             \n",
       "  │   │   │   )                                                                                                \n",
       "  │   │   ),                                                                                                   \n",
       "  ),                                                                                                       \n",
       "  sources=(                                                                                                \n",
       "  │   │   UniformCurrentSource(                                                                                \n",
       "  │   │   │   type='UniformCurrentSource',                                                                     \n",
       "  │   │   │   center=(0.0, 0.0, 0.0),                                                                          \n",
       "  │   │   │   size=(0.0, 0.0, 0.0),                                                                            \n",
       "  │   │   │   source_time=GaussianPulse(                                                                       \n",
       "  │   │   │   │   amplitude=1.0,                                                                               \n",
       "  │   │   │   │   phase=0.0,                                                                                   \n",
       "  │   │   │   │   type='GaussianPulse',                                                                        \n",
       "  │   │   │   │   freq0=150000000000000.0,                                                                     \n",
       "  │   │   │   │   fwidth=10000000000000.0,                                                                     \n",
       "  │   │   │   │   offset=5.0                                                                                   \n",
       "  │   │   │   ),                                                                                               \n",
       "  │   │   │   name=None,                                                                                       \n",
       "  │   │   │   polarization='Ez'                                                                                \n",
       "  │   │   ),                                                                                                   \n",
       "  ),                                                                                                       \n",
       "  boundary_spec=BoundarySpec(                                                                              \n",
       "  │   │   x=Boundary(                                                                                          \n",
       "  │   │   │   plus=Periodic(name=None, type='Periodic'),                                                       \n",
       "  │   │   │   minus=Periodic(name=None, type='Periodic'),                                                      \n",
       "  │   │   │   type='Boundary'                                                                                  \n",
       "  │   │   ),                                                                                                   \n",
       "  │   │   y=Boundary(                                                                                          \n",
       "  │   │   │   plus=PML(                                                                                        \n",
       "  │   │   │   │   name=None,                                                                                   \n",
       "  │   │   │   │   type='PML',                                                                                  \n",
       "  │   │   │   │   num_layers=12,                                                                               \n",
       "  │   │   │   │   parameters=PMLParams(                                                                        \n",
       "  │   │   │   │   │   sigma_order=3,                                                                           \n",
       "  │   │   │   │   │   sigma_min=0.0,                                                                           \n",
       "  │   │   │   │   │   sigma_max=1.5,                                                                           \n",
       "  │   │   │   │   │   type='PMLParams',                                                                        \n",
       "  │   │   │   │   │   kappa_order=3,                                                                           \n",
       "  │   │   │   │   │   kappa_min=1.0,                                                                           \n",
       "  │   │   │   │   │   kappa_max=3.0,                                                                           \n",
       "  │   │   │   │   │   alpha_order=1,                                                                           \n",
       "  │   │   │   │   │   alpha_min=0.0,                                                                           \n",
       "  │   │   │   │   │   alpha_max=0.0                                                                            \n",
       "  │   │   │   │   )                                                                                            \n",
       "  │   │   │   ),                                                                                               \n",
       "  │   │   │   minus=PML(                                                                                       \n",
       "  │   │   │   │   name=None,                                                                                   \n",
       "  │   │   │   │   type='PML',                                                                                  \n",
       "  │   │   │   │   num_layers=12,                                                                               \n",
       "  │   │   │   │   parameters=PMLParams(                                                                        \n",
       "  │   │   │   │   │   sigma_order=3,                                                                           \n",
       "  │   │   │   │   │   sigma_min=0.0,                                                                           \n",
       "  │   │   │   │   │   sigma_max=1.5,                                                                           \n",
       "  │   │   │   │   │   type='PMLParams',                                                                        \n",
       "  │   │   │   │   │   kappa_order=3,                                                                           \n",
       "  │   │   │   │   │   kappa_min=1.0,                                                                           \n",
       "  │   │   │   │   │   kappa_max=3.0,                                                                           \n",
       "  │   │   │   │   │   alpha_order=1,                                                                           \n",
       "  │   │   │   │   │   alpha_min=0.0,                                                                           \n",
       "  │   │   │   │   │   alpha_max=0.0                                                                            \n",
       "  │   │   │   │   )                                                                                            \n",
       "  │   │   │   ),                                                                                               \n",
       "  │   │   │   type='Boundary'                                                                                  \n",
       "  │   │   ),                                                                                                   \n",
       "  │   │   z=Boundary(                                                                                          \n",
       "  │   │   │   plus=Periodic(name=None, type='Periodic'),                                                       \n",
       "  │   │   │   minus=Periodic(name=None, type='Periodic'),                                                      \n",
       "  │   │   │   type='Boundary'                                                                                  \n",
       "  │   │   ),                                                                                                   \n",
       "  │   │   type='BoundarySpec'                                                                                  \n",
       "  ),                                                                                                       \n",
       "  monitors=(                                                                                               \n",
       "  │   │   FieldMonitor(                                                                                        \n",
       "  │   │   │   type='FieldMonitor',                                                                             \n",
       "  │   │   │   center=(1.0, 0.0, 0.0),                                                                          \n",
       "  │   │   │   size=(inf, inf, 0.0),                                                                            \n",
       "  │   │   │   name='fields_at_150THz',                                                                         \n",
       "  │   │   │   freqs=(150000000000000.0,),                                                                      \n",
       "  │   │   │   apodization=ApodizationSpec(start=None, end=None, width=None, type='ApodizationSpec'),           \n",
       "  │   │   │   fields=('Ex', 'Ey', 'Hz'),                                                                       \n",
       "  │   │   │   interval_space=(1, 1, 1),                                                                        \n",
       "  │   │   │   colocate=False                                                                                   \n",
       "  │   │   ),                                                                                                   \n",
       "  │   │   FluxTimeMonitor(                                                                                     \n",
       "  │   │   │   type='FluxTimeMonitor',                                                                          \n",
       "  │   │   │   center=(1.0, 0.0, 0.0),                                                                          \n",
       "  │   │   │   size=(inf, inf, 0.0),                                                                            \n",
       "  │   │   │   name='flux_over_time',                                                                           \n",
       "  │   │   │   start=1e-13,                                                                                     \n",
       "  │   │   │   stop=3e-13,                                                                                      \n",
       "  │   │   │   interval=5,                                                                                      \n",
       "  │   │   │   normal_dir='+',                                                                                  \n",
       "  │   │   │   exclude_surfaces=None                                                                            \n",
       "  │   │   )                                                                                                    \n",
       "  ),                                                                                                       \n",
       "  grid_spec=GridSpec(                                                                                      \n",
       "  │   │   grid_x=UniformGrid(type='UniformGrid', dl=0.2),                                                      \n",
       "  │   │   grid_y=UniformGrid(type='UniformGrid', dl=0.2),                                                      \n",
       "  │   │   grid_z=UniformGrid(type='UniformGrid', dl=0.2),                                                      \n",
       "  │   │   wavelength=None,                                                                                     \n",
       "  │   │   override_structures=(),                                                                              \n",
       "  │   │   type='GridSpec'                                                                                      \n",
       "  ),                                                                                                       \n",
       "  shutoff=1e-05,                                                                                           \n",
       "  subpixel=True,                                                                                           \n",
       "  normalize_index=0,                                                                                       \n",
       "  courant=0.99,                                                                                            \n",
       "  version='1.9.0rc2'                                                                                       \n",
       "  )                                                                                                            \n",
       " ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n",
       "                                                                                                                 \n",
       " background_structure = Structure(                                                                               \n",
       "                            geometry=Box(type='Box', center=(0.0, 0.0, 0.0), size=(inf, inf, inf)),              \n",
       "                            name=None,                                                                           \n",
       "                            type='Structure',                                                                    \n",
       "                            medium=Medium(                                                                       \n",
       "                                name=None,                                                                       \n",
       "                                frequency_range=None,                                                            \n",
       "                                type='Medium',                                                                   \n",
       "                                permittivity=1.0,                                                                \n",
       "                                conductivity=0.0                                                                 \n",
       "                            )                                                                                    \n",
       "                        )                                                                                        \n",
       "        boundary_spec = BoundarySpec(                                                                            \n",
       "                            x=Boundary(                                                                          \n",
       "                                plus=Periodic(name=None, type='Periodic'),                                       \n",
       "                                minus=Periodic(name=None, type='Periodic'),                                      \n",
       "                                type='Boundary'                                                                  \n",
       "                            ),                                                                                   \n",
       "                            y=Boundary(                                                                          \n",
       "                                plus=PML(                                                                        \n",
       "                                    name=None,                                                                   \n",
       "                                    type='PML',                                                                  \n",
       "                                    num_layers=12,                                                               \n",
       "                                    parameters=PMLParams(                                                        \n",
       "                                        sigma_order=3,                                                           \n",
       "                                        sigma_min=0.0,                                                           \n",
       "                                        sigma_max=1.5,                                                           \n",
       "                                        type='PMLParams',                                                        \n",
       "                                        kappa_order=3,                                                           \n",
       "                                        kappa_min=1.0,                                                           \n",
       "                                        kappa_max=3.0,                                                           \n",
       "                                        alpha_order=1,                                                           \n",
       "                                        alpha_min=0.0,                                                           \n",
       "                                        alpha_max=0.0                                                            \n",
       "                                    )                                                                            \n",
       "                                ),                                                                               \n",
       "                                minus=PML(                                                                       \n",
       "                                    name=None,                                                                   \n",
       "                                    type='PML',                                                                  \n",
       "                                    num_layers=12,                                                               \n",
       "                                    parameters=PMLParams(                                                        \n",
       "                                        sigma_order=3,                                                           \n",
       "                                        sigma_min=0.0,                                                           \n",
       "                                        sigma_max=1.5,                                                           \n",
       "                                        type='PMLParams',                                                        \n",
       "                                        kappa_order=3,                                                           \n",
       "                                        kappa_min=1.0,                                                           \n",
       "                                        kappa_max=3.0,                                                           \n",
       "                                        alpha_order=1,                                                           \n",
       "                                        alpha_min=0.0,                                                           \n",
       "                                        alpha_max=0.0                                                            \n",
       "                                    )                                                                            \n",
       "                                ),                                                                               \n",
       "                                type='Boundary'                                                                  \n",
       "                            ),                                                                                   \n",
       "                            z=Boundary(                                                                          \n",
       "                                plus=Periodic(name=None, type='Periodic'),                                       \n",
       "                                minus=Periodic(name=None, type='Periodic'),                                      \n",
       "                                type='Boundary'                                                                  \n",
       "                            ),                                                                                   \n",
       "                            type='BoundarySpec'                                                                  \n",
       "                        )                                                                                        \n",
       "         bounding_box = Box(type='Box', center=(0.0, 0.0, 0.0), size=(4.0, 4.0, 4.0))                            \n",
       "               bounds = ((-2.0, -2.0, -2.0), (2.0, 2.0, 2.0))                                                    \n",
       "           bounds_pml = ((-2.0, -4.3999999999999995, -2.0), (2.0, 4.399999999999997, 2.0))                       \n",
       "               center = (0.0, 0.0, 0.0)                                                                          \n",
       "       complex_fields = False                                                                                    \n",
       "              courant = 0.99                                                                                     \n",
       "      custom_datasets = []                                                                                       \n",
       "                   dt = 3.8131497373958257e-16                                                                   \n",
       "      frequency_range = (110000000000000.0, 190000000000000.0)                                                   \n",
       "             geometry = Box(type='Box', center=(0.0, 0.0, 0.0), size=(4.0, 4.0, 4.0))                            \n",
       "                 grid = Grid(                                                                                    \n",
       "                            boundaries=Coords(                                                                   \n",
       "                                x=(                                                                              \n",
       "                                    -2.0,                                                                        \n",
       "                                    -1.8,                                                                        \n",
       "                                    -1.6,                                                                        \n",
       "                                    -1.4,                                                                        \n",
       "                                    -1.2,                                                                        \n",
       "                                    -1.0,                                                                        \n",
       "                                    -0.7999999999999998,                                                         \n",
       "                                    -0.5999999999999999,                                                         \n",
       "                                    -0.3999999999999999,                                                         \n",
       "                                    -0.19999999999999996,                                                        \n",
       "                                    0.0,                                                                         \n",
       "                                    0.20000000000000018,                                                         \n",
       "                                    0.40000000000000036,                                                         \n",
       "                                    0.6000000000000001,                                                          \n",
       "                                    0.8000000000000003,                                                          \n",
       "                                    1.0,                                                                         \n",
       "                                    1.2000000000000002,                                                          \n",
       "                                    1.4000000000000004,                                                          \n",
       "                                    1.6,                                                                         \n",
       "                                    1.8000000000000003,                                                          \n",
       "                                    2.0                                                                          \n",
       "                                ),                                                                               \n",
       "                                y=(                                                                              \n",
       "                                    -4.3999999999999995,                                                         \n",
       "                                    -4.199999999999999,                                                          \n",
       "                                    -3.9999999999999996,                                                         \n",
       "                                    -3.8,                                                                        \n",
       "                                    -3.5999999999999996,                                                         \n",
       "                                    -3.3999999999999995,                                                         \n",
       "                                    -3.1999999999999997,                                                         \n",
       "                                    -3.0,                                                                        \n",
       "                                    -2.8,                                                                        \n",
       "                                    -2.5999999999999996,                                                         \n",
       "                                    -2.4,                                                                        \n",
       "                                    -2.2,                                                                        \n",
       "                                    -2.0,                                                                        \n",
       "                                    -1.8,                                                                        \n",
       "                                    -1.6,                                                                        \n",
       "                                    -1.4,                                                                        \n",
       "                                    -1.2,                                                                        \n",
       "                                    -1.0,                                                                        \n",
       "                                    -0.7999999999999998,                                                         \n",
       "                                    -0.5999999999999999,                                                         \n",
       "                                    -0.3999999999999999,                                                         \n",
       "                                    -0.19999999999999996,                                                        \n",
       "                                    0.0,                                                                         \n",
       "                                    0.20000000000000018,                                                         \n",
       "                                    0.40000000000000036,                                                         \n",
       "                                    0.6000000000000001,                                                          \n",
       "                                    0.8000000000000003,                                                          \n",
       "                                    1.0,                                                                         \n",
       "                                    1.2000000000000002,                                                          \n",
       "                                    1.4000000000000004,                                                          \n",
       "                                    1.6,                                                                         \n",
       "                                    1.8000000000000003,                                                          \n",
       "                                    2.0,                                                                         \n",
       "                                    2.1999999999999997,                                                          \n",
       "                                    2.3999999999999995,                                                          \n",
       "                                    2.599999999999999,                                                           \n",
       "                                    2.799999999999999,                                                           \n",
       "                                    2.9999999999999987,                                                          \n",
       "                                    3.1999999999999984,                                                          \n",
       "                                    3.399999999999998,                                                           \n",
       "                                    3.599999999999998,                                                           \n",
       "                                    3.7999999999999976,                                                          \n",
       "                                    3.9999999999999973,                                                          \n",
       "                                    4.1999999999999975,                                                          \n",
       "                                    4.399999999999997                                                            \n",
       "                                ),                                                                               \n",
       "                                z=(                                                                              \n",
       "                                    -2.0,                                                                        \n",
       "                                    -1.8,                                                                        \n",
       "                                    -1.6,                                                                        \n",
       "                                    -1.4,                                                                        \n",
       "                                    -1.2,                                                                        \n",
       "                                    -1.0,                                                                        \n",
       "                                    -0.7999999999999998,                                                         \n",
       "                                    -0.5999999999999999,                                                         \n",
       "                                    -0.3999999999999999,                                                         \n",
       "                                    -0.19999999999999996,                                                        \n",
       "                                    0.0,                                                                         \n",
       "                                    0.20000000000000018,                                                         \n",
       "                                    0.40000000000000036,                                                         \n",
       "                                    0.6000000000000001,                                                          \n",
       "                                    0.8000000000000003,                                                          \n",
       "                                    1.0,                                                                         \n",
       "                                    1.2000000000000002,                                                          \n",
       "                                    1.4000000000000004,                                                          \n",
       "                                    1.6,                                                                         \n",
       "                                    1.8000000000000003,                                                          \n",
       "                                    2.0                                                                          \n",
       "                                ),                                                                               \n",
       "                                type='Coords'                                                                    \n",
       "                            ),                                                                                   \n",
       "                            type='Grid'                                                                          \n",
       "                        )                                                                                        \n",
       "            grid_spec = GridSpec(                                                                                \n",
       "                            grid_x=UniformGrid(type='UniformGrid', dl=0.2),                                      \n",
       "                            grid_y=UniformGrid(type='UniformGrid', dl=0.2),                                      \n",
       "                            grid_z=UniformGrid(type='UniformGrid', dl=0.2),                                      \n",
       "                            wavelength=None,                                                                     \n",
       "                            override_structures=(),                                                              \n",
       "                            type='GridSpec'                                                                      \n",
       "                        )                                                                                        \n",
       "               medium = Medium(                                                                                  \n",
       "                            name=None,                                                                           \n",
       "                            frequency_range=None,                                                                \n",
       "                            type='Medium',                                                                       \n",
       "                            permittivity=1.0,                                                                    \n",
       "                            conductivity=0.0                                                                     \n",
       "                        )                                                                                        \n",
       "           medium_map = {                                                                                        \n",
       "                            Medium(name=None, frequency_range=None, type='Medium', permittivity=1.0,             \n",
       "                        conductivity=0.0): 0,                                                                    \n",
       "                            Medium(name=None, frequency_range=None, type='Medium', permittivity=2.0,             \n",
       "                        conductivity=0.0): 1                                                                     \n",
       "                        }                                                                                        \n",
       "              mediums = [                                                                                        \n",
       "                            Medium(                                                                              \n",
       "                                name=None,                                                                       \n",
       "                                frequency_range=None,                                                            \n",
       "                                type='Medium',                                                                   \n",
       "                                permittivity=1.0,                                                                \n",
       "                                conductivity=0.0                                                                 \n",
       "                            ),                                                                                   \n",
       "                            Medium(                                                                              \n",
       "                                name=None,                                                                       \n",
       "                                frequency_range=None,                                                            \n",
       "                                type='Medium',                                                                   \n",
       "                                permittivity=2.0,                                                                \n",
       "                                conductivity=0.0                                                                 \n",
       "                            )                                                                                    \n",
       "                        ]                                                                                        \n",
       "             monitors = (                                                                                        \n",
       "                            FieldMonitor(                                                                        \n",
       "                                type='FieldMonitor',                                                             \n",
       "                                center=(1.0, 0.0, 0.0),                                                          \n",
       "                                size=(inf, inf, 0.0),                                                            \n",
       "                                name='fields_at_150THz',                                                         \n",
       "                                freqs=(150000000000000.0,),                                                      \n",
       "                                apodization=ApodizationSpec(                                                     \n",
       "                                    start=None,                                                                  \n",
       "                                    end=None,                                                                    \n",
       "                                    width=None,                                                                  \n",
       "                                    type='ApodizationSpec'                                                       \n",
       "                                ),                                                                               \n",
       "                                fields=('Ex', 'Ey', 'Hz'),                                                       \n",
       "                                interval_space=(1, 1, 1),                                                        \n",
       "                                colocate=False                                                                   \n",
       "                            ),                                                                                   \n",
       "                            FluxTimeMonitor(                                                                     \n",
       "                                type='FluxTimeMonitor',                                                          \n",
       "                                center=(1.0, 0.0, 0.0),                                                          \n",
       "                                size=(inf, inf, 0.0),                                                            \n",
       "                                name='flux_over_time',                                                           \n",
       "                                start=1e-13,                                                                     \n",
       "                                stop=3e-13,                                                                      \n",
       "                                interval=5,                                                                      \n",
       "                                normal_dir='+',                                                                  \n",
       "                                exclude_surfaces=None                                                            \n",
       "                            )                                                                                    \n",
       "                        )                                                                                        \n",
       "      normalize_index = 0                                                                                        \n",
       "            num_cells = 17600                                                                                    \n",
       "       num_pml_layers = [[0, 0], [12, 12], [0, 0]]                                                               \n",
       "       num_time_steps = 2624                                                                                     \n",
       "         nyquist_step = 5                                                                                        \n",
       "          plot_params = PlotParams(                                                                              \n",
       "                            alpha=1.0,                                                                           \n",
       "                            edgecolor=None,                                                                      \n",
       "                            facecolor=None,                                                                      \n",
       "                            fill=True,                                                                           \n",
       "                            hatch=None,                                                                          \n",
       "                            linewidth=1.0,                                                                       \n",
       "                            type='PlotParams'                                                                    \n",
       "                        )                                                                                        \n",
       "      pml_thicknesses = [(0.0, 0.0), (2.3999999999999995, 2.399999999999997), (0.0, 0.0)]                        \n",
       "             run_time = 1e-12                                                                                    \n",
       "              shutoff = 1e-05                                                                                    \n",
       "  simulation_geometry = Box(                                                                                     \n",
       "                            type='Box',                                                                          \n",
       "                            center=(0.0, -1.3322676295501878e-15, 0.0),                                          \n",
       "                            size=(4.0, 8.799999999999997, 4.0)                                                   \n",
       "                        )                                                                                        \n",
       "                 size = (4.0, 4.0, 4.0)                                                                          \n",
       "              sources = (                                                                                        \n",
       "                            UniformCurrentSource(                                                                \n",
       "                                type='UniformCurrentSource',                                                     \n",
       "                                center=(0.0, 0.0, 0.0),                                                          \n",
       "                                size=(0.0, 0.0, 0.0),                                                            \n",
       "                                source_time=GaussianPulse(                                                       \n",
       "                                    amplitude=1.0,                                                               \n",
       "                                    phase=0.0,                                                                   \n",
       "                                    type='GaussianPulse',                                                        \n",
       "                                    freq0=150000000000000.0,                                                     \n",
       "                                    fwidth=10000000000000.0,                                                     \n",
       "                                    offset=5.0                                                                   \n",
       "                                ),                                                                               \n",
       "                                name=None,                                                                       \n",
       "                                polarization='Ez'                                                                \n",
       "                            ),                                                                                   \n",
       "                        )                                                                                        \n",
       "           structures = (                                                                                        \n",
       "                            Structure(                                                                           \n",
       "                                geometry=Box(type='Box', center=(0.0, 0.0, 0.0), size=(1.0, 1.0, 1.0)),          \n",
       "                                name=None,                                                                       \n",
       "                                type='Structure',                                                                \n",
       "                                medium=Medium(                                                                   \n",
       "                                    name=None,                                                                   \n",
       "                                    frequency_range=None,                                                        \n",
       "                                    type='Medium',                                                               \n",
       "                                    permittivity=2.0,                                                            \n",
       "                                    conductivity=0.0                                                             \n",
       "                                )                                                                                \n",
       "                            ),                                                                                   \n",
       "                        )                                                                                        \n",
       "             subpixel = True                                                                                     \n",
       "             symmetry = (0, 0, 0)                                                                                \n",
       "                tmesh = array([0.00000000e+00, 3.81314974e-16, 7.62629947e-16, ...,                              \n",
       "                               9.99426546e-13, 9.99807861e-13, 1.00018918e-12])                                  \n",
       "                 type = 'Simulation'                                                                             \n",
       "              version = '1.9.0rc2'                                                                               \n",
       "          wvl_mat_min = 1.413235200620076                                                                        \n",
       "            zero_dims = []                                                                                       \n",
       "╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\u001b[34m╭─\u001b[0m\u001b[34m──────────────────────────────\u001b[0m\u001b[34m \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 \u001b[0m\u001b[34m──────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[36mContains all information about Tidy3d simulation.\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[1;35mSimulation\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Simulation'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mrun_time\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-12\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mstructures\u001b[0m=\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1;35mStructure\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Structure'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[1m)\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33msources\u001b[0m=\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1;35mUniformCurrentSource\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformCurrentSource'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33msource_time\u001b[0m=\u001b[1;35mGaussianPulse\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mamplitude\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mphase\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'GaussianPulse'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mfreq0\u001b[0m=\u001b[1;36m150000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mfwidth\u001b[0m=\u001b[1;36m10000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33moffset\u001b[0m=\u001b[1;36m5\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mpolarization\u001b[0m=\u001b[32m'Ez'\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mboundary_spec\u001b[0m=\u001b[1;35mBoundarySpec\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mx\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33my\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mplus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'PML'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mnum_layers\u001b[0m=\u001b[1;36m12\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'PMLParams'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33malpha_order\u001b[0m=\u001b[1;36m1\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[1m)\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mminus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'PML'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mnum_layers\u001b[0m=\u001b[1;36m12\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'PMLParams'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33malpha_order\u001b[0m=\u001b[1;36m1\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ │ \u001b[0m\u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ │ \u001b[0m\u001b[1m)\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mz\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'BoundarySpec'\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mmonitors\u001b[0m=\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1;35mFieldMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mname\u001b[0m=\u001b[32m'fields_at_150THz'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mfreqs\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m150000000000000.0\u001b[0m,\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mcolocate\u001b[0m=\u001b[3;91mFalse\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1;35mFluxTimeMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'FluxTimeMonitor'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mname\u001b[0m=\u001b[32m'flux_over_time'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mstart\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mstop\u001b[0m=\u001b[1;36m3e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33minterval\u001b[0m=\u001b[1;36m5\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mnormal_dir\u001b[0m=\u001b[32m'+'\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ │ \u001b[0m\u001b[33mexclude_surfaces\u001b[0m=\u001b[3;35mNone\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[1m)\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mgrid_spec\u001b[0m=\u001b[1;35mGridSpec\u001b[0m\u001b[1m(\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mwavelength\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33moverride_structures\u001b[0m=\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ │ \u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'GridSpec'\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mshutoff\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-05\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33msubpixel\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mnormalize_index\u001b[0m=\u001b[1;36m0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mcourant\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.99\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[2;32m│ \u001b[0m\u001b[33mversion\u001b[0m=\u001b[32m'1.9.0rc2'\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[1m)\u001b[0m \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mbackground_structure\u001b[0m = \u001b[1;35mStructure\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Structure'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mboundary_spec\u001b[0m = \u001b[1;35mBoundarySpec\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mx\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33my\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mplus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PML'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mnum_layers\u001b[0m=\u001b[1;36m12\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PMLParams'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha_order\u001b[0m=\u001b[1;36m1\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mminus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PML'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mnum_layers\u001b[0m=\u001b[1;36m12\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PMLParams'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha_order\u001b[0m=\u001b[1;36m1\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mz\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'BoundarySpec'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mcomplex_fields\u001b[0m = \u001b[3;91mFalse\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mcourant\u001b[0m = \u001b[1;36m0.99\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mcustom_datasets\u001b[0m = \u001b[1m[\u001b[0m\u001b[1m]\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mdt\u001b[0m = \u001b[1;36m3.8131497373958257e-16\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mgrid\u001b[0m = \u001b[1;35mGrid\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mboundaries\u001b[0m=\u001b[1;35mCoords\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mx\u001b[0m=\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-2.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.8\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.6\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.4\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.2\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.7999999999999998\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.5999999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.3999999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.19999999999999996\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.20000000000000018\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.40000000000000036\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.6000000000000001\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.8000000000000003\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.2000000000000002\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.4000000000000004\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.6\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.8000000000000003\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33my\u001b[0m=\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-4.3999999999999995\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-4.199999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-3.9999999999999996\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-3.8\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-3.5999999999999996\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-3.3999999999999995\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-3.1999999999999997\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-3.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-2.8\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-2.5999999999999996\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-2.4\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-2.2\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-2.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.8\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.6\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.4\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.2\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.7999999999999998\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.5999999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.3999999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.19999999999999996\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.20000000000000018\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.40000000000000036\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.6000000000000001\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.8000000000000003\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.2000000000000002\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.4000000000000004\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.6\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.8000000000000003\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.1999999999999997\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.3999999999999995\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.599999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.799999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.9999999999999987\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m3.1999999999999984\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m3.399999999999998\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m3.599999999999998\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m3.7999999999999976\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m3.9999999999999973\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m4.1999999999999975\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m4.399999999999997\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mz\u001b[0m=\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-2.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.8\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.6\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.4\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.2\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.7999999999999998\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.5999999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.3999999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.19999999999999996\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.20000000000000018\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.40000000000000036\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.6000000000000001\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.8000000000000003\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.2000000000000002\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.4000000000000004\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.6\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.8000000000000003\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Coords'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Grid'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mgrid_spec\u001b[0m = \u001b[1;35mGridSpec\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mwavelength\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33moverride_structures\u001b[0m=\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'GridSpec'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mmedium\u001b[0m = \u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mmedium_map\u001b[0m = \u001b[1m{\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m}\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mmediums\u001b[0m = \u001b[1m[\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m]\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mmonitors\u001b[0m = \u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;35mFieldMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[32m'fields_at_150THz'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfreqs\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m150000000000000.0\u001b[0m,\u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mapodization\u001b[0m=\u001b[1;35mApodizationSpec\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mstart\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mend\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mwidth\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'ApodizationSpec'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mcolocate\u001b[0m=\u001b[3;91mFalse\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;35mFluxTimeMonitor\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'FluxTimeMonitor'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[32m'flux_over_time'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mstart\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mstop\u001b[0m=\u001b[1;36m3e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33minterval\u001b[0m=\u001b[1;36m5\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mnormal_dir\u001b[0m=\u001b[32m'+'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mexclude_surfaces\u001b[0m=\u001b[3;35mNone\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mnormalize_index\u001b[0m = \u001b[1;36m0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mnum_cells\u001b[0m = \u001b[1;36m17600\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mnum_time_steps\u001b[0m = \u001b[1;36m2624\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mnyquist_step\u001b[0m = \u001b[1;36m5\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mplot_params\u001b[0m = \u001b[1;35mPlotParams\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33malpha\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33medgecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfacecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfill\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mhatch\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mlinewidth\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mrun_time\u001b[0m = \u001b[1;36m1e-12\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mshutoff\u001b[0m = \u001b[1;36m1e-05\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33msimulation_geometry\u001b[0m = \u001b[1;35mBox\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Box'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33msources\u001b[0m = \u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;35mUniformCurrentSource\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'UniformCurrentSource'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msource_time\u001b[0m=\u001b[1;35mGaussianPulse\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mamplitude\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mphase\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'GaussianPulse'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfreq0\u001b[0m=\u001b[1;36m150000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfwidth\u001b[0m=\u001b[1;36m10000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33moffset\u001b[0m=\u001b[1;36m5\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mpolarization\u001b[0m=\u001b[32m'Ez'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mstructures\u001b[0m = \u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;35mStructure\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Structure'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mfrequency_range\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Medium'\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mconductivity\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33msubpixel\u001b[0m = \u001b[3;92mTrue\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\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│\u001b[0m\n", "\u001b[34m│\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.62629947e-16\u001b[0m, \u001b[33m...\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m9.99426546e-13\u001b[0m, \u001b[1;36m9.99807861e-13\u001b[0m, \u001b[1;36m1.00018918e-12\u001b[0m\u001b[1m]\u001b[0m\u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mtype\u001b[0m = \u001b[32m'Simulation'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mversion\u001b[0m = \u001b[32m'1.9.0rc2'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mwvl_mat_min\u001b[0m = \u001b[1;36m1.413235200620076\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mzero_dims\u001b[0m = \u001b[1m[\u001b[0m\u001b[1m]\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\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 doesnt 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 own [td.MonitorData](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.components.data.MonitorData.html) instance.\n", "\n", "Whereas before we needed to access data using `sim.data(monitor)`, now we can access the data by `monitor.name` from the [SimulationData](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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 similar to numpy arrays but provide many additional useful features. For more details refer to the [tutorial on data visualization](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/notebooks/VizData.html)." ] }, { "cell_type": "code", "execution_count": 22, "id": "5a1d45b1", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:47:01.109017Z", "iopub.status.busy": "2023-02-03T01:47:01.108819Z", "iopub.status.idle": "2023-02-03T01:47:01.225960Z", "shell.execute_reply": "2023-02-03T01:47:01.225535Z" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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BLNnzzY8nsnH8eqrr8aXX36ZVs9Rb9KTz3ffffdhwYIFWLx4scH8e/7552v/P378eEyYMAEjRozA4sWLcdJJJyV1v7tDop9x6tSphkjCtGnTcOihh+Ivf/kL7rrrrt7ezQOiJ8fxySefxPjx4zF58mTD45l2HMeMGYOVK1eiqakJzz33HC6++GIsWbLEVvykC0Z8UkC/fv2wd+9ew2N79+5FUVERcnNzUVFRAafTablNv379UrmrB8SCBQtw2WWXYeHChVEhTDMlJSUYPXo0NmzYkKK9Sz6TJ0/W9r+vHEMgXEnxt7/9DRdddBE8Hk/MbTPlOF5zzTV45ZVXsGjRIgwcODDmtnbfR3GcxH8z6Vh25/MJHnjgAdx333148803MWHChJjbDh8+HBUVFWk9jj35jAK3242JEydq+5+JxxDo2Wdsa2vDggULErqxSPdx9Hg8GDlyJI488kjce++9OPzww/HII49YbpvO7yGFTwqYOnUq3nnnHcNjb731lnbH4vF4cOSRRxq2CYVCeOedd2zzo5nGM888g0svvRTPPPOModzSjtbWVmzcuBH9+/dPwd71DitXrtT2vy8cQ8GSJUuwYcOGhC606T6OqqrimmuuwYsvvoh3330Xw4YNi/uceN/HYcOGoV+/foZtmpubsXz58pQfy558PiBcDXPXXXfhv//9L4466qi42+/YsQP19fVpOY49/YwywWAQq1ev1vY/k44hcGCf8dlnn4XP58OFF14Yd9t0HkcrQqEQfD6f5e/S+j08IGt0ltLS0qJ+/vnn6ueff64CUB966CH1888/V7du3aqqqqreeuut6kUXXaRtv2nTJjUvL0/9+c9/rn711Vfqo48+qjqdTvW///2vts2CBQtUr9erzp8/X127dq16xRVXqCUlJeqePXsy/vM9/fTTqsvlUh999FF19+7d2r/GxkZtmxtvvFFdvHixunnzZvXDDz9UZ86cqVZUVKi1tbUp/3yq2v3P+PDDD6svvfSSun79enX16tXqz372M9XhcKhvv/22tk0mHUNV7f5nFFx44YXqlClTLF8z047jVVddpRYXF6uLFy82nHvt7e3aNhdddJF66623aj9/+OGHqsvlUh944AH1q6++UufMmaO63W519erV2jb33XefWlJSor788svqqlWr1O9+97vqsGHD1I6Ojoz/fPfdd5/q8XjU5557zvCclpYWVVXD58VNN92kLlu2TN28ebP69ttvq5MmTVJHjRqldnZ2pvTz9fQzzp07V33jjTfUjRs3qitWrFDPP/98NScnR12zZo22TaYcQ1Xt2WcUHHfccep5550X9XimHcdbb71VXbJkibp582Z11apV6q233qoqiqK++eabqqpm1veQwqcHiNJm87+LL75YVdVwieEJJ5wQ9ZwjjjhC9Xg86vDhw9V58+ZFve4f//hHdfDgwarH41EnT56sfvTRR73/YSzo7uc74YQTYm6vquHy/f79+6sej0cdMGCAet5556kbNmxI7QeT6O5nvP/++9URI0aoOTk5allZmTp9+nT13XffjXrdTDmGqtqz87SxsVHNzc1Vn3jiCcvXzLTjaPX5ABi+XyeccILhXFRVVV24cKE6evRo1ePxqOPGjVNfffVVw+9DoZD661//Wq2urla9Xq960kknqevWrUvBJzLSk883ZMgQy+fMmTNHVVVVbW9vV0855RS1srJSdbvd6pAhQ9TLL788bQK9J5/xuuuu075n1dXV6re//W31s88+M7xuphxDVe35efr111+rADTxIJNpx/HHP/6xOmTIENXj8aiVlZXqSSedZNjvTPoeKqqqqgcWMyKEEEIIOTigx4cQQgghWQOFDyGEEEKyBgofQgghhGQNFD6EEEIIyRoofAghhBCSNVD4EEIIISRroPAhhBBCSNZA4UMISRuLFy+GoihobGxM+XsrigJFUVBSUpKS99uyZYv2nkcccURK3pOQnvLee+/hjDPOQE1NDRRFwUsvvZT297vjjjtwyCGHID8/H6WlpZg5cyaWL1/e7fei8CGEpITp06fjuuuuMzw2bdo07N69G8XFxWnZp3nz5uGbb75JyXsNGjQIu3fvxo033piS9yPkQGhra8Phhx+ORx99NGPeb/To0fjTn/6E1atX44MPPsDQoUNxyimnYN++fd16L9eB7iwhhPQUj8eT1mnZJSUlqKqqSsl7OZ1O9OvXDwUFBSl5P0IOhNNOOw2nnXaa7e99Ph9++ctf4plnnkFjYyMOO+ww3H///Zg+fXqvvB8AXHDBBYafH3roITz55JNYtWoVTjrppITfixEfQkivc8kll2DJkiV45JFHtHTPli1bolJd8+fPR0lJCV555RWMGTMGeXl5+P73v4/29nY89dRTGDp0KEpLS3Ht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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": 23, "id": "9bad3d76", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:47:01.228565Z", "iopub.status.busy": "2023-02-03T01:47:01.228379Z", "iopub.status.idle": "2023-02-03T01:47:01.409749Z", "shell.execute_reply": "2023-02-03T01:47:01.409330Z" } }, "outputs": [ { "data": { "image/png": "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u+++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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.SimulationData.html) provides a method for potting field data with structure overlay, similar to `sim.viz_fields2D()`." ] }, { "cell_type": "code", "execution_count": 24, "id": "72490bd2", "metadata": { "execution": { "iopub.execute_input": "2023-02-03T01:47:01.412105Z", "iopub.status.busy": "2023-02-03T01:47:01.411923Z", "iopub.status.idle": "2023-02-03T01:47:01.625365Z", "shell.execute_reply": "2023-02-03T01:47:01.624855Z" } }, "outputs": [ { "data": { "image/png": "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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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/notebooks/Fitting.html).\n", "\n", "- [Mode solver](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/notebooks/ModeSolver.html).\n", "\n", "- [Near field to far field transformations](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/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", "We won't go into the details in this notebook as each of the plugins has its own example tutorial notebook.\n", "\n", "### Dispersion Fitting\n", "\n", "We provide a [tool for fitting optical data to create dispersive mediums](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.PoleResidue.html) for use in the Simulation.\n", "\n", "### Mode Solver\n", "\n", "The [mode solver](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.plugins.ModeSolver.html) is a similar tool for coming up with [ModeSpec](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_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](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.Box.html) specifying the plane on which to solve the modes for.\n", "\n", "Then, the user can iteratively send different [ModeSpec](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeSpec.html) objects, solve for the results, visulize, and repeat the process until satisfied.\n", "\n", "The resulting [ModeSpec](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeSpec.html) can be saved directly, or used in conjunction with the mode solver settings to return a [ModeSource](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeSource.html) or [ModeMonitor]((https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.ModeMonitor.html).\n", "\n", "### Near2Far\n", "\n", "Finally, the near field to far field transformation tool is used to transform [FieldMonitor](https://docs.flexcompute.com/projects/tidy3d/en/v1.9.0rc2/_autosummary/tidy3d.FieldMonitor.html) data to far field data or scattering cross section data.\n", "\n", "The user specifies a the frequency-domain field data to use as near field source, these fields are converted to equivalent surface currents, and a computation is performed to give the radiation vectors emanating from the monitor location.\n", "\n", "Then, the user can obtain the field patterns or scattered power as a function of position or angle using the various projection methods.\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 notebooks 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": [] }, { "cell_type": "code", "execution_count": null, "id": "581d16bf-9a50-4832-bd87-284b62ebeb14", "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": { "030d60b6a91f45a8ba9160159b620f5b": { "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_3a5db699a8e34582a78f2e40ae6367c8", "msg_id": "", "outputs": [ { "data": { "text/html": "
🏃  Finishing 'web_demo'...\n🏃  Finishing 'web_demo'...
\n", "text/plain": "\r\u001b[2K\u001b[32m🏃 \u001b[0m \u001b[1;32mFinishing 'web_demo'...\u001b[0m\n\u001b[32m🏃 \u001b[0m \u001b[1;32mFinishing 'web_demo'...\u001b[0m" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "3a5db699a8e34582a78f2e40ae6367c8": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": 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, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "446bca374dde4128be1d9eaa8f06a332": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": 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, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "44c3e067eb0c475caf8d5286c4120b0e": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": 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, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4a523d76cb9a427eb67c384634955626": { "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_446bca374dde4128be1d9eaa8f06a332", "msg_id": "", "outputs": [ { "data": { "text/html": "
% done ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--\n% done ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--
\n", "text/plain": "\r\u001b[2K% done \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m\n% done \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "7856a453c9c7479b9e1f8576dd830fbb": { "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_f40d889926664c0b827dbe7101e7980b", "msg_id": "", "outputs": [ { "data": { "text/html": "
 simulation.json ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0%0.0/2.4 kB?-:--:--\n simulation.json ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0%0.0/2.4 kB?-:--:--
\n", "text/plain": "\r\u001b[2K\u001b[1;31m↑\u001b[0m \u001b[1;34msimulation.json\u001b[0m \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m0.0%\u001b[0m • \u001b[32m0.0/2.4 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m-:--:--\u001b[0m\n\u001b[1;31m↑\u001b[0m \u001b[1;34msimulation.json\u001b[0m \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m0.0%\u001b[0m • \u001b[32m0.0/2.4 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m-:--:--\u001b[0m" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "8195b626663e48d387544601c2c4891f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": 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, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a7140b61369b4307a4a22cb453199da6": { "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_44c3e067eb0c475caf8d5286c4120b0e", "msg_id": "", "outputs": [ { "data": { "text/html": "
 monitor_data.hdf5 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0%0.0/48.7 kB?-:--:--\n monitor_data.hdf5 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0%0.0/48.7 kB?-:--:--
\n", "text/plain": "\r\u001b[2K\u001b[1;32m↓\u001b[0m \u001b[1;34mmonitor_data.hdf5\u001b[0m \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m0.0%\u001b[0m • \u001b[32m0.0/48.7 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m-:--:--\u001b[0m\n\u001b[1;32m↓\u001b[0m \u001b[1;34mmonitor_data.hdf5\u001b[0m \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m0.0%\u001b[0m • \u001b[32m0.0/48.7 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m-:--:--\u001b[0m" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } }, "f40d889926664c0b827dbe7101e7980b": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": 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, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "f797d34ab1924227bb51905a386de9a0": { "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_8195b626663e48d387544601c2c4891f", "msg_id": "", "outputs": [ { "data": { "text/html": "
🏃  Starting 'web_demo'...\n🏃  Starting 'web_demo'...
\n", "text/plain": "\r\u001b[2K\u001b[32m🏃 \u001b[0m \u001b[1;32mStarting 'web_demo'...\u001b[0m\n\u001b[32m🏃 \u001b[0m \u001b[1;32mStarting 'web_demo'...\u001b[0m" }, "metadata": {}, "output_type": "display_data" } ], "tabbable": null, "tooltip": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }