{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Resonator benchmark (COMSOL)\n", "\n", "Run this notebook in your browser using [Binder](https://mybinder.org/v2/gh/flexcompute-readthedocs/tidy3d-docs/readthedocs?labpath=docs%2Fsource%2Fnotebooks%2FHighQ_Si.ipynb).\n", "\n", "In this example, we reproduce the findings of Zhang et al. (2018), which is linked [here](https://www.osapublishing.org/ol/abstract.cfm?uri=ol-43-8-1842).\n", "\n", "This notebook was originally developed and written by Romil Audhkhasi (USC). \n", "\n", "The paper investigates the resonances of silicon structures by measuring their transmission spectrum under varying geometric parameters.\n", "\n", "The paper uses a finite element solver (COMSOL), which matches the result from Tidy3D.\n", "\n", "\"diagram\"\n", "\n", "(Citation: Opt. Lett. 43, 1842-1845 (2018). With permission from the Optical Society)\n", "\n", "To do this calculation, we use a broadband pulse and frequency monitor to measure the flux on the opposite side of the structure." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:52.091958Z", "iopub.status.busy": "2022-06-07T17:39:52.091392Z", "iopub.status.idle": "2022-06-07T17:39:53.319257Z", "shell.execute_reply": "2022-06-07T17:39:53.318758Z" }, "tags": [] }, "outputs": [], "source": [ "# standard python imports\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# tidy3D import\n", "import tidy3d as td\n", "from tidy3d import web" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set Up Simulation" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:53.321301Z", "iopub.status.busy": "2022-06-07T17:39:53.321182Z", "iopub.status.idle": "2022-06-07T17:39:53.337050Z", "shell.execute_reply": "2022-06-07T17:39:53.336602Z" }, "tags": [] }, "outputs": [], "source": [ "nm = 1e-3\n", "\n", "# define the frequencies we want to measure\n", "Nfreq = 1000\n", "wavelengths = nm * np.linspace(1050, 1400, Nfreq)\n", "freqs = td.constants.C_0 / wavelengths\n", "\n", "# define the frequency center and width of our pulse\n", "freq0 = freqs[len(freqs)//2]\n", "freqw = freqs[0] - freqs[-1]\n", "\n", "# Define material properties\n", "n_SiO2 = 1.46\n", "n_Si = 3.52\n", "SiO2 = td.Medium(permittivity=n_SiO2**2)\n", "Si = td.Medium(permittivity=n_Si**2)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:53.338796Z", "iopub.status.busy": "2022-06-07T17:39:53.338681Z", "iopub.status.idle": "2022-06-07T17:39:53.354527Z", "shell.execute_reply": "2022-06-07T17:39:53.354089Z" }, "tags": [] }, "outputs": [], "source": [ "# space between resonators and source\n", "spc = 1.5\n", "\n", "# geometric parameters\n", "Px = Py = P = 650 * nm # periodicity in x and y\n", "t = 260 * nm # thickness of silcon\n", "g = 80 * nm # gap size\n", "L = 480 * nm # length in x\n", "w_sum = 400 * nm # sum of lengths in y\n", "\n", "# resolution (should be commensurate with periodicity)\n", "dl = P / 32\n", "\n", "# computes widths in y (w1 and w2) given the difference in lengths in y and the sum of lengths\n", "def calc_ws(delta):\n", " \"\"\" delta is a tunable parameter used to break symmetry.\n", " w_sum = w1 + w2\n", " delta = w1 - w2\n", " w_sum + delta = 2 * w1\n", " \"\"\"\n", " w1 = (w_sum + delta) / 2\n", " w2 = w_sum - w1\n", " return w1, w2" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:53.356412Z", "iopub.status.busy": "2022-06-07T17:39:53.356280Z", "iopub.status.idle": "2022-06-07T17:39:53.373364Z", "shell.execute_reply": "2022-06-07T17:39:53.372931Z" }, "tags": [] }, "outputs": [], "source": [ "# total size in z and [x,y,z]\n", "Lz = spc + t + t + spc\n", "sim_size = [Px, Py, Lz]\n", "\n", "# sio2 substrate\n", "substrate = td.Structure(\n", " geometry=td.Box(\n", " center=[0, 0, -Lz/2],\n", " size=[td.inf, td.inf, 2*(spc+t)],\n", " ),\n", " medium=SiO2,\n", " name='substrate'\n", ")\n", "\n", "# creates a list of structures given a value of 'delta'\n", "def geometry(delta):\n", " w1, w2 = calc_ws(delta)\n", " center_y = (w1 - w2) / 2.0\n", "\n", " cell1 = td.Structure(\n", " geometry=td.Box(\n", " center=[0, center_y + (g + w1)/2., t/2.],\n", " size=[L, w1, t],\n", " ),\n", " medium=Si,\n", " name='cell1'\n", " )\n", "\n", " cell2 = td.Structure(\n", " geometry=td.Box(\n", " center=[0, center_y - (g + w2)/2., t/2.],\n", " size=[L, w2, t],\n", " ),\n", " medium=Si,\n", " name='cell2'\n", " )\n", "\n", " return [substrate, cell1, cell2]\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:53.375166Z", "iopub.status.busy": "2022-06-07T17:39:53.375051Z", "iopub.status.idle": "2022-06-07T17:39:53.390162Z", "shell.execute_reply": "2022-06-07T17:39:53.389723Z" }, "tags": [] }, "outputs": [], "source": [ "# time dependence of source\n", "gaussian = td.GaussianPulse(freq0=freq0, fwidth=freqw)\n", "\n", "# plane wave source\n", "source = td.PlaneWave(\n", " source_time=gaussian,\n", " direction='-',\n", " size=(td.inf, td.inf, 0),\n", " center=(0,0,Lz/2 - spc + 2*dl),\n", " pol_angle=0.0)\n", "\n", "# Simulation run time. Note you need to run a long time to calculate high Q resonances.\n", "run_time = 7e-12" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:53.391970Z", "iopub.status.busy": "2022-06-07T17:39:53.391854Z", "iopub.status.idle": "2022-06-07T17:39:53.406493Z", "shell.execute_reply": "2022-06-07T17:39:53.405942Z" }, "tags": [] }, "outputs": [], "source": [ "# monitor fields on other side of structure (substrate side) at range of frequencies\n", "monitor = td.FluxMonitor(\n", " center=[0., 0., -Lz/2 + spc - 2 * dl],\n", " size=[td.inf, td.inf, 0],\n", " freqs=freqs,\n", " name='flux')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define Case Studies\n", "\n", "Here we define the three simulations to run\n", "\n", "- With no resonators (normalization)\n", "- With symmetric (delta = 0) resonators\n", "- With asymmetric (delta != 0) resonators\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:53.408343Z", "iopub.status.busy": "2022-06-07T17:39:53.408223Z", "iopub.status.idle": "2022-06-07T17:39:53.436685Z", "shell.execute_reply": "2022-06-07T17:39:53.436231Z" }, "tags": [] }, "outputs": [], "source": [ "grid_spec = td.GridSpec(\n", " grid_x = td.UniformGrid(dl=dl),\n", " grid_y = td.UniformGrid(dl=dl),\n", " grid_z = td.AutoGrid(min_steps_per_wvl=32)\n", ")\n", "\n", "# normalizing run (no Si) to get baseline transmission vs freq\n", "# can be run for shorter time as there are no resonances\n", "sim_empty = td.Simulation(size=sim_size,\n", " grid_spec=grid_spec,\n", " structures=[substrate],\n", " sources=[source],\n", " monitors=[monitor],\n", " run_time=run_time/10,\n", " boundary_spec=td.BoundarySpec.pml(z=True))\n", "\n", "# run with delta = 0\n", "sim_d0 = td.Simulation(size=sim_size,\n", " grid_spec = grid_spec,\n", " structures=geometry(0),\n", " sources=[source],\n", " monitors=[monitor],\n", " run_time=run_time,\n", " boundary_spec=td.BoundarySpec.pml(z=True))\n", "\n", "# run with delta = 20nm\n", "sim_d20 = td.Simulation(size=sim_size,\n", " grid_spec = grid_spec,\n", " structures=geometry(20 * nm),\n", " sources=[source],\n", " monitors=[monitor],\n", " run_time=run_time,\n", " boundary_spec=td.BoundarySpec.pml(z=True))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:53.438510Z", "iopub.status.busy": "2022-06-07T17:39:53.438393Z", "iopub.status.idle": "2022-06-07T17:39:53.999168Z", "shell.execute_reply": "2022-06-07T17:39:53.998841Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
[10:39:53] INFO     Auto meshing using wavelength 1.2252 defined from        grid_spec.py:478\n",
       "                    sources.                                                                 \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:39:53]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Auto meshing using wavelength \u001b[1;36m1.2252\u001b[0m defined from \u001b]8;id=563557;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/components/grid/grid_spec.py\u001b\\\u001b[2mgrid_spec.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=946447;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/components/grid/grid_spec.py#478\u001b\\\u001b[2m478\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m sources. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
<Figure size 1008x576 with 6 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 1008x576 with \u001b[0m\u001b[1;36m6\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Structure visualization in various planes\n", "\n", "fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(14, 8))\n", "sim_d0.plot_eps(x=0, ax=ax1)\n", "sim_d0.plot_eps(y=g, ax=ax2)\n", "sim_d0.plot_eps(z=0, ax=ax3)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run Simulations" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:39:54.000895Z", "iopub.status.busy": "2022-06-07T17:39:54.000769Z", "iopub.status.idle": "2022-06-07T17:42:44.085873Z", "shell.execute_reply": "2022-06-07T17:42:44.085423Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
[10:39:54] INFO     Auto meshing using wavelength 1.2252 defined from        grid_spec.py:478\n",
       "                    sources.                                                                 \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:39:54]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Auto meshing using wavelength \u001b[1;36m1.2252\u001b[0m defined from \u001b]8;id=480745;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/components/grid/grid_spec.py\u001b\\\u001b[2mgrid_spec.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=237645;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/components/grid/grid_spec.py#478\u001b\\\u001b[2m478\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m sources. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO     Using Tidy3D credentials from stored file                      auth.py:74\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using Tidy3D credentials from stored file \u001b]8;id=859650;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/auth.py\u001b\\\u001b[2mauth.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=122790;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/auth.py#74\u001b\\\u001b[2m74\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[10:39:56] INFO     Uploaded task 'normalization' with task_id                  webapi.py:120\n",
       "                    '9f8ad51b-c8c1-4735-9b91-c4e50ecbbd5a'.                                  \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:39:56]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Uploaded task \u001b[32m'normalization'\u001b[0m with task_id \u001b]8;id=933392;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=540856;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#120\u001b\\\u001b[2m120\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m \u001b[32m'9f8ad51b-c8c1-4735-9b91-c4e50ecbbd5a'\u001b[0m. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[10:39:59] INFO     Uploaded task 'Si-resonator-delta-0' with task_id           webapi.py:120\n",
       "                    '40501e17-c51c-4137-a85a-eeecf5c5dad2'.                                  \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:39:59]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Uploaded task \u001b[32m'Si-resonator-delta-0'\u001b[0m with task_id \u001b]8;id=483908;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=54095;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#120\u001b\\\u001b[2m120\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m \u001b[32m'40501e17-c51c-4137-a85a-eeecf5c5dad2'\u001b[0m. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO     Auto meshing using wavelength 1.2252 defined from        grid_spec.py:478\n",
       "                    sources.                                                                 \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Auto meshing using wavelength \u001b[1;36m1.2252\u001b[0m defined from \u001b]8;id=536475;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/components/grid/grid_spec.py\u001b\\\u001b[2mgrid_spec.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=965526;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/components/grid/grid_spec.py#478\u001b\\\u001b[2m478\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m sources. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[10:40:02] INFO     Uploaded task 'Si-resonator-delta-20' with task_id          webapi.py:120\n",
       "                    '7fe174ae-66d6-4a9a-8073-5aae842a39c4'.                                  \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:40:02]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Uploaded task \u001b[32m'Si-resonator-delta-20'\u001b[0m with task_id \u001b]8;id=732327;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=177312;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#120\u001b\\\u001b[2m120\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m \u001b[32m'7fe174ae-66d6-4a9a-8073-5aae842a39c4'\u001b[0m. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[10:40:07] Started working on Batch.                                         container.py:384\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:40:07]\u001b[0m\u001b[2;36m \u001b[0mStarted working on Batch. \u001b]8;id=979981;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/container.py\u001b\\\u001b[2mcontainer.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=147478;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/container.py#384\u001b\\\u001b[2m384\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f8516e1bb7b440f9949f53f40b7b17dc", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[10:42:44] Batch complete.                                                   container.py:405\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:42:44]\u001b[0m\u001b[2;36m \u001b[0mBatch complete. \u001b]8;id=617420;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/container.py\u001b\\\u001b[2mcontainer.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=826106;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/container.py#405\u001b\\\u001b[2m405\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "batch = web.Batch(\n", " simulations={\n", " 'normalization': sim_empty,\n", " 'Si-resonator-delta-0': sim_d0,\n", " 'Si-resonator-delta-20': sim_d20,\n", " }\n", ")\n", "\n", "results = batch.run(path_dir='data')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get Results and Plot" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:42:45.783750Z", "iopub.status.busy": "2022-06-07T17:42:45.783638Z", "iopub.status.idle": "2022-06-07T17:42:51.005567Z", "shell.execute_reply": "2022-06-07T17:42:51.004733Z" } }, "outputs": [ { "data": { "text/html": [ "
[10:42:47] INFO     downloading file \"monitor_data.hdf5\" to                     webapi.py:584\n",
       "                    \"data/9f8ad51b-c8c1-4735-9b91-c4e50ecbbd5a.hdf5\"                         \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:42:47]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m downloading file \u001b[32m\"monitor_data.hdf5\"\u001b[0m to \u001b]8;id=214207;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=996303;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#584\u001b\\\u001b[2m584\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m \u001b[32m\"data/9f8ad51b-c8c1-4735-9b91-c4e50ecbbd5a.hdf5\"\u001b[0m \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "19ab8015a2034e7e8324dacf05accd3e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO     loading SimulationData from                                 webapi.py:407\n",
       "                    data/9f8ad51b-c8c1-4735-9b91-c4e50ecbbd5a.hdf5                           \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m loading SimulationData from \u001b]8;id=525972;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=596544;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#407\u001b\\\u001b[2m407\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m data/\u001b[93m9f8ad51b-c8c1-4735-9b91-c4e50ecbbd5a\u001b[0m.hdf5 \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[10:42:48] INFO     downloading file \"monitor_data.hdf5\" to                     webapi.py:584\n",
       "                    \"data/40501e17-c51c-4137-a85a-eeecf5c5dad2.hdf5\"                         \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:42:48]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m downloading file \u001b[32m\"monitor_data.hdf5\"\u001b[0m to \u001b]8;id=863699;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=316725;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#584\u001b\\\u001b[2m584\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m \u001b[32m\"data/40501e17-c51c-4137-a85a-eeecf5c5dad2.hdf5\"\u001b[0m \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c4fffd6cefe04019825c7eca73149855", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[10:42:49] INFO     loading SimulationData from                                 webapi.py:407\n",
       "                    data/40501e17-c51c-4137-a85a-eeecf5c5dad2.hdf5                           \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:42:49]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m loading SimulationData from \u001b]8;id=125280;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=494581;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#407\u001b\\\u001b[2m407\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m data/\u001b[93m40501e17-c51c-4137-a85a-eeecf5c5dad2\u001b[0m.hdf5 \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[10:42:50] INFO     downloading file \"monitor_data.hdf5\" to                     webapi.py:584\n",
       "                    \"data/7fe174ae-66d6-4a9a-8073-5aae842a39c4.hdf5\"                         \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[10:42:50]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m downloading file \u001b[32m\"monitor_data.hdf5\"\u001b[0m to \u001b]8;id=380319;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=827028;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#584\u001b\\\u001b[2m584\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m \u001b[32m\"data/7fe174ae-66d6-4a9a-8073-5aae842a39c4.hdf5\"\u001b[0m \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "91136ee6403e435bb082c67a6f7b9d89", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO     loading SimulationData from                                 webapi.py:407\n",
       "                    data/7fe174ae-66d6-4a9a-8073-5aae842a39c4.hdf5                           \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m loading SimulationData from \u001b]8;id=321074;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=629386;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#407\u001b\\\u001b[2m407\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m data/\u001b[93m7fe174ae-66d6-4a9a-8073-5aae842a39c4\u001b[0m.hdf5 \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           WARNING  Simulation final field decay value of 0.0069 is greater     webapi.py:413\n",
       "                    than the simulation shutoff threshold of 1e-05. Consider                 \n",
       "                    simulation again with large run_time duration for more                   \n",
       "                    accurate results.                                                        \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING \u001b[0m Simulation final field decay value of \u001b[1;36m0.0069\u001b[0m is greater \u001b]8;id=112468;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py\u001b\\\u001b[2mwebapi.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=194608;file:///home/momchil/Drive/flexcompute/tidy3d-core/tidy3d_frontend/tidy3d/web/webapi.py#413\u001b\\\u001b[2m413\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m than the simulation shutoff threshold of \u001b[1;36m1e-05\u001b[0m. Consider \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m simulation again with large run_time duration for more \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m accurate results. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "batch_data = batch.load(path_dir='data')\n", "flux_norm = batch_data['normalization']['flux']\n", "trans_g0 = batch_data['Si-resonator-delta-0']['flux'] / flux_norm\n", "trans_g20 = batch_data['Si-resonator-delta-20']['flux'] / flux_norm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The normalizing run computes the transmitted flux for an air -> SiO2 interface, which is just below unity due to some reflection.\n", "\n", "While not technically necessary for this example, since this transmission can be computed analytically, it is often a good idea to run a normalizing run so you can accurately measure the *change* in output when the structure is added. For example, for multilayer structures, the normalizing run displays frequency dependence, which would make it prudent to include in the calculation." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2022-06-07T17:42:51.043115Z", "iopub.status.busy": "2022-06-07T17:42:51.042745Z", "iopub.status.idle": "2022-06-07T17:42:51.210276Z", "shell.execute_reply": "2022-06-07T17:42:51.209848Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
<Figure size 432x324 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x324 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot transmission, compare to paper results, look similar\n", "fig, ax = plt.subplots(1, 1, figsize=(6, 4.5))\n", "wavelengths_nm = td.C_0 / trans_g0.f / nm\n", "plt.plot(wavelengths_nm, trans_g0.values, color='red', label='$\\delta=0$')\n", "plt.plot(wavelengths_nm, trans_g20.values, color='blue', label='$\\delta=20~nm$')\n", "plt.xlabel('wavelength ($nm$)')\n", "plt.ylabel('Transmission')\n", "plt.xlim([1050, 1400])\n", "plt.ylim([0, 1])\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Results Comparison\n", "\n", "Compare this plot to published results computed using COMSOL (FEM):\n", "\n", "\"diagram\"\n", "\n", "(Citation: Opt. Lett. 43, 1842-1845 (2018). With permission from the Optical Society)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "19ab8015a2034e7e8324dacf05accd3e": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_b50f5c7acee84753a6272f6236f749d5", "msg_id": "", "outputs": [ { "data": { "text/html": "
Downloading... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--\n
\n", "text/plain": "\u001b[31mDownloading...\u001b[0m \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "1b25ee35b2f848c8a9cd457f42312d62": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "224f5d72662f45fab0c2406d7fcdfb39": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "91136ee6403e435bb082c67a6f7b9d89": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_b8f918d72cb7466bac811158bea00dbe", "msg_id": "", "outputs": [ { "data": { "text/html": "
Downloading... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--\n
\n", "text/plain": "\u001b[31mDownloading...\u001b[0m \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "b50f5c7acee84753a6272f6236f749d5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b8f918d72cb7466bac811158bea00dbe": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c4fffd6cefe04019825c7eca73149855": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_224f5d72662f45fab0c2406d7fcdfb39", "msg_id": "", "outputs": [ { "data": { "text/html": "
Downloading... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--\n
\n", "text/plain": "\u001b[31mDownloading...\u001b[0m \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "f8516e1bb7b440f9949f53f40b7b17dc": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_1b25ee35b2f848c8a9cd457f42312d62", "msg_id": "", "outputs": [ { "data": { "text/html": "
normalization: status = success         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00\nSi-resonator-delta-0: status = success  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00\nSi-resonator-delta-20: status = success ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00\n
\n", "text/plain": "normalization: status = success \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m0:00:00\u001b[0m\nSi-resonator-delta-0: status = success \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m0:00:00\u001b[0m\nSi-resonator-delta-20: status = success \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m0:00:00\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }