{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f7ee7d45-4de6-4492-90ce-2134a76235d5",
   "metadata": {},
   "source": [
    "# Applying time modulation to materials"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3add6f0-739b-4452-9700-eb20e31b5b2c",
   "metadata": {},
   "source": [
    "In active nanophotonic devices such as electro-optical modulators, materials can be modulated in both space and time. In `Tidy3D`, space-time modulations can be applied to a regular [Medium](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.Medium.html), or a dispersive medium such as [Lorentz](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.Lorentz.html), or even a spatially varying medium such as [CustomMedium](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.CustomMedium.html).\n",
    "\n",
    "In this tutorial, we illustrate how to define such a modulated material with [ModulationSpec](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.ModulationSpec.html) that allows us to apply spatio-temporal modulations to permittivity and electric conductivity. Specifically, we consider transmission spectrum of a harmonically modulated dielectric slab, and show the generation of sidebands in the spectrum."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "b75838e4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# standard python imports\n",
    "import matplotlib.pylab as plt\n",
    "import numpy as np\n",
    "\n",
    "# tidy3D import\n",
    "import tidy3d as td\n",
    "import tidy3d.web as web\n",
    "import xarray as xr\n",
    "from tidy3d import SpatialDataArray\n",
    "from tidy3d.constants import C_0"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62e8f30e-943a-4ad7-98e0-9f0bdf7b9189",
   "metadata": {},
   "source": [
    "First, let us define some basic parameters. A narrow source bandwidth is used so that the sideband is visible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b454349d-33b2-4169-ad09-083eb3a94468",
   "metadata": {},
   "outputs": [],
   "source": [
    "wvl_um = 1\n",
    "freq0 = td.C_0 / wvl_um\n",
    "fwidth = freq0 / 100\n",
    "\n",
    "run_time = 10 / fwidth\n",
    "\n",
    "# Thicknesses of slab\n",
    "t_slab = 1  # um\n",
    "\n",
    "# space between slabs and sources and PML\n",
    "spacing = wvl_um\n",
    "\n",
    "# simulation size\n",
    "sim_size = Lx, Ly, Lz = (1.0, 1.0, 4 * spacing + t_slab)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "033e827c-f220-4887-860b-a08cdffbf4e9",
   "metadata": {},
   "source": [
    "## Introduction to space-time modulation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89f5cbde-18cf-46a7-9474-0d7c55669672",
   "metadata": {},
   "source": [
    "Let's take an electro-optic modulator (**EOM**) as an example where the permittivity is modulated. Similar modulation can be applied to electric conductivity as well, leading to an electro-absorption modulator (**EAM**). Consider that the dielectric function of a passive medium is $\\epsilon_s$, once the active modulation is applied, the time-dependent dielectric function in space can be described as the follows,\n",
    "\n",
    "$$\\epsilon(\\mathbf{r},t) = \\epsilon_s + \\delta(\\mathbf{r}, t) $$\n",
    "where the dielectric function is the sum of the passive part $\\epsilon_s$ and the modulation function $\\delta(\\mathbf{r}, t)$. In `Tidy3D`, the modulation function $\\delta(\\mathbf{r}, t)$ must be separable in space and time, so that it can be written in the following form\n",
    "\n",
    "$$\\delta(\\mathbf{r}, t) = \\Re \\left[\\delta_t(t)\\delta_r(\\mathbf{r})\\right]$$\n",
    "\n",
    "- $\\delta_t(t)$ is the time dependence part. In the current `Tidy3D` version, only harmonic time dependence, or continuous waveform is supported. Custom time dependence is expected to be supported in the future. The harmonic time dependence is expressed as,\n",
    "$$\\delta_t(t) = A_t\\,\\mathrm{exp}(j\\phi_t - j2\\pi f t)$$\n",
    "where $A_t$ is modulation amplitude, $\\phi_t$ the phase offset, and $f$ the modulation frequency.\n",
    "\n",
    "- $\\delta_r(r)$ describes the spatial dependence, which can be either uniform, or take custom spatial distribution of phase and amplitude,\n",
    "$$\\delta_r(\\mathbf{r}) = A_r(\\mathbf{r})\\, \\mathrm{exp}[j\\phi_r(\\mathbf{r})]$$\n",
    "where $A_r(\\mathbf{r})$ is user-supplied modulation amplitude in space, and $\\phi_r(\\mathbf{r})$ the user-supplied phase offset in space.\n",
    "\n",
    "Note that since the modulation function $\\delta(\\mathbf{r}, t)$ takes the product of the time and space dependencies, the overall modulation amplitude is $A_t\\times A_r(\\mathbf{r})$, and phase offset $\\phi_t + \\phi_r(\\mathbf{r})$."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c2dabef6-ea68-469c-a240-010a1819107b",
   "metadata": {},
   "source": [
    "## Defining Space-Time Modulated Medium"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b34318ac-8fb7-4931-abdb-52003bdadd35",
   "metadata": {},
   "source": [
    "We start with a passive medium:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "29018284-8090-49b6-8d94-75c3a20b0c11",
   "metadata": {},
   "outputs": [],
   "source": [
    "permittivity = 2\n",
    "mat_passive = td.Medium(permittivity=permittivity)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "caca496d-7cbd-4c1f-b69d-a8f31587c23e",
   "metadata": {},
   "source": [
    "### Time dependence\n",
    "\n",
    "Let's first define the time dependence part. For continuous wave modulation, it is defined through the class [ContinuousWaveTimeModulation](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.ContinuousWaveTimeModulation.html) which takes the field `freq0` for modulation frequency, `amplitude` for modulation amplitude, and `phase` for the phase shift. As a proof of principle, we use a relatively high modulation speed in this tutorial."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "db89ed46-8c1d-4a9d-83bc-2292bd587cb1",
   "metadata": {},
   "outputs": [],
   "source": [
    "modulation_freq = 0.1 * freq0\n",
    "time_modulation = td.ContinuousWaveTimeModulation(freq0=modulation_freq, amplitude=1, phase=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adc2100b-18d4-4295-a144-94ddb27411cf",
   "metadata": {},
   "source": [
    "### Space dependence\n",
    "\n",
    "Next, let's define the space dependence part through [SpaceModulation](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.SpaceModulation.html). It takes the fields `amplitude` and `phase`, both can be either a scalar float type, or [SpatialDataAarray](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.SpatialDataArray.html). The former indicates that the field is uniform inside the medium, while the latter allows us to provide a custom spatial profile. Let's try the former first, and get to the latter later in the tutorial."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "687375a5-f45a-426c-959c-af3125d9df14",
   "metadata": {},
   "outputs": [],
   "source": [
    "modulation_amplitude = 0.4  # this is a relatively strong modulation to permittivity\n",
    "space_modulation = td.SpaceModulation(amplitude=modulation_amplitude, phase=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "882ff98a-cc53-48cc-82cd-5494393fd049",
   "metadata": {},
   "source": [
    "### Space-time modulation\n",
    "\n",
    "Now let's put them together to define [SpaceTimeModulation](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.SpaceTimeModulation.html), which is then used to define [ModulationSpec](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.ModulationSpec.html) to be supplied to the medium."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "9d060c52-c26a-4c66-95ba-ad9de48a6b43",
   "metadata": {},
   "outputs": [],
   "source": [
    "modulation = td.SpaceTimeModulation(\n",
    "    time_modulation=time_modulation, space_modulation=space_modulation\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a8cefcf-5465-45fe-8e36-52c762431a36",
   "metadata": {},
   "source": [
    "Let's modulate only the permittivity. With this space-time modulation profile, the modulation \n",
    "amplitude of the relative permittivity is the product of modulation amplitudes in space and time, which is $0.4 \\times 1 = 0.4$; and the phase offset is the sum of the phase offsets in space and time, which is $ 0 + 0 = 0$ rad."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "15f6bcfd-132e-4d78-9934-54579f49e27e",
   "metadata": {},
   "outputs": [],
   "source": [
    "modulation_spec = td.ModulationSpec(permittivity=modulation, conductivity=None)\n",
    "mat_modulated = td.Medium(permittivity=permittivity, modulation_spec=modulation_spec)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c67af70f-ee9b-4cfb-a216-71f5073eb991",
   "metadata": {},
   "source": [
    "To summarize, the medium `mat_modulated` is under continuous wave modulation. The modulation is applied to permittivity uniformly in space. The relative permittivity, which takes the value \"2\" in its passive form, now varies between \"1.6\" and \"2.4\"."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "141b5297-c9a9-472d-855e-d3080d71f8e3",
   "metadata": {},
   "source": [
    "## Create and Run Simulation\n",
    "\n",
    "Let's set up the rest of simulation in computing the transmission spectrum.\n",
    "\n",
    "First, we define the slab."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ff653996-0277-4228-bf2c-1b25452c8594",
   "metadata": {},
   "outputs": [],
   "source": [
    "unmodulated_slab = td.Structure(\n",
    "    geometry=td.Box(\n",
    "        center=(0, 0, 0),\n",
    "        size=(td.inf, td.inf, t_slab),\n",
    "    ),\n",
    "    medium=mat_passive,\n",
    ")\n",
    "\n",
    "modulated_slab = unmodulated_slab.updated_copy(medium=mat_modulated)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5bd26ba6-c63a-40ab-9c8d-2970a66bab21",
   "metadata": {},
   "source": [
    "Next, we define the excitation conditions . We will excite the slab using a normally incident (along z) planewave, polarized along the x direction."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b64c9c57-c419-4c36-bd49-ee574453baf1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here we define the planewave source, placed just in advance (towards negative z) of the slab\n",
    "source = td.PlaneWave(\n",
    "    source_time=td.GaussianPulse(freq0=freq0, fwidth=fwidth),\n",
    "    size=(td.inf, td.inf, 0),\n",
    "    center=(0, 0, -Lz / 2 + spacing),\n",
    "    direction=\"+\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8d5cd84-2fcd-430b-8e31-a1305993ed5c",
   "metadata": {},
   "source": [
    "Here we define the flux monitor, placed just past (towards positive z) of the slab."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f1b45a91-c2bf-4c3f-915e-21390f547049",
   "metadata": {},
   "outputs": [],
   "source": [
    "# We are interested in measuring the transmitted flux, so we set it to be an oversized plane.\n",
    "# The monitor frequencies are set to span several sidebands.\n",
    "monitor_freqs = np.linspace(freq0 - modulation_freq * 3, freq0 + modulation_freq * 3, 500)\n",
    "monitor = td.FluxMonitor(\n",
    "    center=(0, 0, Lz / 2 - spacing),\n",
    "    size=(td.inf, td.inf, 0),\n",
    "    freqs=monitor_freqs,\n",
    "    name=\"flux\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a9ae5e6-a4a1-4f09-8437-2dfefbc12f1e",
   "metadata": {},
   "source": [
    "Finally, let's define the simulation object.\n",
    "\n",
    "**Note** that in Tidy3D, by default the monitor data will be normalized against source spectrum. However, in many time modulation simulations, some of our monitor frequencies are way outside the source bandwidth, where the source spectrum is very close to 0. So it's a bad idea to use it to normalize. To obtain raw transmission data that are not normalized, here we set `normalize_index = None`. For more information about normalization, please refer to [here](https://docs.flexcompute.com/projects/tidy3d/en/latest/faq/docs/faq/How-are-results-normalized.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c7a46eea-9f68-4d15-bd43-a8d907f1bc93",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:34:54 PDT </span><span style=\"color: #800000; text-decoration-color: #800000\">WARNING: monitors</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #800000; text-decoration-color: #800000\"> contains frequencies outside of the simulation</span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">frequency range </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.878008e+14</span><span style=\"color: #800000; text-decoration-color: #800000\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3.117842e+14</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)(</span><span style=\"color: #800000; text-decoration-color: #800000\">Hz</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)</span><span style=\"color: #800000; text-decoration-color: #800000\"> as defined by the </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">sources.                                                           </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:34:54 PDT\u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING: monitors\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[31m contains frequencies outside of the simulation\u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31mfrequency range \u001b[0m\u001b[1;31m(\u001b[0m\u001b[1;36m2.878008e+14\u001b[0m\u001b[31m, \u001b[0m\u001b[1;36m3.117842e+14\u001b[0m\u001b[1;31m)\u001b[0m\u001b[1;31m(\u001b[0m\u001b[31mHz\u001b[0m\u001b[1;31m)\u001b[0m\u001b[31m as defined by the \u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31msources.                                                           \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">WARNING: monitors</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #800000; text-decoration-color: #800000\"> contains frequencies outside of the simulation</span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">frequency range </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.878008e+14</span><span style=\"color: #800000; text-decoration-color: #800000\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3.117842e+14</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)(</span><span style=\"color: #800000; text-decoration-color: #800000\">Hz</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)</span><span style=\"color: #800000; text-decoration-color: #800000\"> as defined by the </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">sources.                                                           </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING: monitors\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[31m contains frequencies outside of the simulation\u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31mfrequency range \u001b[0m\u001b[1;31m(\u001b[0m\u001b[1;36m2.878008e+14\u001b[0m\u001b[31m, \u001b[0m\u001b[1;36m3.117842e+14\u001b[0m\u001b[1;31m)\u001b[0m\u001b[1;31m(\u001b[0m\u001b[31mHz\u001b[0m\u001b[1;31m)\u001b[0m\u001b[31m as defined by the \u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31msources.                                                           \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim_unmodulated = td.Simulation(\n",
    "    center=(0, 0, 0),\n",
    "    size=sim_size,\n",
    "    grid_spec=td.GridSpec.auto(min_steps_per_wvl=20),\n",
    "    structures=[unmodulated_slab],\n",
    "    sources=[source],\n",
    "    monitors=[monitor],\n",
    "    run_time=run_time,\n",
    "    boundary_spec=td.BoundarySpec.pml(x=False, y=False, z=True),\n",
    "    normalize_index=None,\n",
    ")\n",
    "\n",
    "sim_modulated = sim_unmodulated.updated_copy(structures=[modulated_slab])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c42d3b2f-e89f-44df-a30b-22dc06439151",
   "metadata": {},
   "source": [
    "The warnings are just letting us know that the monitor contains frequencies outside the source bandwidth. This is on purpose. With active modulations, sidebands outside the source bandwidth will be generated. We can ignore them as this is intended."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb6aff8f-7224-4b24-aa58-4c413fbd6209",
   "metadata": {},
   "source": [
    "### Visualize the structure"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b31c26ae-d5d5-4e37-a9c5-8e35364b7630",
   "metadata": {},
   "source": [
    "Let's now plot the structures to confirm that they are defined correctly. In the following figure, we compare the plot of the simulation for a passive slab to that of a modulated slab. As we can see in the plot in the right, the modulated part is marked differently.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "3242524e-5847-4072-b208-a2d2853722be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAHWCAYAAAAimh1xAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIXElEQVR4nO3deXwTdeI//leaNumZAG25pJQbERD9oCh4cCzK5cGuXOJHARV3XVzF66u4Cooiq7KrrgrL7+MK67WKKLCLIiByqAsIKCtyySlQBNoCSWlp0iTv3x+TSZM0d5PMTPJ6Ph550E4mM+9h2ver8573vN86IYQAERGRymQoXQAiIqJAGFBERKRKDCgiIlIlBhQREakSA4qIiFSJAUVERKrEgCIiIlViQBERkSoxoIiISJUYUDFauHAhdDodDh8+rHRRGpg4cSLatWsX02d1Oh3uu++++BaISIV0Oh2efvrpmD7brl07TJw4Ma7laaynn34aOp0uLtuK9fjWrVsHnU6HxYsXx6UcmggoOQzkV3Z2Nrp06YL77rsPJ0+eVLp4RBQj79/tr7/+usH7QgiUlJRAp9PhhhtuUKCE8XX8+HE8/fTT2L59u9JF0QRNBJRs5syZeOedd/D666+jX79+mDdvHvr27Yuampqkl+X222/H+fPnUVpamvR9E6Wa7OxsvP/++w2Wr1+/HseOHYPRaFSgVPF3/PhxPPPMMwyoCGkqoIYNG4b//d//xd13342FCxdi6tSpOHToEJYtW5b0suj1emRnZ8ftkpoonQ0fPhwfffQRHA6Hz/L3338fvXv3RsuWLRUqGSlJUwHlb9CgQQCAQ4cOAQDmzJmDfv36obCwEDk5Oejdu3fAttDVq1fj6quvRpMmTZCfn4+uXbviiSee8FnntddeQ/fu3ZGbm4umTZvisssu8/kLz/8e1A033IAOHToELGffvn1x2WWX+Sx799130bt3b+Tk5KBZs2YYN24cjh49GvaYq6qqMHXqVLRr1w5GoxHNmzfHddddh++++y7k5yL9v5G999576Nq1K7Kzs9G7d29s2LAhbNmIYnXrrbeisrISq1ev9iyz2+1YvHgxxo8fH/Az1dXVePjhh1FSUgKj0YiuXbtizpw58J+gwWaz4cEHH0RxcTEKCgpw00034dixYw22F+zebST3dk6fPo1HHnkEPXv2RH5+PkwmE4YNG4b//ve/nnXWrVuHyy+/HAAwadIkT9PmwoULPets3rwZQ4cOhdlsRm5uLvr3749vvvmmwf6+/vprXH755cjOzkbHjh0xf/78kOXztm/fPtxyyy1o2bIlsrOz0aZNG4wbNw4Wi6VRx+fN6XTiiSeeQMuWLZGXl4ebbropovrNX2bUn1CRAwcOAAAKCwsBAK+++ipuuukm3HbbbbDb7fjggw8wevRoLF++HCNGjAAA7Ny5EzfccAMuvvhizJw5E0ajEfv37/f5Ifi///s/3H///Rg1ahQeeOAB1NbW4ocffsDmzZuD/rKMHTsWd9xxB7Zs2eL5IQSAn3/+GZs2bcJLL73kWTZr1iw89dRTGDNmDO6++26Ul5fjtddew7XXXovvv/8eTZo0CXrMv/vd77B48WLcd999uOiii1BZWYmvv/4au3fvxv/8z/8E/Vwk/zey9evX48MPP8T9998Po9GIuXPnYujQofj222/Ro0ePoPsgilW7du3Qt29f/POf/8SwYcMAACtWrIDFYsG4cePw17/+1Wd9IQRuuukmrF27FnfddRcuueQSrFy5Eo8++ijKysrw8ssve9a9++678e6772L8+PHo168fvvzyywY/84118OBBLF26FKNHj0b79u1x8uRJzJ8/H/3798euXbvQunVrdOvWDTNnzsT06dNxzz334JprrgEA9OvXDwDw5ZdfYtiwYejduzdmzJiBjIwMLFiwAIMGDcJXX32FPn36AAB27NiB66+/HsXFxXj66afhcDgwY8YMtGjRImw57XY7hgwZApvNhj/84Q9o2bIlysrKsHz5cpw9exZmsznm4/M2a9Ys6HQ6PPbYYzh16hReeeUVDB48GNu3b0dOTk7k/7FCAxYsWCAAiC+++EKUl5eLo0ePig8++EAUFhaKnJwccezYMSGEEDU1NT6fs9vtokePHmLQoEGeZS+//LIAIMrLy4Pu7+abbxbdu3ePqEyHDh0SQghhsViE0WgUDz/8sM96L774otDpdOLnn38WQghx+PBhodfrxaxZs3zW27Fjh8jMzGyw3J/ZbBZTpkwJuc6ECRNEaWmpz7JI/m+EEAKAACC2bt3qWfbzzz+L7Oxs8etf/zrkfomiJf8ebdmyRbz++uuioKDA87M6evRoMXDgQCGEEKWlpWLEiBGezy1dulQAEM8995zP9kaNGiV0Op3Y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yhOMppr4QhkxYgT+8pe/YOjQoRg/fjxOnTqFN954A506dfL5gZs5cyY2bNiAESNGoLS0FKdOncLcuXPRpk0bXH311QCA66+/Hi1btsRVV12FFi1aYPfu3Xj99dcxYsSIBm3e/oYPH46CggI88sgj0Ov1uOWWW3ze79ixI5577jlMmzYNhw8fxsiRI1FQUIBDhw5hyZIluOeee/DII48E3HZVVRXatGmDUaNGoVevXsjPz8cXX3yBLVu24M9//nOj/29kPXr0wJAhQ3y6mQMI2bxJFC8TJkwIu86NN96IgQMH4o9//CMOHz6MXr16YdWqVVi2bBmmTp3qued0ySWX4NZbb8XcuXNhsVjQr18/rFmzBvv372+wzXHjxuGxxx7Dr3/9a9x///2oqanBvHnz0KVLl7AdHW644QbMnDkTkyZNQr9+/bBjxw689957DZ6N7NixI5o0aYK//e1vKCgoQF5eHq644gq0b98eb775JoYNG4bu3btj0qRJuOCCC1BWVoa1a9fCZDLh3//+NwDp9/Dzzz/HNddcg9///vdwOBye5zYD/T57+/LLL3Hfffdh9OjR6NKlCxwOB955552AdVUsxydr1qwZrr76akyaNAknT57EK6+8gk6dOmHy5Mkhy9dAVNdbComkiU8IIf7+97+Lzp07C6PRKC688EKxYMGCBl1E16xZI26++WbRunVrYTAYROvWrcWtt94qfvrpJ8868+fPF9dee60oLCwURqNRdOzYUTz66KPCYrE0KJN/E58QQtx2220CgBg8eHDQsn788cfi6quvFnl5eSIvL09ceOGFYsqUKSGb/mw2m3j00UdFr169REFBgcjLyxO9evUSc+fO9VkvUHfZSP5vhJCa+KZMmSLeffddz/qXXnqpWLt2bdByEcUq0t9t/yY+IaTmwAcffFC0bt1aZGVlic6dO4uXXnrJp5u2EEKcP39e3H///aKwsFDk5eWJG2+8URw9erRBE58QQqxatUr06NFDGAwG0bVrV/Huu+9G3M384YcfFq1atRI5OTniqquuEhs3bhT9+/dv0My/bNkycdFFF4nMzMwGzX3ff/+9+M1vfuOpe0pLS8WYMWPEmjVrfLaxfv160bt3b2EwGESHDh3E3/72t4Dl9Hfw4EFx5513io4dO4rs7GzRrFkzMXDgQPHFF1/E5fjkJr5//vOfYtq0aaJ5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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 2, tight_layout=True)\n",
    "sim_unmodulated.plot(x=0, ax=ax[0])\n",
    "ax[0].set_title(\"Passive slab\")\n",
    "\n",
    "sim_modulated.plot(x=0, ax=ax[1])\n",
    "ax[1].set_title(\"Modulated slab\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4bf955b-1ba0-41e1-8b4f-2c64d0aa284a",
   "metadata": {},
   "source": [
    "### Run the simulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "905894eb-e15e-490e-b481-1e8a3272d06b",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>Created task <span style=\"color: #008000; text-decoration-color: #008000\">'unmodulated'</span> with task_id                            \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #008000; text-decoration-color: #008000\">'fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1'</span> and task_type <span style=\"color: #008000; text-decoration-color: #008000\">'FDTD'</span>.\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mCreated task \u001b[32m'unmodulated'\u001b[0m with task_id                            \n",
       "\u001b[2;36m             \u001b[0m\u001b[32m'fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1'\u001b[0m and task_type \u001b[32m'FDTD'\u001b[0m.\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>View task using web UI at                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f35</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">7-4f04-bd69-4eed3ff94767v1'</span></a>.                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mView task using web UI at                                          \n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=503939;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[32m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=928814;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[32mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=503939;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[32m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=855657;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[32mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=503939;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[32m-9aec2409-f35\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=503939;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[32m7-4f04-bd69-4eed3ff94767v1'\u001b[0m\u001b]8;;\u001b\\.                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f1db95c40e5b4a02ae2b7be3987111e0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:34:56 PDT </span>status = queued                                                    \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:34:56 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = queued                                                    \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:05 PDT </span>status = preprocess                                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:05 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = preprocess                                                \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:12 PDT </span>Maximum FlexCredit cost: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.025</span>. Use <span style=\"color: #008000; text-decoration-color: #008000\">'web.real_cost(task_id)'</span> to get\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>the billed FlexCredit cost after a simulation run.                 \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:12 PDT\u001b[0m\u001b[2;36m \u001b[0mMaximum FlexCredit cost: \u001b[1;36m0.025\u001b[0m. Use \u001b[32m'web.real_cost\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m to get\n",
       "\u001b[2;36m             \u001b[0mthe billed FlexCredit cost after a simulation run.                 \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>starting up solver                                                 \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstarting up solver                                                 \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>running solver                                                     \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mrunning solver                                                     \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>To cancel the simulation, use <span style=\"color: #008000; text-decoration-color: #008000\">'web.abort(task_id)'</span> or              \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #008000; text-decoration-color: #008000\">'web.delete(task_id)'</span> or abort/delete the task in the web UI.      \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>Terminating the Python script will not stop the job running on the \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>cloud.                                                             \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mTo cancel the simulation, use \u001b[32m'web.abort\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or              \n",
       "\u001b[2;36m             \u001b[0m\u001b[32m'web.delete\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or abort/delete the task in the web UI.      \n",
       "\u001b[2;36m             \u001b[0mTerminating the Python script will not stop the job running on the \n",
       "\u001b[2;36m             \u001b[0mcloud.                                                             \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3b9342fb1dd4451885eb0fe3a8afe600",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:19 PDT </span>early shutoff detected at <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">16</span>%, exiting.                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:19 PDT\u001b[0m\u001b[2;36m \u001b[0mearly shutoff detected at \u001b[1;36m16\u001b[0m%, exiting.                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>status = postprocess                                               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstatus = postprocess                                               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:23 PDT </span>status = success                                                   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:23 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = success                                                   \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>View simulation result at                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f35</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">7-4f04-bd69-4eed3ff94767v1'</span></a><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">.</span>                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mView simulation result at                                          \n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=127825;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[4;34m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=54272;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[4;34mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=127825;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[4;34m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=760282;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[4;34mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=127825;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[4;34m-9aec2409-f35\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=127825;https://tidy3d.simulation.cloud/workbench?taskId=fdve-9aec2409-f357-4f04-bd69-4eed3ff94767v1\u001b\\\u001b[4;34m7-4f04-bd69-4eed3ff94767v1'\u001b[0m\u001b]8;;\u001b\\\u001b[4;34m.\u001b[0m                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b6c36d8b047a4a89b98bcc4911946d4e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:24 PDT </span>loading simulation from simulation_data.hdf5                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:24 PDT\u001b[0m\u001b[2;36m \u001b[0mloading simulation from simulation_data.hdf5                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">WARNING: monitors</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #800000; text-decoration-color: #800000\"> contains frequencies outside of the simulation</span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">frequency range </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.878008e+14</span><span style=\"color: #800000; text-decoration-color: #800000\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3.117842e+14</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)(</span><span style=\"color: #800000; text-decoration-color: #800000\">Hz</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)</span><span style=\"color: #800000; text-decoration-color: #800000\"> as defined by the </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">sources.                                                           </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING: monitors\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[31m contains frequencies outside of the simulation\u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31mfrequency range \u001b[0m\u001b[1;31m(\u001b[0m\u001b[1;36m2.878008e+14\u001b[0m\u001b[31m, \u001b[0m\u001b[1;36m3.117842e+14\u001b[0m\u001b[1;31m)\u001b[0m\u001b[1;31m(\u001b[0m\u001b[31mHz\u001b[0m\u001b[1;31m)\u001b[0m\u001b[31m as defined by the \u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31msources.                                                           \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>Created task <span style=\"color: #008000; text-decoration-color: #008000\">'modulated'</span> with task_id                              \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #008000; text-decoration-color: #008000\">'fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1'</span> and task_type <span style=\"color: #008000; text-decoration-color: #008000\">'FDTD'</span>.\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mCreated task \u001b[32m'modulated'\u001b[0m with task_id                              \n",
       "\u001b[2;36m             \u001b[0m\u001b[32m'fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1'\u001b[0m and task_type \u001b[32m'FDTD'\u001b[0m.\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>View task using web UI at                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">4-4314-adbc-007c20c63855v1'</span></a>.                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mView task using web UI at                                          \n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=625663;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[32m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=384394;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[32mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=625663;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[32m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=87714;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[32mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=625663;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[32m-a0b394b0-5bb\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=625663;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[32m4-4314-adbc-007c20c63855v1'\u001b[0m\u001b]8;;\u001b\\.                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c070bdbca41d47849e3d3fb883d5dff0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:25 PDT </span>status = queued                                                    \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:25 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = queued                                                    \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:34 PDT </span>status = preprocess                                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:34 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = preprocess                                                \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:40 PDT </span>Maximum FlexCredit cost: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.025</span>. Use <span style=\"color: #008000; text-decoration-color: #008000\">'web.real_cost(task_id)'</span> to get\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>the billed FlexCredit cost after a simulation run.                 \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:40 PDT\u001b[0m\u001b[2;36m \u001b[0mMaximum FlexCredit cost: \u001b[1;36m0.025\u001b[0m. Use \u001b[32m'web.real_cost\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m to get\n",
       "\u001b[2;36m             \u001b[0mthe billed FlexCredit cost after a simulation run.                 \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>starting up solver                                                 \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstarting up solver                                                 \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>running solver                                                     \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mrunning solver                                                     \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>To cancel the simulation, use <span style=\"color: #008000; text-decoration-color: #008000\">'web.abort(task_id)'</span> or              \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #008000; text-decoration-color: #008000\">'web.delete(task_id)'</span> or abort/delete the task in the web UI.      \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>Terminating the Python script will not stop the job running on the \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>cloud.                                                             \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mTo cancel the simulation, use \u001b[32m'web.abort\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or              \n",
       "\u001b[2;36m             \u001b[0m\u001b[32m'web.delete\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or abort/delete the task in the web UI.      \n",
       "\u001b[2;36m             \u001b[0mTerminating the Python script will not stop the job running on the \n",
       "\u001b[2;36m             \u001b[0mcloud.                                                             \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cebb4ab47e8b436ca09162308301835b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:48 PDT </span>early shutoff detected at <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">16</span>%, exiting.                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:48 PDT\u001b[0m\u001b[2;36m \u001b[0mearly shutoff detected at \u001b[1;36m16\u001b[0m%, exiting.                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>status = postprocess                                               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstatus = postprocess                                               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:51 PDT </span>status = success                                                   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:51 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = success                                                   \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>View simulation result at                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">4-4314-adbc-007c20c63855v1'</span></a><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">.</span>                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mView simulation result at                                          \n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=48449;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[4;34m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=477427;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[4;34mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=48449;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[4;34m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=713954;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[4;34mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=48449;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[4;34m-a0b394b0-5bb\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=48449;https://tidy3d.simulation.cloud/workbench?taskId=fdve-a0b394b0-5bb4-4314-adbc-007c20c63855v1\u001b\\\u001b[4;34m4-4314-adbc-007c20c63855v1'\u001b[0m\u001b]8;;\u001b\\\u001b[4;34m.\u001b[0m                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3ca2e03cf028495e8dcf6bd89fc82b9a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:52 PDT </span>loading simulation from simulation_data.hdf5                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:52 PDT\u001b[0m\u001b[2;36m \u001b[0mloading simulation from simulation_data.hdf5                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">WARNING: monitors</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #800000; text-decoration-color: #800000\"> contains frequencies outside of the simulation</span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">frequency range </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.878008e+14</span><span style=\"color: #800000; text-decoration-color: #800000\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3.117842e+14</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)(</span><span style=\"color: #800000; text-decoration-color: #800000\">Hz</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)</span><span style=\"color: #800000; text-decoration-color: #800000\"> as defined by the </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">sources.                                                           </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING: monitors\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[31m contains frequencies outside of the simulation\u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31mfrequency range \u001b[0m\u001b[1;31m(\u001b[0m\u001b[1;36m2.878008e+14\u001b[0m\u001b[31m, \u001b[0m\u001b[1;36m3.117842e+14\u001b[0m\u001b[1;31m)\u001b[0m\u001b[1;31m(\u001b[0m\u001b[31mHz\u001b[0m\u001b[1;31m)\u001b[0m\u001b[31m as defined by the \u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31msources.                                                           \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim_data_unmodulated = web.run(sim_unmodulated, task_name=\"unmodulated\", verbose=True)\n",
    "sim_data_modulated = web.run(sim_modulated, task_name=\"modulated\", verbose=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fae1f255-107f-4489-a350-13b5caff940a",
   "metadata": {},
   "source": [
    "### Postprocess and plot\n",
    "\n",
    "Since photon number is proportional to the photon energy divided by photon frequency, in the following, we refer to the transmitted flux divided by frequency as photon number."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "e4230315-7b28-488d-89d3-85d751b7efb3",
   "metadata": {},
   "outputs": [],
   "source": [
    "photon_number_unmodulated = sim_data_unmodulated[\"flux\"].flux / monitor_freqs\n",
    "photon_number_modulated = sim_data_modulated[\"flux\"].flux / monitor_freqs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2ef7ecd9-67a7-4b7d-89e1-75d7de7a474e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(2, 1, tight_layout=True)\n",
    "ax[0].plot(monitor_freqs / freq0, photon_number_unmodulated, color=\"k\")\n",
    "ax[0].set_ylabel(\"Photon number (a.u.)\")\n",
    "ax[0].set_title(\"Unmodulated\")\n",
    "ax[1].plot(monitor_freqs / freq0, photon_number_modulated, color=\"r\")\n",
    "ax[1].set_ylabel(\"Photon number (a.u.)\")\n",
    "ax[1].set_title(\"Modulated\")\n",
    "ax[1].set_xlabel(\"Frequency (freq0)\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1cd383f1-ffb5-45a8-893e-16b9ae50ec08",
   "metadata": {},
   "source": [
    "The 1st sideband is clearly visible. They are offset from the source frequency by the modulation frequency. The 2nd sideband is weak, but still visible.\n",
    "\n",
    "Next, let's examine if the photon number after the modulation is conserved."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac87d03c-39d7-4e3c-85f5-4fc5b304e405",
   "metadata": {},
   "source": [
    "### Photon number conservation\n",
    "\n",
    "#### Photon number at peak frequencies\n",
    "Let's compare the photon number at the source frequency in the passive system, to the summed photon number at the source and sideband frequencies in the modulated system. To begin with, let's only count the photon number at peak frequencies.\n",
    "\n",
    "Since the 2nd sideband is already weak enough, let's ignore photon numbers beyond 2nd sidebands."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "71cde030-a658-4a8f-b789-042280e4b073",
   "metadata": {},
   "outputs": [],
   "source": [
    "# photon number at the peak source frequency in the passive system\n",
    "photon_number_peak_unmodulated = photon_number_unmodulated.interp(f=freq0)\n",
    "\n",
    "# photon number at the peak source frequency in the modulated system\n",
    "photon_number_peak_modulated = photon_number_modulated.interp(f=freq0)\n",
    "\n",
    "# 1st sideband\n",
    "photon_number_sideband1 = photon_number_modulated.interp(\n",
    "    f=freq0 - modulation_freq\n",
    ") + photon_number_modulated.interp(f=freq0 + modulation_freq)\n",
    "\n",
    "# 2nd sideband\n",
    "photon_number_sideband2 = photon_number_modulated.interp(\n",
    "    f=freq0 - 2 * modulation_freq\n",
    ") + photon_number_modulated.interp(f=freq0 + 2 * modulation_freq)\n",
    "\n",
    "# summed photon number in the modulated system\n",
    "photon_number_sum_modulation = (\n",
    "    photon_number_peak_modulated + photon_number_sideband1 + photon_number_sideband2\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "ed392a0d-f2a8-440c-8410-859bf2980a32",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The relative difference of photon number with modulation is -0.008978487924419219\n"
     ]
    }
   ],
   "source": [
    "photon_number_difference = photon_number_sum_modulation - photon_number_peak_unmodulated\n",
    "photon_number_rel = float(photon_number_difference / photon_number_peak_unmodulated)\n",
    "print(f\"The relative difference of photon number with modulation is {photon_number_rel}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc1ae988-6b13-4f09-951c-ce299956ef0a",
   "metadata": {},
   "source": [
    "As we can see, the photon number is roughly conserved. Less than $0.9$% photons is missing. The missing photons are attributed to the approximation that we are not counting photons in higher-order sidebands."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d9b391a-54fc-4de6-8fda-ad1df0a7642e",
   "metadata": {},
   "source": [
    "#### Photon number integrated over frequencies\n",
    "\n",
    "The above analysis only counts the photon numbers at peak frequencies, which is valid when the bandwidths of the peaks are identical. Here let's perform a more rigorous analysis by integrating photon number over monitor frequencies to see if the photon number is indeed conserved."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "a8f59124-9e88-4c1f-8308-211eeaa12b5d",
   "metadata": {},
   "outputs": [],
   "source": [
    "integrated_photon_number_unmodulated = float(photon_number_unmodulated.integrate(\"f\"))\n",
    "integrated_photon_number_modulated = float(photon_number_modulated.integrate(\"f\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "75c12f2c-a56a-4be5-8e19-63838f620789",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The relative difference of photon number with modulation is -0.008746811484164705\n"
     ]
    }
   ],
   "source": [
    "photon_number_difference = integrated_photon_number_modulated - integrated_photon_number_unmodulated\n",
    "photon_number_rel = float(photon_number_difference / integrated_photon_number_unmodulated)\n",
    "print(f\"The relative difference of photon number with modulation is {photon_number_rel}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63aa97ba-36e3-46a7-aba3-dd1fa33368b7",
   "metadata": {},
   "source": [
    "The result is the same as counting photon numbers only at peak frequencies."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a41e0779-cd5f-4f1d-9dd1-60f13fe967cc",
   "metadata": {},
   "source": [
    "## More Complicated Modulations\n",
    "\n",
    "Now just for fun, let's illustrate a more complicated modulation that mimics indirect transitions. On top of a dispersive medium, we apply space-time modulation that is a function of both time and $y$-coordinate:\n",
    "\n",
    "$$\\delta(y, t) = A \\cos(-2\\pi ft + q y)$$\n",
    "Where $f$ is the modulation frequency, and $q$ the wavevector.\n",
    "\n",
    "Below, as an example, we consider the wavevector $q=\\frac{2\\pi}{\\lambda_0}$, where $\\lambda_0$ is the wavelength corresponding to source central frequency. With phase-matching condition, the wavevector along $y$-direction in the 1st sideband will take values $\\pm q$. Let's do a quick qualitative analysis of what is expected in the transmission spectrum regarding the 1st sideband:\n",
    "\n",
    "- The frequency of the lower branch is $f_0 - f$, where $f_0$ is the source central frequency. However, $\\frac{c}{2\\pi}|q| > (f_0-f)$, so the wave is evanescent and is confined to the slab. The transmission at this frequency is expected to be the same as the unmodulated medium;\n",
    "- The frequency of the upper branch is $f_0 + f$. Since $\\frac{c}{2\\pi}|q| < (f_0+f)$, the wave is propagating. It is expected to see up-converted photons in the transmission spectrum.\n",
    "\n",
    "To summarize, we expect to see only up-conversion in the transmission spectrum. Let's setup the simulation to verify our theory."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "7d5dcd13-6cba-4812-b973-c70e566d5dbb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# let's consider passive dispersive medium described by Sellmeier model\n",
    "mat_passive = td.Sellmeier.from_dispersion(n=np.sqrt(permittivity), freq=freq0, dn_dwvl=-0.2)\n",
    "unmodulated_slab = unmodulated_slab.updated_copy(medium=mat_passive)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "182f951b-8e28-403e-8b0b-6a5e92e7678d",
   "metadata": {},
   "source": [
    "Here we consider the same time dependence, but more complicated space dependence as described above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "3ddb2d18-95a0-4445-bbfe-5fc9be6dca78",
   "metadata": {},
   "outputs": [],
   "source": [
    "Nx = 1\n",
    "Ny = 10\n",
    "Nz = 11\n",
    "x = [0]\n",
    "y = np.linspace(-Ly / 2, Ly / 2, Ny)\n",
    "z = [0]\n",
    "coords = dict(x=x, y=y, z=z)\n",
    "xgrid, ygrid, zgrid = np.meshgrid(x, y, z, indexing=\"ij\")\n",
    "\n",
    "phase = td.SpatialDataArray(2 * np.pi * ygrid / Ly, coords=coords)\n",
    "\n",
    "space_modulation = td.SpaceModulation(amplitude=modulation_amplitude, phase=phase)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4470eb86-eda6-4c6d-9be8-70921a3d02b0",
   "metadata": {},
   "source": [
    "Finalize the modulated medium setup:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "2e0a6fee-9c37-4a41-8bcb-31c8b5a0a3e0",
   "metadata": {},
   "outputs": [],
   "source": [
    "modulation = modulation.updated_copy(space_modulation=space_modulation)\n",
    "modulation_spec = td.ModulationSpec(permittivity=modulation)\n",
    "mat_modulated = mat_passive.updated_copy(modulation_spec=modulation_spec)\n",
    "modulated_slab = modulated_slab.updated_copy(medium=mat_modulated)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa3ce170-3880-4ea2-9b64-77b555df1171",
   "metadata": {},
   "source": [
    "### Setup and run simulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "64b69e41-3c95-4a3e-a9ec-01096dffa417",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">WARNING: monitors</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #800000; text-decoration-color: #800000\"> contains frequencies outside of the simulation</span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">frequency range </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.878008e+14</span><span style=\"color: #800000; text-decoration-color: #800000\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3.117842e+14</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)(</span><span style=\"color: #800000; text-decoration-color: #800000\">Hz</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)</span><span style=\"color: #800000; text-decoration-color: #800000\"> as defined by the </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">sources.                                                           </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING: monitors\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[31m contains frequencies outside of the simulation\u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31mfrequency range \u001b[0m\u001b[1;31m(\u001b[0m\u001b[1;36m2.878008e+14\u001b[0m\u001b[31m, \u001b[0m\u001b[1;36m3.117842e+14\u001b[0m\u001b[1;31m)\u001b[0m\u001b[1;31m(\u001b[0m\u001b[31mHz\u001b[0m\u001b[1;31m)\u001b[0m\u001b[31m as defined by the \u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31msources.                                                           \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">WARNING: monitors</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #800000; text-decoration-color: #800000\"> contains frequencies outside of the simulation</span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">frequency range </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.878008e+14</span><span style=\"color: #800000; text-decoration-color: #800000\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3.117842e+14</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)(</span><span style=\"color: #800000; text-decoration-color: #800000\">Hz</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)</span><span style=\"color: #800000; text-decoration-color: #800000\"> as defined by the </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">sources.                                                           </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING: monitors\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[31m contains frequencies outside of the simulation\u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31mfrequency range \u001b[0m\u001b[1;31m(\u001b[0m\u001b[1;36m2.878008e+14\u001b[0m\u001b[31m, \u001b[0m\u001b[1;36m3.117842e+14\u001b[0m\u001b[1;31m)\u001b[0m\u001b[1;31m(\u001b[0m\u001b[31mHz\u001b[0m\u001b[1;31m)\u001b[0m\u001b[31m as defined by the \u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31msources.                                                           \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim_unmodulated = sim_unmodulated.updated_copy(structures=[unmodulated_slab])\n",
    "sim_modulated = sim_modulated.updated_copy(structures=[modulated_slab])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "33f3523b-5171-46b4-9dfa-1666be6c7547",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:35:53 PDT </span>Created task <span style=\"color: #008000; text-decoration-color: #008000\">'unmodulated_sellmeier'</span> with task_id                  \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #008000; text-decoration-color: #008000\">'fdve-24b5af63-da83-4464-9c80-1271190025e1v1'</span> and task_type <span style=\"color: #008000; text-decoration-color: #008000\">'FDTD'</span>.\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:35:53 PDT\u001b[0m\u001b[2;36m \u001b[0mCreated task \u001b[32m'unmodulated_sellmeier'\u001b[0m with task_id                  \n",
       "\u001b[2;36m             \u001b[0m\u001b[32m'fdve-24b5af63-da83-4464-9c80-1271190025e1v1'\u001b[0m and task_type \u001b[32m'FDTD'\u001b[0m.\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>View task using web UI at                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da8</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">3-4464-9c80-1271190025e1v1'</span></a>.                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mView task using web UI at                                          \n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=79961;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[32m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=178911;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[32mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=79961;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[32m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=209127;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[32mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=79961;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[32m-24b5af63-da8\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=79961;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[32m3-4464-9c80-1271190025e1v1'\u001b[0m\u001b]8;;\u001b\\.                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6a04bd8f55be4ac48f169610884bb89c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>status = queued                                                    \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstatus = queued                                                    \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:02 PDT </span>status = preprocess                                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:02 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = preprocess                                                \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:06 PDT </span>Maximum FlexCredit cost: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.025</span>. Use <span style=\"color: #008000; text-decoration-color: #008000\">'web.real_cost(task_id)'</span> to get\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>the billed FlexCredit cost after a simulation run.                 \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:06 PDT\u001b[0m\u001b[2;36m \u001b[0mMaximum FlexCredit cost: \u001b[1;36m0.025\u001b[0m. Use \u001b[32m'web.real_cost\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m to get\n",
       "\u001b[2;36m             \u001b[0mthe billed FlexCredit cost after a simulation run.                 \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>starting up solver                                                 \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstarting up solver                                                 \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>running solver                                                     \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mrunning solver                                                     \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>To cancel the simulation, use <span style=\"color: #008000; text-decoration-color: #008000\">'web.abort(task_id)'</span> or              \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #008000; text-decoration-color: #008000\">'web.delete(task_id)'</span> or abort/delete the task in the web UI.      \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>Terminating the Python script will not stop the job running on the \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>cloud.                                                             \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mTo cancel the simulation, use \u001b[32m'web.abort\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or              \n",
       "\u001b[2;36m             \u001b[0m\u001b[32m'web.delete\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or abort/delete the task in the web UI.      \n",
       "\u001b[2;36m             \u001b[0mTerminating the Python script will not stop the job running on the \n",
       "\u001b[2;36m             \u001b[0mcloud.                                                             \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b7f8359023d344e4a66cf541cfa6a4b0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:14 PDT </span>early shutoff detected at <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">16</span>%, exiting.                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:14 PDT\u001b[0m\u001b[2;36m \u001b[0mearly shutoff detected at \u001b[1;36m16\u001b[0m%, exiting.                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>status = postprocess                                               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstatus = postprocess                                               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:17 PDT </span>status = success                                                   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:17 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = success                                                   \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:18 PDT </span>View simulation result at                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da8</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">3-4464-9c80-1271190025e1v1'</span></a><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">.</span>                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:18 PDT\u001b[0m\u001b[2;36m \u001b[0mView simulation result at                                          \n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=476169;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[4;34m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=174910;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[4;34mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=476169;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[4;34m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=484794;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[4;34mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=476169;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[4;34m-24b5af63-da8\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=476169;https://tidy3d.simulation.cloud/workbench?taskId=fdve-24b5af63-da83-4464-9c80-1271190025e1v1\u001b\\\u001b[4;34m3-4464-9c80-1271190025e1v1'\u001b[0m\u001b]8;;\u001b\\\u001b[4;34m.\u001b[0m                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "92ffcdd6637a4d19b2ddd8dd1a1041f8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>loading simulation from simulation_data.hdf5                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mloading simulation from simulation_data.hdf5                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">WARNING: monitors</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #800000; text-decoration-color: #800000\"> contains frequencies outside of the simulation</span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">frequency range </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.878008e+14</span><span style=\"color: #800000; text-decoration-color: #800000\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3.117842e+14</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)(</span><span style=\"color: #800000; text-decoration-color: #800000\">Hz</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)</span><span style=\"color: #800000; text-decoration-color: #800000\"> as defined by the </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">sources.                                                           </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING: monitors\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[31m contains frequencies outside of the simulation\u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31mfrequency range \u001b[0m\u001b[1;31m(\u001b[0m\u001b[1;36m2.878008e+14\u001b[0m\u001b[31m, \u001b[0m\u001b[1;36m3.117842e+14\u001b[0m\u001b[1;31m)\u001b[0m\u001b[1;31m(\u001b[0m\u001b[31mHz\u001b[0m\u001b[1;31m)\u001b[0m\u001b[31m as defined by the \u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31msources.                                                           \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>Created task <span style=\"color: #008000; text-decoration-color: #008000\">'modulated_sellmeier'</span> with task_id                    \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #008000; text-decoration-color: #008000\">'fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1'</span> and task_type <span style=\"color: #008000; text-decoration-color: #008000\">'FDTD'</span>.\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mCreated task \u001b[32m'modulated_sellmeier'\u001b[0m with task_id                    \n",
       "\u001b[2;36m             \u001b[0m\u001b[32m'fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1'\u001b[0m and task_type \u001b[32m'FDTD'\u001b[0m.\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>View task using web UI at                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\" target=\"_blank\"><span style=\"color: #008000; text-decoration-color: #008000\">8-4c39-88e8-92b7dda67fe2v1'</span></a>.                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mView task using web UI at                                          \n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=938244;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[32m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=162297;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[32mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=938244;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[32m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=960938;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[32mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=938244;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[32m-82b3a3b4-c3a\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=938244;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[32m8-4c39-88e8-92b7dda67fe2v1'\u001b[0m\u001b]8;;\u001b\\.                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0591c43c3a754bd6a715607aac062933",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:19 PDT </span>status = queued                                                    \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:19 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = queued                                                    \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:29 PDT </span>status = preprocess                                                \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:29 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = preprocess                                                \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:35 PDT </span>Maximum FlexCredit cost: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.025</span>. Use <span style=\"color: #008000; text-decoration-color: #008000\">'web.real_cost(task_id)'</span> to get\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>the billed FlexCredit cost after a simulation run.                 \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:35 PDT\u001b[0m\u001b[2;36m \u001b[0mMaximum FlexCredit cost: \u001b[1;36m0.025\u001b[0m. Use \u001b[32m'web.real_cost\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m to get\n",
       "\u001b[2;36m             \u001b[0mthe billed FlexCredit cost after a simulation run.                 \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>starting up solver                                                 \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstarting up solver                                                 \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>running solver                                                     \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mrunning solver                                                     \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>To cancel the simulation, use <span style=\"color: #008000; text-decoration-color: #008000\">'web.abort(task_id)'</span> or              \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #008000; text-decoration-color: #008000\">'web.delete(task_id)'</span> or abort/delete the task in the web UI.      \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>Terminating the Python script will not stop the job running on the \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>cloud.                                                             \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mTo cancel the simulation, use \u001b[32m'web.abort\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or              \n",
       "\u001b[2;36m             \u001b[0m\u001b[32m'web.delete\u001b[0m\u001b[32m(\u001b[0m\u001b[32mtask_id\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m or abort/delete the task in the web UI.      \n",
       "\u001b[2;36m             \u001b[0mTerminating the Python script will not stop the job running on the \n",
       "\u001b[2;36m             \u001b[0mcloud.                                                             \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "abf4edc6c0c6483293a63f3588e28335",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:47 PDT </span>early shutoff detected at <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">76</span>%, exiting.                            \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:47 PDT\u001b[0m\u001b[2;36m \u001b[0mearly shutoff detected at \u001b[1;36m76\u001b[0m%, exiting.                            \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>status = postprocess                                               \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mstatus = postprocess                                               \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:50 PDT </span>status = success                                                   \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:50 PDT\u001b[0m\u001b[2;36m \u001b[0mstatus = success                                                   \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span>View simulation result at                                          \n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">'https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a</span></a>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><a href=\"https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">8-4c39-88e8-92b7dda67fe2v1'</span></a><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">.</span>                                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0mView simulation result at                                          \n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=959758;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[4;34m'https://tidy3d.simulation.cloud/workbench?\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=518564;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[4;34mtaskId\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=959758;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[4;34m=\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=619446;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[4;34mfdve\u001b[0m\u001b]8;;\u001b\\\u001b]8;id=959758;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[4;34m-82b3a3b4-c3a\u001b[0m\u001b]8;;\u001b\\\n",
       "\u001b[2;36m             \u001b[0m\u001b]8;id=959758;https://tidy3d.simulation.cloud/workbench?taskId=fdve-82b3a3b4-c3a8-4c39-88e8-92b7dda67fe2v1\u001b\\\u001b[4;34m8-4c39-88e8-92b7dda67fe2v1'\u001b[0m\u001b]8;;\u001b\\\u001b[4;34m.\u001b[0m                                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0c0ea280880845a882ff9bbb4207c774",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"></pre>\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">15:36:51 PDT </span>loading simulation from simulation_data.hdf5                       \n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m15:36:51 PDT\u001b[0m\u001b[2;36m \u001b[0mloading simulation from simulation_data.hdf5                       \n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">WARNING: monitors</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #800000; text-decoration-color: #800000\"> contains frequencies outside of the simulation</span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">frequency range </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2.878008e+14</span><span style=\"color: #800000; text-decoration-color: #800000\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3.117842e+14</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)(</span><span style=\"color: #800000; text-decoration-color: #800000\">Hz</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">)</span><span style=\"color: #800000; text-decoration-color: #800000\"> as defined by the </span>\n",
       "<span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf\">             </span><span style=\"color: #800000; text-decoration-color: #800000\">sources.                                                           </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[2;36m            \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING: monitors\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[31m contains frequencies outside of the simulation\u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31mfrequency range \u001b[0m\u001b[1;31m(\u001b[0m\u001b[1;36m2.878008e+14\u001b[0m\u001b[31m, \u001b[0m\u001b[1;36m3.117842e+14\u001b[0m\u001b[1;31m)\u001b[0m\u001b[1;31m(\u001b[0m\u001b[31mHz\u001b[0m\u001b[1;31m)\u001b[0m\u001b[31m as defined by the \u001b[0m\n",
       "\u001b[2;36m             \u001b[0m\u001b[31msources.                                                           \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim_data_unmodulated = web.run(sim_unmodulated, task_name=\"unmodulated_sellmeier\", verbose=True)\n",
    "sim_data_modulated = web.run(sim_modulated, task_name=\"modulated_sellmeier\", verbose=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22d7ddfe-dede-4fef-9f98-e21e6db627b0",
   "metadata": {},
   "source": [
    "### Postprocess and plot\n",
    "Let's perform the same visualization of the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "486c3d77-a7c0-400d-8351-a7f9519127b7",
   "metadata": {},
   "outputs": [],
   "source": [
    "photon_number_unmodulated = sim_data_unmodulated[\"flux\"].flux / monitor_freqs\n",
    "photon_number_modulated = sim_data_modulated[\"flux\"].flux / monitor_freqs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "98bcce55-c3c9-42b9-aa15-20e499a0510b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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xm+//YYJEyZoRsACAwPx/vvv49tvv0VGRgbat2+P2NhYXL9+vdA133vvPUyZMgV9+/bFuHHjkJubi2XLluGVV14pdgHEG2+8gVmzZiE8PBzt27fHxYsXsXbtWtStW1ernq+vLypXrozly5fDyckJDg4OaNOmDerUqYPvv/8ePXr0QOPGjREeHo4aNWogKSkJ+/btg7OzM/744w8AwMyZM7Fz50689tpr+PDDD1FQUIDFixejcePGWkkpEZUzpl6Way4AiK1bt2qOt2/fLgAIBwcHrVelSpVE//79hRBCxMfHCwAvfU2ZMkUIIcSdO3eEh4eHOH/+vKaNoKAgMX78+CLjycjIEK1btxbdu3cX+fn5RvveRGXFs9udvMyz250IIURWVpaIiIgQXl5ewsrKStSvX198/fXXWtuFCCHEkydPxLhx44Srq6twcHAQvXr1EomJiYW2OxFCiN27d4smTZoIa2tr4efnJ37++WedtzuZOHGiqF69urCzsxMdOnQQx44dE0FBQSIoKEjr3N9++000atRIVKpUqdDWJ+fOnRNvvfWWcHV1FTY2NsLHx0f0799fxMbGal3jwIEDokWLFsLa2lrUrVtXLF++vMg4iaj8kAnx3LxABSWTybB161b06dMHALBx40YMHDgQf//9NywtLbXqOjo6olq1asjPz8fNmzdfel1XV1e4u7tj27Zt6Nu3r9a1FAoFZDIZLCwsIJfLNZ9lZWUhJCQE9vb22L59O2xtbQ37ZYmIiKhc4lTsCzRr1gwKhQL37t3Da6+9VmQda2trNGjQQKfrvf7667h48aJWWXh4OBo0aIApU6ZokrrMzEyEhITAxsYGv//+O5M6IiIi0lmFTuyys7O17qFJSEhAXFwcqlatildeeQUDBw7EkCFDMH/+fDRr1gz3799HbGws/P399X7UkJOTE5o0aaJV5uDgAFdXV015ZmYmunXrhtzcXPz888/IzMxEZmYmANUqt+dHDomIiIieVaETu9OnT6Nz586aY/WzI8PCwrB69WqsWrUKn3/+OSZOnIikpCS4ubmhbdu2eOONN4wSz9mzZ3HixAkAQL169bQ+S0hIKPLB40RERERqvMeOiIiIqJzgPnZERERE5USFm4pVKpVITk6Gk5PTC3d3JyIiIjIXQghkZWXBy8sLFhYvH5OrcIldcnIyvL29TR0GERERkV4S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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(2, 1, tight_layout=True)\n",
    "ax[0].plot(monitor_freqs / freq0, photon_number_unmodulated, color=\"k\")\n",
    "ax[0].set_ylabel(\"Photon number (a.u.)\")\n",
    "ax[0].set_title(\"Unmodulated\")\n",
    "ax[1].plot(monitor_freqs / freq0, photon_number_modulated, color=\"r\")\n",
    "ax[1].set_ylabel(\"Photon number (a.u.)\")\n",
    "ax[1].set_title(\"Modulated\")\n",
    "ax[1].set_xlabel(\"Frequency (freq0)\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9acb07f6-f4a9-479a-b373-25dea7da1136",
   "metadata": {},
   "source": [
    "Indeed, we only see up-conversion in the 1st sideband."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8406d96-ac31-4ab7-9825-914727dc9bb0",
   "metadata": {},
   "source": [
    "## Notes:\n",
    "- When subpixel averaging is on, it will be applied to the passive part of the medium, but not to the active modulation part.\n",
    "- In dispersive medium, modulation can be applied to relative permittivity at infinite frequency `eps_inf` and `conductivity`. Modulation to other fields such as dispersive coefficients is expected in the future.\n",
    "- When modulation is applied to relative permittivity at infinite frequency, `eps_inf` must be positive at any time. The time step will be adjusted accordingly to the minimum value of `eps_inf`to meet CFL condition; Similarly, when modulation is applied to conductivity, the conductivity must be non-negative at any time, unless `allow_gain` is set to be `True`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d5062454-4ff6-4889-9133-7af787815dff",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "description": "This notebook demonstrate how to simulation actively modulated devices such as electro-optical modulators in Tidy3D.",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "keywords": "active devices, electro-optical, EOM, modulators, electro-absorption, EAM, Tidy3D, FDTD",
  "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.11.0"
  },
  "title": "How to apply time modulation to materials in Tidy3D FDTD"
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
