{ "cells": [ { "cell_type": "markdown", "id": "1d266682", "metadata": {}, "source": [ "# What's New in Tidy3d?\n", "\n", "Run this notebook in your browser using [Binder](https://mybinder.org/v2/gh/flexcompute-readthedocs/tidy3d-docs/readthedocs?labpath=docs%2Fsource%2Fnotebooks%2FWhatsNew.ipynb).\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": "2022-07-21T21:13:37.215039Z", "iopub.status.busy": "2022-07-21T21:13:37.214541Z", "iopub.status.idle": "2022-07-21T21:13:38.168682Z", "shell.execute_reply": "2022-07-21T21:13:38.168283Z" } }, "outputs": [], "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": "2022-07-21T21:13:38.170690Z", "iopub.status.busy": "2022-07-21T21:13:38.170564Z", "iopub.status.idle": "2022-07-21T21:13:38.176653Z", "shell.execute_reply": "2022-07-21T21:13:38.176339Z" } }, "outputs": [ { "data": { "text/html": [ "
[17:13:38] INFO     __init__() takes exactly 1 positional argument (2 given)  2256051156.py:5\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:13:38]\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=211493;file:///tmp/ipykernel_417328/2256051156.py\u001b\\\u001b[2m2256051156.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=934962;file:///tmp/ipykernel_417328/2256051156.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)" ] }, { "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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.Box.html) instance." ] }, { "cell_type": "code", "execution_count": 3, "id": "20e27567", "metadata": { "execution": { "iopub.execute_input": "2022-07-21T21:13:38.178140Z", "iopub.status.busy": "2022-07-21T21:13:38.178029Z", "iopub.status.idle": "2022-07-21T21:13:38.181021Z", "shell.execute_reply": "2022-07-21T21:13:38.180774Z" } }, "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)" ] }, { "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": "2022-07-21T21:13:38.182441Z", "iopub.status.busy": "2022-07-21T21:13:38.182291Z", "iopub.status.idle": "2022-07-21T21:13:38.194767Z", "shell.execute_reply": "2022-07-21T21:13:38.194536Z" } }, "outputs": [ { "data": { "text/html": [ "
╭──────────────────── <class 'tidy3d.components.monitor.FieldMonitor'> ─────────────────────╮\n",
       " :class:`Monitor` that records electromagnetic fields in the frequency domain.             \n",
       "                                                                                           \n",
       " ╭───────────────────────────────────────────────────────────────────────────────────────╮ \n",
       "  FieldMonitor(type='FieldMonitor', center=(0.0, 0.0, 0.0), size=(2.0, 2.0, 0.0),        \n",
       "  name='monitor', freqs=(200000000000000.0,), fields=('Ex', 'Ey', 'Ez', 'Hx', 'Hy',      \n",
       "  'Hz'), interval_space=(1, 1, 1), colocate=False)                                       \n",
       " ╰───────────────────────────────────────────────────────────────────────────────────────╯ \n",
       "                                                                                           \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(alpha=0.4, edgecolor='orange', facecolor='orange', fill=True, \n",
       "                  hatch=None, linewidth=3.0, type='PlotParams')                            \n",
       "           size = (2.0, 2.0, 0.0)                                                          \n",
       "           type = 'FieldMonitor'                                                           \n",
       "╰───────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\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\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[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\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[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[33mname\u001b[0m=\u001b[32m'monitor'\u001b[0m, \u001b[33mfreqs\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m200000000000000.0\u001b[0m,\u001b[1m)\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│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[32m'Hz'\u001b[0m\u001b[1m)\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[33mcolocate\u001b[0m=\u001b[3;91mFalse\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;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[33malpha\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.4\u001b[0m, \u001b[33medgecolor\u001b[0m=\u001b[32m'orange'\u001b[0m, \u001b[33mfacecolor\u001b[0m=\u001b[32m'orange'\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[33mlinewidth\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\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\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "monitor = td.FieldMonitor(size=(2,2,0), freqs=[200e12], name='monitor')\n", "\n", "monitor.help()" ] }, { "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": "2022-07-21T21:13:38.196286Z", "iopub.status.busy": "2022-07-21T21:13:38.196160Z", "iopub.status.idle": "2022-07-21T21:13:38.197797Z", "shell.execute_reply": "2022-07-21T21:13:38.197565Z" } }, "outputs": [], "source": [ "pec_medium = td.PEC" ] }, { "cell_type": "markdown", "id": "345d55ad", "metadata": {}, "source": [ "#### Non-dispersive mediums\n", "Non-dispersive mediums are defined using the [Medium](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:13:38.199325Z", "iopub.status.busy": "2022-07-21T21:13:38.199205Z", "iopub.status.idle": "2022-07-21T21:13:38.201100Z", "shell.execute_reply": "2022-07-21T21:13:38.200859Z" } }, "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)" ] }, { "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.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:13:38.202664Z", "iopub.status.busy": "2022-07-21T21:13:38.202519Z", "iopub.status.idle": "2022-07-21T21:13:38.204159Z", "shell.execute_reply": "2022-07-21T21:13:38.203932Z" } }, "outputs": [], "source": [ "anisotropic_medium = td.AnisotropicMedium(\n", " xx=lossless_dielectric,\n", " yy=lossy_dielectric,\n", " zz=lossy_dielectric_from_nk\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.simulation.cloud/projects/tidy3d/en/latest/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": "2022-07-21T21:13:38.205671Z", "iopub.status.busy": "2022-07-21T21:13:38.205574Z", "iopub.status.idle": "2022-07-21T21:13:38.207904Z", "shell.execute_reply": "2022-07-21T21:13:38.207656Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "variants for silver include: ['Rakic1998', 'JohnsonChristy1972']\n" ] } ], "source": [ "# material library\n", "silver_variants = td.material_library['Ag']\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)])" ] }, { "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": "2022-07-21T21:13:38.209485Z", "iopub.status.busy": "2022-07-21T21:13:38.209305Z", "iopub.status.idle": "2022-07-21T21:13:38.290202Z", "shell.execute_reply": "2022-07-21T21:13:38.289793Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "complex relative permittivity at freqs_hz = \n", "\t [4.+359.50208038j 4.+358.42679998j 4.+357.35793278j ... 4. +90.0105359j\n", " 4. +89.94297733j 4. +89.87552009j]\n", "\n" ] }, { "data": { "text/html": [ "
<Figure size 432x288 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "freqs_hz = 1e12 * np.linspace(50, 200, 1001)\n", "print(f'complex relative permittivity at freqs_hz = \\n\\t {lossy_dielectric.eps_model(freqs_hz)}\\n')\n", "\n", "ax = lossy_dielectric_from_nk.plot(freqs_hz)" ] }, { "cell_type": "markdown", "id": "a99bcacc", "metadata": {}, "source": [ "### Geometries\n", "\n", "The new version of Tidy3D introduces [Geometry](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.Box.html)\n", "\n", "- [Sphere](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.Sphere.html)\n", "\n", "- [Cylinder](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.Cylinder.html)\n", "\n", "- [Polyslab](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.PolySlab.html)\n", "\n", "Note that `GdsSlab` was removed, but GDS cells can still be loaded as [Polyslab](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.PolySlab.html) objects using `PolySlab.from_gds()` classmethod. Please refer to the [tutorial notebook on GDS importing](https://docs.simulation.cloud/projects/tidy3d/en/latest/notebooks/GDS_import.html) for more details.\n", "\n", "[Geometry](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.components.geometry.Geometry.html) objects have many useful methods." ] }, { "cell_type": "code", "execution_count": 10, "id": "15b8d749", "metadata": { "execution": { "iopub.execute_input": "2022-07-21T21:13:38.291990Z", "iopub.status.busy": "2022-07-21T21:13:38.291836Z", "iopub.status.idle": "2022-07-21T21:13:38.351713Z", "shell.execute_reply": "2022-07-21T21:13:38.351230Z" } }, "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(alpha=1.0, edgecolor=None, facecolor=None, fill=True,           \n",
       "                hatch=None, linewidth=1.0, type='PlotParams')                              \n",
       "         size = (2.0, 2.0, 2.0)                                                            \n",
       "         type = 'Box'                                                                      \n",
       "╰───────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\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\n", "\u001b[34m│\u001b[0m \u001b[36mRectangular prism.\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[36mAlso 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[33malpha\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33medgecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mfacecolor\u001b[0m=\u001b[3;35mNone\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[33mlinewidth\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\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\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "None\n", "False\n", "[False False True False False]\n" ] }, { "data": { "text/html": [ "
<Figure size 432x288 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "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)" ] }, { "cell_type": "markdown", "id": "581841bb", "metadata": {}, "source": [ "Note, because simulations, monitors, and sources all are defined spatially, they inherit from [Box](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.Structure.html) as something that simply contains a [Geometry](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.components.geometry.Geometry.html) and a [Medium](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:13:38.353335Z", "iopub.status.busy": "2022-07-21T21:13:38.353200Z", "iopub.status.idle": "2022-07-21T21:13:38.358071Z", "shell.execute_reply": "2022-07-21T21:13:38.357690Z" } }, "outputs": [ { "data": { "text/html": [ "
           INFO     3 validation errors for Structure                         1190380030.py:8\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 \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m \u001b[1;36m3\u001b[0m validation errors for Structure \u001b]8;id=634092;file:///tmp/ipykernel_417328/1190380030.py\u001b\\\u001b[2m1190380030.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=568326;file:///tmp/ipykernel_417328/1190380030.py#8\u001b\\\u001b[2m8\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),\n", " size=(1,1,1),\n", " medium=td.Medium(permittivity=2.0))\n", "except Exception as e:\n", " td.log.info(e)\n", "\n", "# new way\n", "dielectric_box = td.Structure(\n", " geometry=td.Box(\n", " center=(0,0,0),\n", " size=(1,1,1)\n", " ),\n", " medium=td.Medium(permittivity=2.0)\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.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:13:38.359614Z", "iopub.status.busy": "2022-07-21T21:13:38.359397Z", "iopub.status.idle": "2022-07-21T21:13:38.362095Z", "shell.execute_reply": "2022-07-21T21:13:38.361793Z" } }, "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),\n", " size=(0,0,0),\n", " source_time=gaussian,\n", " 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", ")" ] }, { "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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.FieldMonitor.html)\n", "\n", "- [FluxMonitor](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.FluxMonitor.html)\n", "\n", "- [ModeMonitor](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeMonitor.html)\n", "\n", "And the following measure their values in the time-domain\n", "\n", "- [FieldTimeMonitor](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.FieldTimeMonitor.html)\n", "\n", "- [FluxTimeMonitor](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:13:38.363563Z", "iopub.status.busy": "2022-07-21T21:13:38.363379Z", "iopub.status.idle": "2022-07-21T21:13:38.365845Z", "shell.execute_reply": "2022-07-21T21:13:38.365599Z" } }, "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", ")" ] }, { "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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeSource.html) and [ModeMonitor](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeMonitor.html) objects.\n", "\n", "For example:" ] }, { "cell_type": "code", "execution_count": 14, "id": "86f4f9e1", "metadata": { "execution": { "iopub.execute_input": "2022-07-21T21:13:38.367357Z", "iopub.status.busy": "2022-07-21T21:13:38.367247Z", "iopub.status.idle": "2022-07-21T21:13:38.369266Z", "shell.execute_reply": "2022-07-21T21:13:38.369009Z" } }, "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)" ] }, { "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": "2022-07-21T21:13:38.370594Z", "iopub.status.busy": "2022-07-21T21:13:38.370441Z", "iopub.status.idle": "2022-07-21T21:13:38.372933Z", "shell.execute_reply": "2022-07-21T21:13:38.372689Z" } }, "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", ")" ] }, { "cell_type": "markdown", "id": "82b91979", "metadata": {}, "source": [ "The [td.plugins.ModeSolver](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.plugins.ModeSolver.html) is designed to help users come up with the correct [ModeSpec](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeSpec.html) for their problem, at which point it can be used directly in [ModeSource](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeSource.html) and [ModeMonitor](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeMonitor.html) objects without setting it explicitly using a [Simulation](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.Simulation.html) method. For more details, refer to the [mode solver tutorial notebook](https://docs.simulation.cloud/projects/tidy3d/en/latest/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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.PML.html) defines a standard PML, with an adjustable number of layers.\n", "\n", "- [td.StablePML()](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.BoundarySpec.html) and [td.Boundary()](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:13:38.374497Z", "iopub.status.busy": "2022-07-21T21:13:38.374330Z", "iopub.status.idle": "2022-07-21T21:13:38.376598Z", "shell.execute_reply": "2022-07-21T21:13:38.376341Z" } }, "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(),\n", " y=td.Boundary.pml(num_layers=20)\n", ")" ] }, { "cell_type": "markdown", "id": "f58489c6", "metadata": {}, "source": [ "### Simulations\n", "\n", "Finally, as before, [Simulation](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/notebooks/AutoGrid.html)." ] }, { "cell_type": "code", "execution_count": 17, "id": "11cf6c24", "metadata": { "execution": { "iopub.execute_input": "2022-07-21T21:13:38.378184Z", "iopub.status.busy": "2022-07-21T21:13:38.378006Z", "iopub.status.idle": "2022-07-21T21:13:38.380797Z", "shell.execute_reply": "2022-07-21T21:13:38.380525Z" } }, "outputs": [], "source": [ "sim = td.Simulation(\n", " size=(4, 4, 4),\n", " grid_spec=td.GridSpec.uniform(dl=.2),\n", " run_time=1e-12,\n", " boundary_spec=td.BoundarySpec.pml(y=True),\n", " structures=[dielectric_box],\n", " sources=[dipole],\n", " monitors=[mon1, mon2],\n", ")" ] }, { "cell_type": "markdown", "id": "09dba7ad", "metadata": {}, "source": [ "A defined [Simulation](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.Simulation.html) also provides several useful methods in addition to the ones inhereted from [Box](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.Box.html)." ] }, { "cell_type": "code", "execution_count": 18, "id": "c9ccd22a", "metadata": { "execution": { "iopub.execute_input": "2022-07-21T21:13:38.382165Z", "iopub.status.busy": "2022-07-21T21:13:38.381984Z", "iopub.status.idle": "2022-07-21T21:13:38.652961Z", "shell.execute_reply": "2022-07-21T21:13:38.652636Z" } }, "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": { "text/html": [ "
<Figure size 720x288 with 3 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 72\u001b[0m\u001b[1;36m0x288\u001b[0m\u001b[39m with \u001b[0m\u001b[1;36m3\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "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)" ] }, { "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.simulation.cloud/projects/tidy3d/en/latest/api.html#submitting-simulations) functions.\n", "* working with [tidy3d.web.Job](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.web.container.Job.html) and [tidy3d.web.Batch](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.web.container.Batch.html) convenience containers." ] }, { "cell_type": "code", "execution_count": 19, "id": "9f16e7e9", "metadata": { "execution": { "iopub.execute_input": "2022-07-21T21:13:38.654731Z", "iopub.status.busy": "2022-07-21T21:13:38.654602Z", "iopub.status.idle": "2022-07-21T21:13:38.656474Z", "shell.execute_reply": "2022-07-21T21:13:38.656234Z" } }, "outputs": [], "source": [ "import tidy3d.web as web" ] }, { "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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.web.webapi.upload.html) accepts the original [Simulation](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.web.webapi.get_info.html)\n", "\n", "- [task_id = web.upload(sim, task_name)](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.SimulationData.html). Whereas before it was a [Simulation](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:13:38.658072Z", "iopub.status.busy": "2022-07-21T21:13:38.657905Z", "iopub.status.idle": "2022-07-21T21:14:17.141786Z", "shell.execute_reply": "2022-07-21T21:14:17.141520Z" } }, "outputs": [ { "data": { "text/html": [ "
           INFO     Using Tidy3D credentials from stored file                      auth.py:74\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using Tidy3D credentials from stored file \u001b]8;id=253060;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/auth.py\u001b\\\u001b[2mauth.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=494173;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/auth.py#74\u001b\\\u001b[2m74\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[17:13:40] INFO     Uploaded task 'web_demo' with task_id                       webapi.py:120\n",
       "                    'cda389b1-12ca-4601-99f8-341142265859'.                                  \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:13:40]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Uploaded task \u001b[32m'web_demo'\u001b[0m with task_id \u001b]8;id=42219;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=573463;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#120\u001b\\\u001b[2m120\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m \u001b[32m'cda389b1-12ca-4601-99f8-341142265859'\u001b[0m. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "20de26f0db454e7783e4174b991fa03a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[17:13:43] INFO     status = queued                                             webapi.py:253\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:13:43]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m status = queued \u001b]8;id=890689;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=134788;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#253\u001b\\\u001b[2m253\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3aeb76126c784ada937463596973cf1a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[17:13:47] INFO     Maximum flex unit cost: 0.20                                webapi.py:244\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:13:47]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Maximum flex unit cost: \u001b[1;36m0.20\u001b[0m \u001b]8;id=491271;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=698758;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#244\u001b\\\u001b[2m244\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[17:13:51] INFO     status = preprocess                                         webapi.py:265\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:13:51]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m status = preprocess \u001b]8;id=298991;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=357753;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#265\u001b\\\u001b[2m265\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
[17:14:00] INFO     starting up solver                                          webapi.py:269\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:14:00]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m starting up solver \u001b]8;id=839637;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=749664;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#269\u001b\\\u001b[2m269\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[17:14:08] INFO     running solver                                              webapi.py:275\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:14:08]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m running solver \u001b]8;id=301578;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=876358;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#275\u001b\\\u001b[2m275\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a288446a022a418aadc7a3f244c6594c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2479aa6382cd49c29464e280ee56b258", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[17:14:09] INFO     status = postprocess                                        webapi.py:298\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:14:09]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m status = postprocess \u001b]8;id=277502;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=149625;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#298\u001b\\\u001b[2m298\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[17:14:14] INFO     status = success                                            webapi.py:298\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:14:14]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m status = success \u001b]8;id=214369;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=88499;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#298\u001b\\\u001b[2m298\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
[17:14:15] INFO     downloading file \"output/monitor_data.hdf5\" to              webapi.py:574\n",
       "                    \"data/data.hdf5\"                                                         \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:14:15]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m downloading file \u001b[32m\"output/monitor_data.hdf5\"\u001b[0m to \u001b]8;id=198274;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=192098;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#574\u001b\\\u001b[2m574\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m \u001b[32m\"data/data.hdf5\"\u001b[0m \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c968498c74654c60b4b8d89d7c37b070", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[17:14:17] INFO     loading SimulationData from data/data.hdf5                  webapi.py:398\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[17:14:17]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m loading SimulationData from data/data.hdf5 \u001b]8;id=490583;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=705906;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#398\u001b\\\u001b[2m398\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           WARNING  Simulation final field decay value of 0.0267 is greater     webapi.py:404\n",
       "                    than the simulation shutoff threshold of 1e-05. Consider                 \n",
       "                    simulation again with large run_time duration for more                   \n",
       "                    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.0267\u001b[0m is greater \u001b]8;id=815075;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=1;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/webapi.py#404\u001b\\\u001b[2m404\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m than the simulation shutoff threshold of \u001b[1;36m1e-05\u001b[0m. Consider \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m simulation again with large run_time duration for more \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m 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')" ] }, { "cell_type": "markdown", "id": "fc5071ee", "metadata": {}, "source": [ "### Containers\n", "\n", "The new version also contains the convenience containers [Job](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.web.container.Job.html) and [Batch](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.web.container.Batch.html) objects return generators that can be iterated through to give [SimulationData](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:14:17.361483Z", "iopub.status.busy": "2022-07-21T21:14:17.361336Z", "iopub.status.idle": "2022-07-21T21:14:17.404575Z", "shell.execute_reply": "2022-07-21T21:14:17.404301Z" } }, "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.8860e+03\n", "Automatic shutoff factor: 1.00e-05\n", "Time step (s): 3.4665e-16\n", "\n", "\n", "Compute source modes time (s): 0.0036\n", "Compute monitor modes time (s): 0.0019\n", "Rest of setup time (s): 3.3575\n", "\n", "Running solver for 2886 time steps...\n", "- Time step 115 / time 3.99e-14s ( 4 % done), field decay: 1.00e+00\n", "- Time step 230 / time 7.97e-14s ( 8 % done), field decay: 1.00e+00\n", "- Time step 346 / time 1.20e-13s ( 12 % done), field decay: 4.50e-01\n", "- Time step 461 / time 1.60e-13s ( 16 % done), field decay: 4.12e-01\n", "- Time step 577 / time 2.00e-13s ( 20 % done), field decay: 3.37e-01\n", "- Time step 692 / time 2.40e-13s ( 24 % done), field decay: 1.06e-01\n", "- Time step 808 / time 2.80e-13s ( 28 % done), field decay: 1.09e-02\n", "- Time step 923 / time 3.20e-13s ( 32 % done), field decay: 6.20e-02\n", "- Time step 1038 / time 3.60e-13s ( 36 % done), field decay: 1.64e-01\n", "- Time step 1154 / time 4.00e-13s ( 40 % done), field decay: 1.49e-01\n", "- Time step 1269 / time 4.40e-13s ( 44 % done), field decay: 6.08e-02\n", "- Time step 1385 / time 4.80e-13s ( 48 % done), field decay: 1.62e-02\n", "- Time step 1500 / time 5.20e-13s ( 52 % done), field decay: 2.49e-02\n", "- Time step 1616 / time 5.60e-13s ( 56 % done), field decay: 5.67e-02\n", "- Time step 1731 / time 6.00e-13s ( 60 % done), field decay: 8.48e-02\n", "- Time step 1847 / time 6.40e-13s ( 64 % done), field decay: 6.30e-02\n", "- Time step 1962 / time 6.80e-13s ( 68 % done), field decay: 1.34e-02\n", "- Time step 2077 / time 7.20e-13s ( 72 % done), field decay: 8.45e-03\n", "- Time step 2193 / time 7.60e-13s ( 76 % done), field decay: 2.59e-02\n", "- Time step 2308 / time 8.00e-13s ( 80 % done), field decay: 4.81e-02\n", "- Time step 2424 / time 8.40e-13s ( 84 % done), field decay: 3.91e-02\n", "- Time step 2539 / time 8.80e-13s ( 88 % done), field decay: 1.22e-02\n", "- Time step 2655 / time 9.20e-13s ( 92 % done), field decay: 3.15e-03\n", "- Time step 2770 / time 9.60e-13s ( 96 % done), field decay: 1.15e-02\n", "- Time step 2885 / time 1.00e-12s (100 % done), field decay: 2.67e-02\n", "\n", "Solver time (s): 0.4538\n", "Post-processing time (s): 0.0214\n", "\n", "\n" ] }, { "data": { "text/html": [ "
╭──────────────────── <class 'tidy3d.components.simulation.Simulation'> ────────────────────╮\n",
       " Contains all information about Tidy3d simulation.                                         \n",
       "                                                                                           \n",
       " ╭───────────────────────────────────────────────────────────────────────────────────────╮ \n",
       "  Simulation(type='Simulation', center=(0.0, 0.0, 0.0), size=(4.0, 4.0, 4.0),            \n",
       "  run_time=1e-12, grid_size=None, medium=Medium(name=None, frequency_range=None,         \n",
       "  type='Medium', permittivity=1.0, conductivity=0.0), symmetry=(0, 0, 0),                \n",
       "  structures=(Structure(geometry=Box(type='Box', center=(0.0, 0.0, 0.0), size=(1.0,      \n",
       "  1.0, 1.0)), medium=Medium(name=None, frequency_range=None, type='Medium',              \n",
       "  permittivity=2.0, conductivity=0.0), name=None, type='Structure'),),                   \n",
       "  sources=(UniformCurrentSource(type='UniformCurrentSource', center=(0.0, 0.0, 0.0),     \n",
       "  size=(0.0, 0.0, 0.0), source_time=GaussianPulse(amplitude=1.0, phase=0.0,              \n",
       "  type='GaussianPulse', freq0=150000000000000.0, fwidth=10000000000000.0, offset=5.0),   \n",
       "  name=None, polarization='Ez'),),                                                       \n",
       "  boundary_spec=BoundarySpec(x=Boundary(plus=Periodic(name=None, type='Periodic'),       \n",
       "  minus=Periodic(name=None, type='Periodic'), type='Boundary'),                          \n",
       "  y=Boundary(plus=PML(name=None, type='PML', num_layers=12,                              \n",
       "  parameters=PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.5, type='PMLParams',    \n",
       "  kappa_order=3, kappa_min=1.0, kappa_max=3.0, alpha_order=1, alpha_min=0.0,             \n",
       "  alpha_max=0.0)), minus=PML(name=None, type='PML', num_layers=12,                       \n",
       "  parameters=PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.5, type='PMLParams',    \n",
       "  kappa_order=3, kappa_min=1.0, kappa_max=3.0, alpha_order=1, alpha_min=0.0,             \n",
       "  alpha_max=0.0)), type='Boundary'), z=Boundary(plus=Periodic(name=None,                 \n",
       "  type='Periodic'), minus=Periodic(name=None, type='Periodic'), type='Boundary'),        \n",
       "  type='BoundarySpec'), monitors=(FieldMonitor(type='FieldMonitor', center=(1.0, 0.0,    \n",
       "  0.0), size=(inf, inf, 0.0), name='fields_at_150THz', freqs=(150000000000000.0,),       \n",
       "  fields=('Ex', 'Ey', 'Hz'), interval_space=(1, 1, 1), colocate=False),                  \n",
       "  FluxTimeMonitor(type='FluxTimeMonitor', center=(1.0, 0.0, 0.0), size=(inf, inf, 0.0),  \n",
       "  name='flux_over_time', start=1e-13, stop=3e-13, interval=5)),                          \n",
       "  grid_spec=GridSpec(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), wavelength=None,                       \n",
       "  override_structures=(), type='GridSpec'), shutoff=1e-05, subpixel=True, courant=0.9,   \n",
       "  version='1.5.0')                                                                       \n",
       " ╰───────────────────────────────────────────────────────────────────────────────────────╯ \n",
       "                                                                                           \n",
       " background_structure = Structure(geometry=Box(type='Box', center=(0.0, 0.0, 0.0),         \n",
       "                        size=(inf, inf, inf)), medium=Medium(name=None,                    \n",
       "                        frequency_range=None, type='Medium', permittivity=1.0,             \n",
       "                        conductivity=0.0), name=None, type='Structure')                    \n",
       "        boundary_spec = BoundarySpec(x=Boundary(plus=Periodic(name=None, type='Periodic'), \n",
       "                        minus=Periodic(name=None, type='Periodic'), type='Boundary'),      \n",
       "                        y=Boundary(plus=PML(name=None, type='PML', num_layers=12,          \n",
       "                        parameters=PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.5,  \n",
       "                        type='PMLParams', kappa_order=3, kappa_min=1.0, kappa_max=3.0,     \n",
       "                        alpha_order=1, alpha_min=0.0, alpha_max=0.0)),                     \n",
       "                        minus=PML(name=None, type='PML', num_layers=12,                    \n",
       "                        parameters=PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.5,  \n",
       "                        type='PMLParams', kappa_order=3, kappa_min=1.0, kappa_max=3.0,     \n",
       "                        alpha_order=1, alpha_min=0.0, alpha_max=0.0)), type='Boundary'),   \n",
       "                        z=Boundary(plus=Periodic(name=None, type='Periodic'),              \n",
       "                        minus=Periodic(name=None, type='Periodic'), type='Boundary'),      \n",
       "                        type='BoundarySpec')                                               \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",
       "              courant = 0.9                                                                \n",
       "                   dt = 3.4664997560661523e-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(boundaries=Coords(x=(-2.0, -1.8, -1.6, -1.4, -1.2, -1.0,      \n",
       "                        -0.7999999999999998, -0.5999999999999999, -0.3999999999999999,     \n",
       "                        -0.19999999999999996, 0.0, 0.20000000000000018,                    \n",
       "                        0.40000000000000036, 0.6000000000000001, 0.8000000000000003, 1.0,  \n",
       "                        1.2000000000000002, 1.4000000000000004, 1.6, 1.8000000000000003,   \n",
       "                        2.0), y=(-4.3999999999999995, -4.199999999999999,                  \n",
       "                        -3.9999999999999996, -3.8, -3.5999999999999996,                    \n",
       "                        -3.3999999999999995, -3.1999999999999997, -3.0, -2.8,              \n",
       "                        -2.5999999999999996, -2.4, -2.2, -2.0, -1.8, -1.6, -1.4, -1.2,     \n",
       "                        -1.0, -0.7999999999999998, -0.5999999999999999,                    \n",
       "                        -0.3999999999999999, -0.19999999999999996, 0.0,                    \n",
       "                        0.20000000000000018, 0.40000000000000036, 0.6000000000000001,      \n",
       "                        0.8000000000000003, 1.0, 1.2000000000000002, 1.4000000000000004,   \n",
       "                        1.6, 1.8000000000000003, 2.0, 2.1999999999999997,                  \n",
       "                        2.3999999999999995, 2.599999999999999, 2.799999999999999,          \n",
       "                        2.9999999999999987, 3.1999999999999984, 3.399999999999998,         \n",
       "                        3.599999999999998, 3.7999999999999976, 3.9999999999999973,         \n",
       "                        4.1999999999999975, 4.399999999999997), z=(-2.0, -1.8, -1.6, -1.4, \n",
       "                        -1.2, -1.0, -0.7999999999999998, -0.5999999999999999,              \n",
       "                        -0.3999999999999999, -0.19999999999999996, 0.0,                    \n",
       "                        0.20000000000000018, 0.40000000000000036, 0.6000000000000001,      \n",
       "                        0.8000000000000003, 1.0, 1.2000000000000002, 1.4000000000000004,   \n",
       "                        1.6, 1.8000000000000003, 2.0), type='Coords'), type='Grid')        \n",
       "            grid_size = None                                                               \n",
       "            grid_spec = GridSpec(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), wavelength=None,   \n",
       "                        override_structures=(), type='GridSpec')                           \n",
       "               medium = Medium(name=None, frequency_range=None, type='Medium',             \n",
       "                        permittivity=1.0, conductivity=0.0)                                \n",
       "           medium_map = {                                                                  \n",
       "                            Medium(name=None, frequency_range=None, type='Medium',         \n",
       "                        permittivity=1.0, conductivity=0.0): 0,                            \n",
       "                            Medium(name=None, frequency_range=None, type='Medium',         \n",
       "                        permittivity=2.0, conductivity=0.0): 1                             \n",
       "                        }                                                                  \n",
       "              mediums = [                                                                  \n",
       "                            Medium(name=None, frequency_range=None, type='Medium',         \n",
       "                        permittivity=1.0, conductivity=0.0),                               \n",
       "                            Medium(name=None, frequency_range=None, type='Medium',         \n",
       "                        permittivity=2.0, conductivity=0.0)                                \n",
       "                        ]                                                                  \n",
       "             monitors = (                                                                  \n",
       "                            FieldMonitor(type='FieldMonitor', center=(1.0, 0.0, 0.0),      \n",
       "                        size=(inf, inf, 0.0), name='fields_at_150THz',                     \n",
       "                        freqs=(150000000000000.0,), fields=('Ex', 'Ey', 'Hz'),             \n",
       "                        interval_space=(1, 1, 1), colocate=False),                         \n",
       "                            FluxTimeMonitor(type='FluxTimeMonitor', center=(1.0, 0.0,      \n",
       "                        0.0), size=(inf, inf, 0.0), name='flux_over_time', start=1e-13,    \n",
       "                        stop=3e-13, interval=5)                                            \n",
       "                        )                                                                  \n",
       "            num_cells = 17600                                                              \n",
       "       num_pml_layers = [[0, 0], [12, 12], [0, 0]]                                         \n",
       "       num_time_steps = 2886                                                               \n",
       "          plot_params = PlotParams(alpha=1.0, edgecolor=None, facecolor=None, fill=True,   \n",
       "                        hatch=None, linewidth=1.0, type='PlotParams')                      \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",
       "                 size = (4.0, 4.0, 4.0)                                                    \n",
       "              sources = (                                                                  \n",
       "                            UniformCurrentSource(type='UniformCurrentSource', center=(0.0, \n",
       "                        0.0, 0.0), size=(0.0, 0.0, 0.0),                                   \n",
       "                        source_time=GaussianPulse(amplitude=1.0, phase=0.0,                \n",
       "                        type='GaussianPulse', freq0=150000000000000.0,                     \n",
       "                        fwidth=10000000000000.0, offset=5.0), name=None,                   \n",
       "                        polarization='Ez'),                                                \n",
       "                        )                                                                  \n",
       "           structures = (                                                                  \n",
       "                            Structure(geometry=Box(type='Box', center=(0.0, 0.0, 0.0),     \n",
       "                        size=(1.0, 1.0, 1.0)), medium=Medium(name=None,                    \n",
       "                        frequency_range=None, type='Medium', permittivity=2.0,             \n",
       "                        conductivity=0.0), name=None, type='Structure'),                   \n",
       "                        )                                                                  \n",
       "             subpixel = True                                                               \n",
       "             symmetry = (0, 0, 0)                                                          \n",
       "                tmesh = array([0.00000000e+00, 3.46649976e-16, 6.93299951e-16, ...,        \n",
       "                               9.99391880e-13, 9.99738530e-13, 1.00008518e-12])            \n",
       "                 type = 'Simulation'                                                       \n",
       "              version = '1.5.0'                                                            \n",
       "          wvl_mat_min = TypeError(\"'float' object is not iterable\")                        \n",
       "╰───────────────────────────────────────────────────────────────────────────────────────────╯\n",
       "
\n" ], "text/plain": [ "\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\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[33mtype\u001b[0m=\u001b[32m'Simulation'\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[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[33mrun_time\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-12\u001b[0m, \u001b[33mgrid_size\u001b[0m=\u001b[3;35mNone\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[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\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[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[33mstructures\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;35mStructure\u001b[0m\u001b[1m(\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[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\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[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\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[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Structure'\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[33msources\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;35mUniformCurrentSource\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'UniformCurrentSource'\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[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[33msource_time\u001b[0m=\u001b[1;35mGaussianPulse\u001b[0m\u001b[1m(\u001b[0m\u001b[33mamplitude\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\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[33mtype\u001b[0m=\u001b[32m'GaussianPulse'\u001b[0m, \u001b[33mfreq0\u001b[0m=\u001b[1;36m150000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33mfwidth\u001b[0m=\u001b[1;36m10000000000000\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33moffset\u001b[0m=\u001b[1;36m5\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[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mpolarization\u001b[0m=\u001b[32m'Ez'\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[33mboundary_spec\u001b[0m=\u001b[1;35mBoundarySpec\u001b[0m\u001b[1m(\u001b[0m\u001b[33mx\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\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[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[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[33my\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\u001b[0m\u001b[33mplus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'PML'\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[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m\u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\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[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33malpha_order\u001b[0m=\u001b[1;36m1\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[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mminus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'PML'\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[33mparameters\u001b[0m=\u001b[1;35mPMLParams\u001b[0m\u001b[1m(\u001b[0m\u001b[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33msigma_max\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.5\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[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33mkappa_max\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33malpha_order\u001b[0m=\u001b[1;36m1\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[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mz\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\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[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'Periodic'\u001b[0m\u001b[1m)\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[33mtype\u001b[0m=\u001b[32m'Boundary'\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[33mtype\u001b[0m=\u001b[32m'BoundarySpec'\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mmonitors\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;35mFieldMonitor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mname\u001b[0m=\u001b[32m'fields_at_150THz'\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[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[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[33mcolocate\u001b[0m=\u001b[3;91mFalse\u001b[0m\u001b[1m)\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[1;35mFluxTimeMonitor\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'FluxTimeMonitor'\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[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[33mname\u001b[0m=\u001b[32m'flux_over_time'\u001b[0m, \u001b[33mstart\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[33mstop\u001b[0m=\u001b[1;36m3e\u001b[0m\u001b[1;36m-13\u001b[0m, \u001b[33minterval\u001b[0m=\u001b[1;36m5\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[33mgrid_spec\u001b[0m=\u001b[1;35mGridSpec\u001b[0m\u001b[1m(\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[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[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[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[33moverride_structures\u001b[0m=\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'GridSpec'\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mshutoff\u001b[0m=\u001b[1;36m1e\u001b[0m\u001b[1;36m-05\u001b[0m, \u001b[33msubpixel\u001b[0m=\u001b[3;92mTrue\u001b[0m, \u001b[33mcourant\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.9\u001b[0m, \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[33mversion\u001b[0m=\u001b[32m'1.5.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[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[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[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, inf\u001b[1m)\u001b[0m\u001b[1m)\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[34m│\u001b[0m\n", "\u001b[34m│\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[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Structure'\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[33mx\u001b[0m=\u001b[1;35mBoundary\u001b[0m\u001b[1m(\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[33mtype\u001b[0m=\u001b[32m'Boundary'\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[33mplus\u001b[0m=\u001b[1;35mPML\u001b[0m\u001b[1m(\u001b[0m\u001b[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'PML'\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[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\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[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\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[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m\u001b[1m)\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[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'PML'\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[33msigma_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[33msigma_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\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[33mkappa_order\u001b[0m=\u001b[1;36m3\u001b[0m, \u001b[33mkappa_min\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\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[33malpha_min\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33malpha_max\u001b[0m=\u001b[1;36m0\u001b[0m\u001b[1;36m.0\u001b[0m\u001b[1m)\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Boundary'\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[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[33mtype\u001b[0m=\u001b[32m'Boundary'\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[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;33mcourant\u001b[0m = \u001b[1;36m0.9\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mdt\u001b[0m = \u001b[1;36m3.4664997560661523e-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[33mboundaries\u001b[0m=\u001b[1;35mCoords\u001b[0m\u001b[1m(\u001b[0m\u001b[33mx\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m-2.0\u001b[0m, \u001b[1;36m-1.8\u001b[0m, \u001b[1;36m-1.6\u001b[0m, \u001b[1;36m-1.4\u001b[0m, \u001b[1;36m-1.2\u001b[0m, \u001b[1;36m-1.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-0.7999999999999998\u001b[0m, \u001b[1;36m-0.5999999999999999\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[1;36m0.0\u001b[0m, \u001b[1;36m0.20000000000000018\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.40000000000000036\u001b[0m, \u001b[1;36m0.6000000000000001\u001b[0m, \u001b[1;36m0.8000000000000003\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.2000000000000002\u001b[0m, \u001b[1;36m1.4000000000000004\u001b[0m, \u001b[1;36m1.6\u001b[0m, \u001b[1;36m1.8000000000000003\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33my\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m-4.3999999999999995\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[1;36m-3.8\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[1;36m-3.1999999999999997\u001b[0m, \u001b[1;36m-3.0\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[1;36m-2.4\u001b[0m, \u001b[1;36m-2.2\u001b[0m, \u001b[1;36m-2.0\u001b[0m, \u001b[1;36m-1.8\u001b[0m, \u001b[1;36m-1.6\u001b[0m, \u001b[1;36m-1.4\u001b[0m, \u001b[1;36m-1.2\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m-1.0\u001b[0m, \u001b[1;36m-0.7999999999999998\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[1;36m-0.19999999999999996\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.20000000000000018\u001b[0m, \u001b[1;36m0.40000000000000036\u001b[0m, \u001b[1;36m0.6000000000000001\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.8000000000000003\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.2000000000000002\u001b[0m, \u001b[1;36m1.4000000000000004\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.6\u001b[0m, \u001b[1;36m1.8000000000000003\u001b[0m, \u001b[1;36m2.0\u001b[0m, \u001b[1;36m2.1999999999999997\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.3999999999999995\u001b[0m, \u001b[1;36m2.599999999999999\u001b[0m, \u001b[1;36m2.799999999999999\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m2.9999999999999987\u001b[0m, \u001b[1;36m3.1999999999999984\u001b[0m, \u001b[1;36m3.399999999999998\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m3.599999999999998\u001b[0m, \u001b[1;36m3.7999999999999976\u001b[0m, \u001b[1;36m3.9999999999999973\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m4.1999999999999975\u001b[0m, \u001b[1;36m4.399999999999997\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mz\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m-2.0\u001b[0m, \u001b[1;36m-1.8\u001b[0m, \u001b[1;36m-1.6\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[1;36m-1.0\u001b[0m, \u001b[1;36m-0.7999999999999998\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[1;36m-0.19999999999999996\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.20000000000000018\u001b[0m, \u001b[1;36m0.40000000000000036\u001b[0m, \u001b[1;36m0.6000000000000001\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.8000000000000003\u001b[0m, \u001b[1;36m1.0\u001b[0m, \u001b[1;36m1.2000000000000002\u001b[0m, \u001b[1;36m1.4000000000000004\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m1.6\u001b[0m, \u001b[1;36m1.8000000000000003\u001b[0m, \u001b[1;36m2.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Coords'\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Grid'\u001b[0m\u001b[1m)\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[3;33mgrid_size\u001b[0m = \u001b[3;35mNone\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[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[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[33mtype\u001b[0m=\u001b[32m'GridSpec'\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[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[34m│\u001b[0m\n", "\u001b[34m│\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[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[34m│\u001b[0m\n", "\u001b[34m│\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[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[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\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[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[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[34m│\u001b[0m\n", "\u001b[34m│\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[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[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[33mpermittivity\u001b[0m=\u001b[1;36m2\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[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[33mtype\u001b[0m=\u001b[32m'FieldMonitor'\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[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[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[33mcolocate\u001b[0m=\u001b[3;91mFalse\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[33mtype\u001b[0m=\u001b[32m'FluxTimeMonitor'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m1.0\u001b[0m, \u001b[1;36m0.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33msize\u001b[0m=\u001b[1m(\u001b[0minf, inf, \u001b[1;36m0.0\u001b[0m\u001b[1m)\u001b[0m, \u001b[33mname\u001b[0m=\u001b[32m'flux_over_time'\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[33minterval\u001b[0m=\u001b[1;36m5\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;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;36m2886\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[33malpha\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33medgecolor\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mfacecolor\u001b[0m=\u001b[3;35mNone\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[33mlinewidth\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'PlotParams'\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;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[33mtype\u001b[0m=\u001b[32m'UniformCurrentSource'\u001b[0m, \u001b[33mcenter\u001b[0m=\u001b[1m(\u001b[0m\u001b[1;36m0.0\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\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;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[33mamplitude\u001b[0m=\u001b[1;36m1\u001b[0m\u001b[1;36m.0\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[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[33moffset\u001b[0m=\u001b[1;36m5\u001b[0m\u001b[1;36m.0\u001b[0m\u001b[1m)\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[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[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[34m│\u001b[0m\n", "\u001b[34m│\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[33mmedium\u001b[0m=\u001b[1;35mMedium\u001b[0m\u001b[1m(\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[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[33mname\u001b[0m=\u001b[3;35mNone\u001b[0m, \u001b[33mtype\u001b[0m=\u001b[32m'Structure'\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.46649976e-16\u001b[0m, \u001b[1;36m6.93299951e-16\u001b[0m, \u001b[33m...\u001b[0m, \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;36m9.99391880e-13\u001b[0m, \u001b[1;36m9.99738530e-13\u001b[0m, \u001b[1;36m1.00008518e-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.5.0'\u001b[0m \u001b[34m│\u001b[0m\n", "\u001b[34m│\u001b[0m \u001b[1;3;31mwvl_mat_min\u001b[0m\u001b[1;31m =\u001b[0m \u001b[1;35mTypeError\u001b[0m\u001b[1m(\u001b[0m\u001b[32m\"'float' object is not iterable\"\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()" ] }, { "cell_type": "markdown", "id": "f33815ce", "metadata": {}, "source": [ "### Monitor Data\n", "\n", "Data for each monitor is stored as its own [td.MonitorData](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/notebooks/VizData.html)." ] }, { "cell_type": "code", "execution_count": 22, "id": "5a1d45b1", "metadata": { "execution": { "iopub.execute_input": "2022-07-21T21:14:17.406874Z", "iopub.status.busy": "2022-07-21T21:14:17.406748Z", "iopub.status.idle": "2022-07-21T21:14:17.465946Z", "shell.execute_reply": "2022-07-21T21:14:17.465553Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "array([-2.1581335 , -8.179184 , -2.7423177 , -5.1241198 , -3.0594869 ,\n", " -2.9451237 , -2.6119692 , -2.1457736 , -1.4871535 , -2.4381387 ,\n", " -0.38595507, -2.9517214 , -0.16872148, -2.864866 , -1.205894 ,\n", " -2.0162168 , -3.017394 , -1.0303403 , -4.5130363 , -0.835614 ,\n", " -4.707583 , -1.9162936 , -3.4082837 , -3.8621905 , -1.3647912 ,\n", " -5.5736437 , 0.24417204, -5.990684 , 0.6191282 , -4.8159533 ,\n", " -0.14640301, -2.7003775 , -1.2135491 , -0.7635282 , -1.6740094 ,\n", " 0.18268737, -1.2300584 , 0.12731004, -0.36737135, -0.27692062,\n", " 0.08848047, -0.337848 , -0.3351817 , 0.07565814, -1.3667915 ,\n", " 0.43307164, -2.2057033 , 0.01363973, -2.1699862 , -1.4320905 ,\n", " -1.263713 , -3.364327 , -0.21326661, -4.7490344 , 0.06615269,\n", " -4.7600365 , -0.82969284, -3.3653936 , -2.461514 , -1.3579458 ,\n", " -3.836293 , 0.19249396, -4.102906 , 0.6561471 , -3.1352434 ,\n", " 0.204133 , -1.5778134 , -0.43164933, -0.3415811 , -0.5853282 ,\n", " 0.05117986, -0.17408273, -0.2235783 , 0.28670913, -0.5412973 ,\n", " 0.15958072, -0.4125622 , -0.7421206 , 0.07716304, -1.948033 ,\n", " 0.32569033, -2.661006 , -0.27549222, -2.369368 , -1.7851651 ,\n", " -1.2630736 , -3.558395 , -0.12437747, -4.634117 , 0.23280697,\n", " -4.3855333 , -0.44608623, -2.951107 , -1.6781962 , -1.1284039 ,\n", " -2.6063612 , 0.18240903, -2.6222813 , 0.5663042 , -1.7802991 ,\n", " 0.2849681 , -0.70378184, -0.04148808, -0.07994812, 0.01434146,\n", " -0.14745158, 0.3449594 , -0.5704514 , 0.43609178, -0.77845436,\n", " -0.15304914, -0.48346823, -1.3546191 , 0.04824419, -2.5616717 ,\n", " 0.19274443], dtype=float32)\n", "Coordinates:\n", " * t (t) float64 1.002e-13 1.019e-13 1.036e-13 ... 2.978e-13 2.995e-13\n", "Attributes:\n", " units: W\n", " long_name: flux\n" ] }, { "data": { "text/html": [ "
<Figure size 432x288 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "flux_data = sim_data['flux_over_time']\n", "print(flux_data)\n", "flux_data.plot()\n", "plt.title('flux over time')\n", "plt.show()" ] }, { "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": "2022-07-21T21:14:17.467741Z", "iopub.status.busy": "2022-07-21T21:14:17.467586Z", "iopub.status.idle": "2022-07-21T21:14:17.562627Z", "shell.execute_reply": "2022-07-21T21:14:17.562244Z" } }, "outputs": [ { "data": { "text/html": [ "
<Figure size 432x288 with 2 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m2\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "Ey = sim_data['fields_at_150THz'].Ey\n", "\n", "Ey.real.interp(z=0).plot(x='x', y='y', robust=True)\n", "plt.title('real{Ey(x, y)}')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "54c1847c", "metadata": {}, "source": [ "Finally, [SimulationData](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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": "2022-07-21T21:14:17.564279Z", "iopub.status.busy": "2022-07-21T21:14:17.564119Z", "iopub.status.idle": "2022-07-21T21:14:17.692920Z", "shell.execute_reply": "2022-07-21T21:14:17.692517Z" } }, "outputs": [ { "data": { "text/html": [ "
<Figure size 432x288 with 2 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m2\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sim_data.plot_field('fields_at_150THz', 'Ey', val='real', z=0, freq=150e12)\n", "plt.show()" ] }, { "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.simulation.cloud/projects/tidy3d/en/latest/notebooks/Fitting.html).\n", "\n", "- [Mode solver](https://docs.simulation.cloud/projects/tidy3d/en/latest/notebooks/ModeSolver.html).\n", "\n", "- [Near field to far field transformations](https://docs.simulation.cloud/projects/tidy3d/en/latest/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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.PoleResidue.html) for use in the Simulation.\n", "\n", "### Mode Solver\n", "\n", "The [mode solver](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.plugins.ModeSolver.html) is a similar tool for coming up with [ModeSpec](https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeSpec.html) objects, solve for the results, visulize, and repeat the process until satisfied.\n", "\n", "The resulting [ModeSpec](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeSpec.html) can be saved directly, or used in conjunction with the mode solver settings to return a [ModeSource](https://docs.simulation.cloud/projects/tidy3d/en/latest/_autosummary/tidy3d.ModeSource.html) or [ModeMonitor]((https://docs.simulation.cloud/projects/tidy3d/en/latest/_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.simulation.cloud/projects/tidy3d/en/latest/_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": [] } ], "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.8.10" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "20de26f0db454e7783e4174b991fa03a": { "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_eb53d272a25243e1afa49e2f13d70991", "msg_id": "", "outputs": [ { "data": { "text/html": "
 simulation.json ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0%0.0/4.9 kB?-:--:--\n
\n", "text/plain": "\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/4.9 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m-:--:--\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "2479aa6382cd49c29464e280ee56b258": { "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_aec0b77d1eb64dbd866edb16947c0b86", "msg_id": "", "outputs": [ { "data": { "text/html": "
🚶  Finishing 'web_demo'...\n
\n", "text/plain": "\u001b[32m🚶 \u001b[0m \u001b[1;32mFinishing 'web_demo'...\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "36f88efe53ec43bbbd10e08246a1d38f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "38d5236054884e82970bbbb064d8cd8c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "3aeb76126c784ada937463596973cf1a": { "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_36f88efe53ec43bbbd10e08246a1d38f", "msg_id": "", "outputs": [ { "data": { "text/html": "
🏃  Starting 'web_demo'...\n
\n", "text/plain": "\u001b[32m🏃 \u001b[0m \u001b[1;32mStarting 'web_demo'...\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "5451aa6138624d43862f8a343bc7d131": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a288446a022a418aadc7a3f244c6594c": { "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_38d5236054884e82970bbbb064d8cd8c", "msg_id": "", "outputs": [ { "data": { "text/html": "
% done ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--\n
\n", "text/plain": "% done \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "aec0b77d1eb64dbd866edb16947c0b86": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c968498c74654c60b4b8d89d7c37b070": { "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_5451aa6138624d43862f8a343bc7d131", "msg_id": "", "outputs": [ { "data": { "text/html": "
 monitor_data.hdf5 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0%0.0/99.2 kB?-:--:--\n
\n", "text/plain": "\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/99.2 kB\u001b[0m • \u001b[31m?\u001b[0m • \u001b[36m-:--:--\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "eb53d272a25243e1afa49e2f13d70991": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }