{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d3a3ccc7",
   "metadata": {},
   "source": [
    "# Compact on-chip optical switch design optimization using DBS"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18a9d53e",
   "metadata": {},
   "source": [
    "Note: the cost of running the entire notebook is larger than 1 FlexCredit.\n",
    "\n",
    "The direct binary search (DBS) algorithm is an iterative optimization algorithm often used in image processing and has been adapted for use in photonic design. \n",
    "\n",
    "The steps in a DBS are typically as follows:\n",
    "\n",
    "1. **Initialization**: Starting with an initial design, usually a binary representation of the photonic structure where each element (pixel or voxel) is either one material or another.\n",
    "\n",
    "2. **Evaluation**: Simulating the optical performance of the current design using methods like finite-difference time-domain (FDTD) simulations.\n",
    "\n",
    "3. **Modification**: Adjusting the design by flipping the state of specific elements (from one material to another) based on certain criteria, such as improving performance metrics like transmission efficiency.\n",
    "\n",
    "4. **Iteration**: Repeating the evaluation and modification steps until a satisfactory design is reached or a certain number of iterations have been completed.\n",
    "\n",
    "This process allows for the fine-tuning of photonic structures to achieve highly specific and efficient optical characteristics. The DBS algorithm is valued for its relative simplicity and effectiveness, especially in scenarios where gradient-based optimization is challenging.\n",
    "\n",
    "This notebook demonstrates the design of an on-chip optical switch based on the phase change material Ge$_2$Sb$_2$Te$_5$ (GST) using the DBS algorithm. The design region is a square of 900 nm by 900 nm discretized into 9 by 9 pixels with a size of 100 nm. The 3 by 3 pixels at the center of the design region is GST. Other pixels can be either silicon or silica. The goal is to optimize the materials at each pixel such that the best switching performance is obtained. That is, we want to achieve the highest transmission possible when GST is in the amorphous state while the lowest transmission possible when GST is in the crystalline state. The notebook follows the work `Yin, K.; Gao, Y.; Shi, H.; Zhu, S. Inverse Design and Numerical Investigations of an Ultra-Compact Integrated Optical Switch Based on Phase Change Material. Nanomaterials 2023, 13, 1643.` [DOI: 10.3390/nano13101643](https://doi.org/10.3390/nano13101643).\n",
    "\n",
    "<img src=\"img/optical_switch.png\" width=\"450\" alt=\"Schematic of the optical switch\">\n",
    "\n",
    "`Tidy3D` is a powerful tool for photonic design optimization due to its fast speed and high throughput. Besides DBS, we have demonstrated particle swarm optimizations of a [polarization beam splitter](https://www.flexcompute.com/tidy3d/examples/notebooks/ParticleSwarmOptimizedPBS/) and a [bullseye cavity](https://www.flexcompute.com/tidy3d/examples/notebooks/BullseyeCavityPSO/), genetic algorithm optimization of an [on-chip reflector](https://www.flexcompute.com/tidy3d/examples/notebooks/GeneticAlgorithmReflector/), and CMA-ES optimization of a [waveguide S-bend](https://www.flexcompute.com/tidy3d/examples/notebooks/SbendCMAES/). Furthermore, we also have a growing list of gradient-based adjoint optimization examples including\n",
    "\n",
    "1. [Mode converter](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd3InverseDesign/),\n",
    "\n",
    "2. [Waveguide taper](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd5BoundaryGradients/),\n",
    "\n",
    "3. [Metalens](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd7Metalens/),\n",
    "\n",
    "4. [Waveguide bend](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd8WaveguideBend/), \n",
    "\n",
    "5. [Multiplexer](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd9WDM/),\n",
    "\n",
    "6. [Y-branch](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd10YBranchLevelSet/),\n",
    "\n",
    "7. [Light extractor](https://www.flexcompute.com/tidy3d/examples/notebooks/Autograd12LightExtractor/)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cdfc062d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:06.493349Z",
     "iopub.status.busy": "2025-05-15T10:51:06.493117Z",
     "iopub.status.idle": "2025-05-15T10:51:07.728443Z",
     "shell.execute_reply": "2025-05-15T10:51:07.728115Z"
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tidy3d as td\n",
    "import tidy3d.web as web"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3c058e4",
   "metadata": {},
   "source": [
    "## Simulation Setup"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d78e2a7",
   "metadata": {},
   "source": [
    "The simulation wavelength range is 1535 nm to 1565 nm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "118136c4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.730160Z",
     "iopub.status.busy": "2025-05-15T10:51:07.729849Z",
     "iopub.status.idle": "2025-05-15T10:51:07.732038Z",
     "shell.execute_reply": "2025-05-15T10:51:07.731849Z"
    }
   },
   "outputs": [],
   "source": [
    "lda0 = 1.55  # central wavelength\n",
    "freq0 = td.C_0 / lda0  # central frequency\n",
    "ldas = np.linspace(1.535, 1.565, 11)  # wavelength range\n",
    "freqs = td.C_0 / ldas  # frequency range\n",
    "fwidth = 0.5 * (np.max(freqs) - np.min(freqs))  # width of the source frequency range"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0567181f",
   "metadata": {},
   "source": [
    "For simplicity, we will use the silicon and oxide media directly from the [material library](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/material_library.html#). The GST has two states: the crystalline state with a higher loss and an amorphous state with a lower loss. Since our wavelength range of interest is relatively narrow, we use the `from_nk` method to define the material responses of GST in two states. It's important to note that the defined refractive index is strictly accurate only at the given frequency. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "484a9970",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.733094Z",
     "iopub.status.busy": "2025-05-15T10:51:07.732995Z",
     "iopub.status.idle": "2025-05-15T10:51:07.734690Z",
     "shell.execute_reply": "2025-05-15T10:51:07.734487Z"
    }
   },
   "outputs": [],
   "source": [
    "Si = td.material_library[\"cSi\"][\"Palik_Lossless\"]\n",
    "SiO2 = td.material_library[\"SiO2\"][\"Palik_Lossless\"]\n",
    "\n",
    "aGST = td.Medium.from_nk(n=3.98, k=0.0244, freq=freq0)\n",
    "cGST = td.Medium.from_nk(n=6.49, k=1.054, freq=freq0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "224781b9",
   "metadata": {},
   "source": [
    "The straight waveguide has a width of 400 nm and a thickness of 220 nm. The size of the pixels in the design region is 100 nm by 100 nm. There are 9 by 9 pixels in total but the 3 by 3 pixels at the center are fixed to GST. In the current version, we only support `Nx`, `Ny`, and `N_gst` being odd numbers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6c08fefb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.735860Z",
     "iopub.status.busy": "2025-05-15T10:51:07.735713Z",
     "iopub.status.idle": "2025-05-15T10:51:07.737244Z",
     "shell.execute_reply": "2025-05-15T10:51:07.737054Z"
    }
   },
   "outputs": [],
   "source": [
    "w = 0.4  # width of the waveguide\n",
    "t = 0.22  # thickness of the silicon\n",
    "l = 1  # length of the waveguide in the simulation\n",
    "Px = Py = 0.1  # pixel sizes in the x and y directions\n",
    "Nx = 9  # number of pixels in the x direction\n",
    "Ny = 9  # number of pixels in the y direction\n",
    "N_gst = 3  # number of pixels for GST\n",
    "buffer = 0.8  # buffer spacing"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a97410ec",
   "metadata": {},
   "source": [
    "Now we want to characterize a design by a parameter vector $(x_1, x_2, ..., x_n)$, where $x_i$ represents the material at the i-th pixel and takes the value of either 0 (silica) or 1 (silicon). Due to the symmetry, we only focus on symmetric designs. Since the GST pixels are fixed, we have a total of `(Ny * Nx - N_gst * N_gst) // 2 + Nx // 2 - 1 = 39` tuneable pixels. That is, the length of the parameter vector is 39 in this case.\n",
    "\n",
    "For easier structure construction, we define a helper function `parse_to_2d` that takes the parameter vector and parses it into a 2D array representing the design. With that, we define another helper function `create_design` to define the structures in the design region as well as the input and output straight waveguides."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e634637c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.738382Z",
     "iopub.status.busy": "2025-05-15T10:51:07.738308Z",
     "iopub.status.idle": "2025-05-15T10:51:07.741564Z",
     "shell.execute_reply": "2025-05-15T10:51:07.741307Z"
    }
   },
   "outputs": [],
   "source": [
    "def parse_to_2d(array_1d, Nx, Ny, N_gst):\n",
    "    # ensure Ny, Nx, and N_gst are odd\n",
    "    if Ny % 2 == 0 or Nx % 2 == 0 or N_gst % 2 == 0:\n",
    "        raise ValueError(\"Nx, Ny, and N_gst must be odd numbers.\")\n",
    "\n",
    "    # calculate the number of changeable elements in the top half (including the middle row)\n",
    "    num_elements_half = (Ny * Nx - N_gst * N_gst) // 2 + Nx // 2 - 1\n",
    "\n",
    "    if len(array_1d) != num_elements_half:\n",
    "        raise ValueError(f\"1D array must have {num_elements_half} elements.\")\n",
    "\n",
    "    array_2d = np.zeros((Ny, Nx))\n",
    "\n",
    "    idx_1d = 0\n",
    "    for i in range(Ny):\n",
    "        for j in range(Nx):\n",
    "            # skip the fixed center\n",
    "            if (Ny - N_gst) // 2 <= i < (Ny + N_gst) // 2 and (Nx - N_gst) // 2 <= j < (\n",
    "                Nx + N_gst\n",
    "            ) // 2:\n",
    "                continue\n",
    "\n",
    "            # Fill up to and including the middle row\n",
    "            if i <= Ny // 2:\n",
    "                array_2d[i, j] = array_1d[idx_1d]\n",
    "                idx_1d += 1\n",
    "\n",
    "                # Mirror the element to the symmetrical position, but not for the middle row\n",
    "                if i < Ny // 2:\n",
    "                    array_2d[Ny - 1 - i, j] = array_1d[idx_1d - 1]\n",
    "\n",
    "    return array_2d\n",
    "\n",
    "\n",
    "def create_design(pixels):\n",
    "    # parse 1d parameter vector to 2d array\n",
    "    pixels_2d = parse_to_2d(pixels, Nx, Ny, N_gst)\n",
    "\n",
    "    # define geometry at each pixel\n",
    "    geo = 0\n",
    "    for i, row in enumerate(pixels_2d):\n",
    "        for j, pixel in enumerate(row):\n",
    "            if pixel == 1:\n",
    "                geo += td.Box(\n",
    "                    center=(l + Px / 2 + Px * j, (Ny - 1) / 2 * Py - Py * i, 0), size=(Px, Py, t)\n",
    "                )\n",
    "\n",
    "    # add input and output waveguides\n",
    "    geo += td.Box(center=(0, 0, 0), size=(2 * l, w, t))\n",
    "    geo += td.Box(center=(l + Nx * Px + l, 0, 0), size=(2 * l, w, t))\n",
    "\n",
    "    # define structure from geometry\n",
    "    design = td.Structure(geometry=geo, medium=Si)\n",
    "\n",
    "    return design"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "594349f3",
   "metadata": {},
   "source": [
    "To test the functions, we define a parameter vector of all 1s. This should define a design that is all silicon besides the 3 by 3 pixels at the center for GST. The plot confirms that it's working correctly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e064cd73",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.742686Z",
     "iopub.status.busy": "2025-05-15T10:51:07.742583Z",
     "iopub.status.idle": "2025-05-15T10:51:07.818068Z",
     "shell.execute_reply": "2025-05-15T10:51:07.817809Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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MmWKDh06pD//+c/asGGD66vS4pS2XaNGjXTx4kV17txZSUlJRR6FR9QaNWokp9OpQ4cOlfh8Zf1atrj3p3DZz9+f27Vp0yZ9++23mjdvnl5++WX16NFDSUlJql27dpHaW/1KeevWrfrDH/6gkSNH6tlnn71pTXh4eJkeS5YscW0TFxenq1evKi0tzW1fO3fudK0vSVxcnPbt21cktO7cuVP+/v6655573PazZ88et7ozZ87o9OnTpT4PYCUEO8Di7Ha7evXqpU8++aTIX3zSD/cVK0lSUpJ8fX31n//5n261//M//6Ps7Gx1795dkpSTk1PkLv8tWrSQ3W53fUV28eLFIvsv/Ev3Zl+jFSrLdk8//bQyMjL0X//1X0Vqr1275rrCt1evXrLb7ZowYUKRwPDT11ejRo0it3O5mdatWys0NFRz5sxxew2ffvqp0tLSXO/PL1V4pO+nPebn52vWrFlFamvUqFHmr2bPnj2rp59+Wh06dHBdWXszt3OOXc+ePVWtWjW3Hg3D0Jw5c3TXXXepffv2bn0cPnxYN27ccC176qmndO7cOf397393LcvKytLSpUv12GOPuc6pa9asmWJiYvTee++53fpl9uzZstlsrnvgAVUBX8UCVcCkSZP02WefKTEx0XUrkLNnz2rp0qX6/PPP3W7H8XMhISEaPXq0xo8fr0ceeUSPP/64jhw5olmzZikhIUH9+vWTJG3YsEHDhw9X7969dc899+j777/X/Pnz5ePjoyeffFKSNGHCBG3ZskXdu3dXvXr1dP78ec2aNUuRkZEl3vaiLNs999xz+uijj/S73/1OGzdu1AMPPKCCggIdPnxYH330kdasWaPWrVurcePGeuONNzRx4kR17NhRTzzxhBwOh3bv3q2IiAilpqZKkuLj4zV79mz96U9/UuPGjRUaGuq6EOOnqlWrprffflvJyclKTExU3759Xbc7qV+/vn7/+9/f7sfmpn379qpdu7YGDBigl156STabTfPnz79pMI+Pj9eSJUuUkpKihIQEBQQE6LHHHrvpfl966SVduHBBr732mhYvXuy2rmXLlmrZsqWk2zvHLjIyUiNHjtTkyZN148YNJSQkaPny5dq6dasWLlzo9rX06NGj9cEHH+j48eOu++499dRTuv/++5WcnKxDhw65Jk8UFBRo/Pjxbs81efJkPf744+rSpYue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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pixels = np.ones((Ny * Nx - N_gst * N_gst) // 2 + Nx // 2 - 1)\n",
    "design = create_design(pixels)\n",
    "design.plot(z=0)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acfff64f",
   "metadata": {},
   "source": [
    "Now we can define a function to create a [Simulation](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.Simulation.html#tidy3d.Simulation) given a parameter vector and the state of the GST."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e5eff941",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.819134Z",
     "iopub.status.busy": "2025-05-15T10:51:07.819052Z",
     "iopub.status.idle": "2025-05-15T10:51:07.822159Z",
     "shell.execute_reply": "2025-05-15T10:51:07.821965Z"
    }
   },
   "outputs": [],
   "source": [
    "def make_sim(pixels, gst_state):\n",
    "    # create silicon structures\n",
    "    design = create_design(pixels)\n",
    "\n",
    "    # add a mode source as excitation\n",
    "    mode_spec = td.ModeSpec(num_modes=1, target_neff=3.5)\n",
    "    mode_source = td.ModeSource(\n",
    "        center=(l / 2, 0, 0),\n",
    "        size=(0, 4 * w, 6 * t),\n",
    "        source_time=td.GaussianPulse(freq0=freq0, fwidth=fwidth),\n",
    "        direction=\"+\",\n",
    "        mode_spec=mode_spec,\n",
    "        mode_index=0,\n",
    "    )\n",
    "\n",
    "    # add a mode monitor to measure transmission at the output waveguide\n",
    "    mode_monitor = td.ModeMonitor(\n",
    "        center=(Nx * Px + 1.5 * l, 0, 0),\n",
    "        size=mode_source.size,\n",
    "        freqs=freqs,\n",
    "        mode_spec=mode_spec,\n",
    "        name=\"mode\",\n",
    "    )\n",
    "\n",
    "    # create the GST pixels\n",
    "    if gst_state == \"c\":\n",
    "        gst = td.Structure(\n",
    "            geometry=td.Box(center=(l + Px * Nx / 2, 0, 0), size=(N_gst * Px, N_gst * Py, t)),\n",
    "            medium=cGST,\n",
    "        )\n",
    "    elif gst_state == \"a\":\n",
    "        gst = td.Structure(\n",
    "            geometry=td.Box(center=(l + Px * Nx / 2, 0, 0), size=(N_gst * Px, N_gst * Py, t)),\n",
    "            medium=aGST,\n",
    "        )\n",
    "    else:\n",
    "        raise ValueError(\"gst_state can only be 'a' or 'c'.\")\n",
    "\n",
    "    # define simulation domain size\n",
    "    Lx = 2 * l + Nx * Px\n",
    "    Ly = Ny * Py + 2 * buffer\n",
    "    Lz = 10 * t\n",
    "\n",
    "    # simulation domain box\n",
    "    sim_box = td.Box.from_bounds(rmin=(0, -Ly / 2, -Lz / 2), rmax=(Lx, Ly / 2, Lz / 2))\n",
    "\n",
    "    run_time = 1e-12  # simulation run time\n",
    "\n",
    "    # define simulation\n",
    "    sim = td.Simulation(\n",
    "        center=sim_box.center,\n",
    "        size=sim_box.size,\n",
    "        grid_spec=td.GridSpec.auto(min_steps_per_wvl=15, wavelength=lda0),\n",
    "        structures=[design, gst],\n",
    "        sources=[mode_source],\n",
    "        monitors=[mode_monitor],\n",
    "        run_time=run_time,\n",
    "        boundary_spec=td.BoundarySpec.all_sides(boundary=td.PML()),\n",
    "        medium=SiO2,\n",
    "        symmetry=(0, -1, 1),\n",
    "    )\n",
    "\n",
    "    return sim"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24e35714",
   "metadata": {},
   "source": [
    "Visualize the simulation in 3D to check if the setup is correct."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "2b72997b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.823217Z",
     "iopub.status.busy": "2025-05-15T10:51:07.823101Z",
     "iopub.status.idle": "2025-05-15T10:51:07.841969Z",
     "shell.execute_reply": "2025-05-15T10:51:07.841735Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "    <div class=\"simulation-viewer\" data-width=\"800\" data-height=\"800\" data-simulation=\"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\" ></div>\n",
       "    <script>\n",
       "        \n",
       "        /**\n",
       "        * Simulation Viewer Injector\n",
       "        *\n",
       "        * Monitors the document for elements being added in the form:\n",
       "        *\n",
       "        *    <div class=\"simulation-viewer\" data-width=\"800\" data-height=\"800\" data-simulation=\"{...}\" />\n",
       "        *\n",
       "        * This script will then inject an iframe to the viewer application, and pass it the simulation data\n",
       "        * via the postMessage API on request. The script may be safely included multiple times, with only the\n",
       "        * configuration of the first started script (e.g. viewer URL) applying.\n",
       "        *\n",
       "        */\n",
       "        (function() {\n",
       "            const TARGET_CLASS = \"simulation-viewer\";\n",
       "            const ACTIVE_CLASS = \"simulation-viewer-active\";\n",
       "            const VIEWER_URL = \"https://tidy3d.simulation.cloud/simulation-viewer\";\n",
       "\n",
       "            class SimulationViewerInjector {\n",
       "                constructor() {\n",
       "                    for (var node of document.getElementsByClassName(TARGET_CLASS)) {\n",
       "                        this.injectViewer(node);\n",
       "                    }\n",
       "\n",
       "                    // Monitor for newly added nodes to the DOM\n",
       "                    this.observer = new MutationObserver(this.onMutations.bind(this));\n",
       "                    this.observer.observe(document.body, {childList: true, subtree: true});\n",
       "                }\n",
       "\n",
       "                onMutations(mutations) {\n",
       "                    for (var mutation of mutations) {\n",
       "                        if (mutation.type === 'childList') {\n",
       "                            /**\n",
       "                            * Have found that adding the element does not reliably trigger the mutation observer.\n",
       "                            * It may be the case that setting content with innerHTML does not trigger.\n",
       "                            *\n",
       "                            * It seems to be sufficient to re-scan the document for un-activated viewers\n",
       "                            * whenever an event occurs, as Jupyter triggers multiple events on cell evaluation.\n",
       "                            */\n",
       "                            var viewers = document.getElementsByClassName(TARGET_CLASS);\n",
       "                            for (var node of viewers) {\n",
       "                                this.injectViewer(node);\n",
       "                            }\n",
       "                        }\n",
       "                    }\n",
       "                }\n",
       "\n",
       "                injectViewer(node) {\n",
       "                    // (re-)check that this is a valid simulation container and has not already been injected\n",
       "                    if (node.classList.contains(TARGET_CLASS) && !node.classList.contains(ACTIVE_CLASS)) {\n",
       "                        // Mark node as injected, to prevent re-runs\n",
       "                        node.classList.add(ACTIVE_CLASS);\n",
       "\n",
       "                        var uuid;\n",
       "                        if (window.crypto && window.crypto.randomUUID) {\n",
       "                            uuid = window.crypto.randomUUID();\n",
       "                        } else {\n",
       "                            uuid = \"\" + Math.random();\n",
       "                        }\n",
       "\n",
       "                        var frame = document.createElement(\"iframe\");\n",
       "                        frame.width = node.dataset.width || 800;\n",
       "                        frame.height = node.dataset.height || 800;\n",
       "                        frame.style.cssText = `width:${frame.width}px;height:${frame.height}px;max-width:none;border:0;display:block`\n",
       "                        frame.src = VIEWER_URL + \"?uuid=\" + uuid;\n",
       "\n",
       "                        var postMessageToViewer;\n",
       "                        postMessageToViewer = event => {\n",
       "                            if(event.data.type === 'viewer' && event.data.uuid===uuid){\n",
       "                                frame.contentWindow.postMessage({ type: 'jupyter', uuid, value: node.dataset.simulation, fileType: 'hdf5'}, '*');\n",
       "\n",
       "                                // Run once only\n",
       "                                window.removeEventListener('message', postMessageToViewer);\n",
       "                            }\n",
       "                        };\n",
       "                        window.addEventListener(\n",
       "                            'message',\n",
       "                            postMessageToViewer,\n",
       "                            false\n",
       "                        );\n",
       "\n",
       "                        node.appendChild(frame);\n",
       "                    }\n",
       "                }\n",
       "            }\n",
       "\n",
       "            if (!window.simulationViewerInjector) {\n",
       "                window.simulationViewerInjector = new SimulationViewerInjector();\n",
       "            }\n",
       "        })();\n",
       "    \n",
       "    </script>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim = make_sim(pixels, \"c\")\n",
    "sim.plot_3d()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "68d4144a",
   "metadata": {},
   "source": [
    "## Optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61c0c8d6",
   "metadata": {},
   "source": [
    "The objective function is defined as the contrast between the transmissions when GST is in the amorphous and crystalline states. To evaluate it, we need to define two simulations with the same parameter vector but a different GST state, run the simulation in parallel, extract the transmission, and calculate the difference."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "245e0136",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.843287Z",
     "iopub.status.busy": "2025-05-15T10:51:07.843211Z",
     "iopub.status.idle": "2025-05-15T10:51:07.845194Z",
     "shell.execute_reply": "2025-05-15T10:51:07.844989Z"
    }
   },
   "outputs": [],
   "source": [
    "def objective_function(pixels):\n",
    "    # define two simulations\n",
    "    sim_a = make_sim(pixels, \"a\")\n",
    "    sim_c = make_sim(pixels, \"c\")\n",
    "    sims = {\"a\": sim_a, \"c\": sim_c}\n",
    "\n",
    "    # define and submit a batch\n",
    "    batch = web.Batch(simulations=sims, verbose=False)\n",
    "    batch_results = batch.run(path_dir=\"data\")\n",
    "\n",
    "    # calculate transmission\n",
    "    sim_data_a = batch_results[\"a\"]\n",
    "    sim_data_c = batch_results[\"c\"]\n",
    "\n",
    "    t_a = sim_data_a[\"mode\"].amps.sel(direction=\"+\").values\n",
    "    T_a = np.mean(np.abs(t_a) ** 2)\n",
    "\n",
    "    t_c = sim_data_c[\"mode\"].amps.sel(direction=\"+\").values\n",
    "    T_c = np.mean(np.abs(t_c) ** 2)\n",
    "\n",
    "    return T_a - T_c"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7bd8d61",
   "metadata": {},
   "source": [
    "We start the optimization using the parameter vector of all 1s. The objective function is evaluated to be just above 0.8."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "43cf6dfa",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:07.846690Z",
     "iopub.status.busy": "2025-05-15T10:51:07.846532Z",
     "iopub.status.idle": "2025-05-15T10:51:15.152575Z",
     "shell.execute_reply": "2025-05-15T10:51:15.152198Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initial objective function is 0.813.\n"
     ]
    }
   ],
   "source": [
    "initial_obj = objective_function(pixels)\n",
    "print(f\"Initial objective function is {initial_obj:.3f}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c351ea0",
   "metadata": {},
   "source": [
    "Since the DBS algorithm is pretty straightforward, we don't need to make sure of any external libraries. We can define the DBS optimizer directly. In the optimization, we flip the value of elements in the parameter vector one by one. If the flip leads to an improved objective function, we keep the flipped element. If no improvement is found, we revert back to the original value. One iteration ends when all elements of the parameter vector are flipped once and this can be done for multiple iterations. We can implement different termination conditions. For example, if no improvement is found or the improvement is smaller than a certain threshold between consecutive iterations, the optimization stops. Or if the objective function reaches a certain threshold value, the optimization stops. In this example, we simply monitor the improvement and terminate the optimization if no improvement is found within one iteration. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "2d502b3d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:15.153674Z",
     "iopub.status.busy": "2025-05-15T10:51:15.153577Z",
     "iopub.status.idle": "2025-05-15T10:51:15.156488Z",
     "shell.execute_reply": "2025-05-15T10:51:15.156262Z"
    }
   },
   "outputs": [],
   "source": [
    "def direct_binary_search(pixels, iterations):\n",
    "    num_of_eval = 0  # number of objective function evaluations\n",
    "    best_score = [initial_obj]  # best objective function values\n",
    "    print(f\"The initial objective function is {initial_obj:.3f}.\")\n",
    "\n",
    "    for i in range(iterations):\n",
    "        print(f\"Iteration {i + 1} starts.\")\n",
    "        improvement = False  # keep track of if there is improvement within one iteration\n",
    "\n",
    "        for idx in range(len(pixels)):\n",
    "            # flip the current element\n",
    "            pixels[idx] = 1 - pixels[idx]\n",
    "\n",
    "            # Evaluate the new solution\n",
    "            current_score = objective_function(pixels)\n",
    "            num_of_eval += 1\n",
    "\n",
    "            # if better, update best solution, else revert change\n",
    "            if current_score > best_score[-1]:\n",
    "                best_score.append(current_score)\n",
    "                improvement = True\n",
    "                print(\n",
    "                    f\"A best objective of {current_score:.3f} found after {num_of_eval} evaluation(s).\"\n",
    "                )\n",
    "\n",
    "            else:\n",
    "                best_score.append(best_score[-1])\n",
    "                pixels[idx] = 1 - pixels[idx]  # revert change\n",
    "        if not improvement:\n",
    "            break\n",
    "\n",
    "    return pixels, best_score"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58b45f25",
   "metadata": {},
   "source": [
    "For simplicity, we only demonstrate the optimization for 1 iteration in this case. We tested more iterations and found that the second iteration only improved the performance very mildly. The third iteration showed no improvement at all. Within the first iteration, we improve the objective function by about 10%, which is quite significant."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "e3d1e13b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:51:15.157415Z",
     "iopub.status.busy": "2025-05-15T10:51:15.157257Z",
     "iopub.status.idle": "2025-05-15T10:57:37.594247Z",
     "shell.execute_reply": "2025-05-15T10:57:37.593816Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The initial objective function is 0.813.\n",
      "Iteration 1 starts.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.832 found after 1 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.859 found after 2 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.863 found after 6 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.870 found after 7 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.871 found after 8 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.882 found after 9 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.899 found after 10 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.916 found after 11 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.918 found after 13 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.922 found after 18 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.924 found after 24 evaluation(s).\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A best objective of 0.927 found after 26 evaluation(s).\n"
     ]
    }
   ],
   "source": [
    "pixel_opt, best_score = direct_binary_search(pixels, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "32e7982c",
   "metadata": {},
   "source": [
    "Plot the best objective function as a function of the number of evaluations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5d7dd184",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:57:37.595574Z",
     "iopub.status.busy": "2025-05-15T10:57:37.595456Z",
     "iopub.status.idle": "2025-05-15T10:57:37.636118Z",
     "shell.execute_reply": "2025-05-15T10:57:37.635896Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(best_score, c=\"red\", linewidth=2)\n",
    "plt.xlabel(\"Number of evaluations\")\n",
    "plt.ylabel(\"Best objective function\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6643a93b",
   "metadata": {},
   "source": [
    "## Final Design"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7a4117d",
   "metadata": {},
   "source": [
    "After the optimization, we can inspect the final design more closely. We rerun the simulations with an added [FieldMonitor](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.FieldMonitor.html) so we can visualize the switching behavior better. We didn't have a [FieldMonitor](https://docs.flexcompute.com/projects/tidy3d/en/latest/api/_autosummary/tidy3d.FieldMonitor.html) during the optimization to minimize unnecessary data download. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "64034478",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:57:37.637520Z",
     "iopub.status.busy": "2025-05-15T10:57:37.637411Z",
     "iopub.status.idle": "2025-05-15T10:58:00.685690Z",
     "shell.execute_reply": "2025-05-15T10:58:00.685195Z"
    }
   },
   "outputs": [],
   "source": [
    "sim_a_opt = make_sim(pixels, \"a\")\n",
    "sim_c_opt = make_sim(pixels, \"c\")\n",
    "\n",
    "# add a field monitor to visualize field distribution at z=0\n",
    "field_monitor = td.FieldMonitor(\n",
    "    center=(0, 0, 0), size=(td.inf, td.inf, 0), freqs=[freq0], name=\"field\"\n",
    ")\n",
    "\n",
    "sim_a_opt = sim_a_opt.copy(update={\"monitors\": sim_a_opt.monitors + (field_monitor,)})\n",
    "sim_c_opt = sim_c_opt.copy(update={\"monitors\": sim_c_opt.monitors + (field_monitor,)})\n",
    "\n",
    "sims = {\"a\": sim_a_opt, \"c\": sim_c_opt}\n",
    "\n",
    "batch_opt = web.Batch(simulations=sims, verbose=False)\n",
    "batch_opt_results = batch_opt.run(path_dir=\"data\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "deec2ea2",
   "metadata": {},
   "source": [
    "Visualize the final design."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "5ca8a450",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:58:00.687256Z",
     "iopub.status.busy": "2025-05-15T10:58:00.687083Z",
     "iopub.status.idle": "2025-05-15T10:58:00.812374Z",
     "shell.execute_reply": "2025-05-15T10:58:00.811960Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ4AAAHWCAYAAABHd+8OAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAitFJREFUeJztnXl8G9W5939nVi22ZJPFjkmAlC2EEgIhhLBcoPjiW1IgtKWUCyQNOyW0IfSlhCWBlDYFylJKIJe2kJZCWVoIXKApEHYIoVnoZQlhC4QldhZsyZasZWbO+8dYmy3ZM9JoPE6eLx99iEej0ZF+Os8zc+ZZGOecgyAIgiBcQhjsARAEQRA7F+R4CIIgCFchx0MQBEG4CjkegiAIwlXI8RAEQRCuQo6HIAiCcBVyPARBEISrkOMhCIIgXIUcD0EQBOEq5HgIwgYvvvgiGGN48cUXB3sohMM8/PDD2GWXXdDV1eX6e7/33nuQJAnvvPOO6+89GJDjIYgi3HnnnVi6dOlgD6MsHnjgAdx2222DPQwAgGEYuPHGGzF27Fj4fD5MmDABf/3rXy2/vqOjA+effz5GjBiBYDCIY489FmvXri267xNPPIGDDz4YPp8Pu+22GxYsWABN0yy9j67rWLBgAS655BLU1NRYHp9TjB8/HtOmTcP8+fNdf+9BgRME0Yf999+fH3300X2267rOu7u7ua7r7g/KItOmTeO77777YA+Dc875FVdcwQHw8847j99999182rRpHAD/61//OuBrdV3nhx9+OA8Gg/zaa6/ld9xxBx8/fjyvra3lH3zwQcG+Tz/9NGeM8WOPPZbffffd/JJLLuGCIPALL7zQ0jgfe+wxzhjjX3zxRVmf0wmefvppDoB/9NFHgzYGtyDHQ5Skq6trsIcwaJRyPEMBrzieL774gsuyzC+++OLsNsMw+FFHHcVHjx7NNU3r9/UPPfQQB8AfeeSR7LYtW7bwuro6fvrppxfsO378eH7ggQfydDqd3XbVVVdxxhhfv379gGM96aST+JFHHmn1o1WFVCrF6+vr+TXXXDOo43ADcjw7CV988QU/++yz+ahRo7iiKHyPPfbgF154IU8mk5xzzu+9914OgL/44ov8oosu4iNGjOB1dXXZ1y9evJiPHz+eK4rCR40axX/84x/z9vb2gvf44IMP+He/+13e0NDAVVXlu+66Kz/ttNN4R0dHdp9nnnmGH3HEETwcDvNgMMj32WcfPm/evAHHb+V1iUSCz58/n++5555cURQ+evRo/v/+3//jiUSiz/Huu+8+PnnyZO73+3ldXR0/6qij+D//+U/OOee77747B1DwyDihF154gQPgL7zwQsHxHn74YX7wwQdzn8/Hhw0bxs8444w+Z88zZ87kwWCQf/HFF/zkk0/mwWCQDx8+nF922WUDGmHOOV+2bBk/4YQTshp+4xvf4AsXLix47dFHH91n7P05oZkzZ/bZP/NYsGDBgGPqj8WLF3MA/N133y3Y/sADD3AA/JVXXun39aeeeipvaGjoc3V5/vnn80AgkNX13Xff5QD44sWLC/b78ssvOQD+i1/8ot/36e7u5oqi8GuvvbZg+8aNGzkAfu+99/Z5Te/vZ8GCBRwA37BhAz/jjDN4KBTiw4cP51dffTU3DINv2rSJn3TSSby2tpY3NDTw3/zmN0XHcsopp/AJEyb0O94dAcmlFT1iEPnqq69w6KGHZtfLx40bhy+//BJ/+9vfEI/HoShKdt8f//jHGDFiBObPn49YLAYAuPbaa3HdddehubkZF110ETZs2IC77roL//rXv/Daa69BlmWkUim0tLQgmUzikksuQWNjI7788ks8+eST6OjoQDgcxrvvvovvfOc7mDBhAhYuXAhVVfHRRx/htdde63f8Vl5nGAZOOukkvPrqqzj//POx33774e2338att96KDz74AMuWLcvue9111+Haa6/F4YcfjoULF0JRFKxatQrPP/88jj/+eNx2223Ztf6rrroKANDQ0FByfEuXLsWsWbMwefJkLFq0CG1tbfjtb3+L1157DevWrUNdXV12X13X0dLSgilTpuA3v/kNnnvuOdx8883Yc889cdFFF/X7PSxduhQ1NTWYO3cuampq8Pzzz2P+/PmIRqO46aabAABXXXUVIpEIvvjiC9x6660A0O89iwsuuADNzc0F25YvX477778fI0eOzG7btm1bv2PLUFtbC1VVAQDr1q1DMBjEfvvtV7DPoYcemn3+yCOPLHmsdevW4eCDD4YgFN6KPvTQQ3H33Xfjgw8+wAEHHIB169YBAA455JCC/ZqamjB69Ojs86VYs2YNUqkUDj74YEufsT9OO+007Lfffvj1r3+Np556Ctdffz122WUX/M///A++9a1v4YYbbsD9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+z/yyCMYN24cfD4fDjjgADz99NMFz3POMX/+fIwaNQp+vx/Nzc348MMPq/kRhgQvv/wyTjzxRDQ1NYExhmXLlg34mhdffBEHH3wwVFXFXnvthaVLl/bZx65+OwOLFi3C5MmTUVtbi5EjR2L69OnYsGHDgK+j37Z97rrrLkyYMCGbkzN16lT84x//6Pc1nvmeOTEoPPjgg1xRFH7PPffwd999l5933nm8rq6Ot7W1Fd3/tdde46Io8htvvJG/9957/Oqrr+ayLPO33347u8+vf/1rHg6H+bJly/i///1vftJJJ/GxY8fy7u5utz6WJ3n66af5VVddxR999FEOgD/22GP97v/JJ5/wQCDA586dy9977z3+u9/9jouiyJcvX57dx65+OwstLS383nvv5e+88w5/6623+AknnMB322033tXVVfI19NsujyeeeII/9dRT/IMPPuAbNmzgV155JZdlmb/zzjtF9/fS90yOZ5A49NBD+cUXX5z9W9d13tTUxBctWlR0/x/84Ad82rRpBdumTJnCL7jgAs4554Zh8MbGRn7TTTdln+/o6OCqqvK//vWvVfgEQxMrjufyyy/n+++/f8G20047jbe0tGT/tqvfzsqWLVs4AP7SSy+V3Id+285RX1/P//CHPxR9zkvfMy21DQKpVApr1qxBc3NzdpsgCGhubsbKlSuLvmblypUF+wNAS0tLdv+NGzeitbW1YJ9wOIwpU6aUPCZRnIG+63L021mJRCIAzPb1paDfduXouo4HH3wQsVgMU6dOLbqPl75nqtU2CGzbtg26rhe05waAhoYGvP/++0Vf09raWnT/1tbW7POZbaX2IaxR6ruORqPo7u5Ge3u7bf12RgzDwJw5c3DEEUfgm9/8Zsn96LddPm+//TamTp2KRCKBmpoaPPbYYxg/fnzRfb30PZPjIQiiKlx88cV455138Oqrrw72UHZY9t13X7z11luIRCL429/+hpkzZ+Kll14q6Xy8Ai21DQLDhw+HKIpoa2sr2N7W1obGxsair2lsbOx3/8z/7RyTKE6p7zoUCsHv95el387G7Nmz8eSTT+KFF14YsKo7/bbLR1EU7LXXXpg0aRIWLVqEAw88EL/97W+L7uul75kczyCgKAomTZqEFStWZLcZhoEVK1aUXJ+dOnVqwf4A8Oyzz2b3Hzt2LBobGwv2iUajWLVqVcljEsUZ6LsuR7+dBc45Zs+ejcceewzPP/88xo4dO+Br6LftHIZhIJlMFn3OU9+zo6EKhGUefPBBrqoqX7p0KX/vvff4+eefz+vq6nhrayvnnPOzzjqLX3HFFdn9X3vtNS5JEv/Nb37D169fzxcsWFA0FLKuro4//vjj/P/+7//4ySefvNOHnHLOeWdnJ1+3bh1ft24dB8BvueUWvm7dOv7ZZ59xzjm/4oor+FlnnZXdPxNO/f/+3//j69ev54sXLy4aTt2ffjsrF110EQ+Hw/zFF1/kmzdvzj7i8Xh2H/ptO8MVV1zBX3rpJb5x40b+f//3f/yKK67gjDH+zDPPcM69/T2T4xlEfve73/HddtuNK4rCDz30UP7GG29knzv66KP5zJkzC/Z/+OGH+T777MMVReH7778/f+qppwqeNwyDX3PNNbyhoYGrqsqPO+44vmHDBjc+iqd54YUXOIA+j8z3O3PmTH700Uf3ec3EiRO5oij8G9/4Br/33nv7HLc//XZWin3PAAq+P/ptO8PZZ5/Nd999d64oCh8xYgQ/7rjjsk6Hc29/z1SdmiAIgnAVusdDEARBuAo5HoIgCMJVyPEQBEEQrkKOhyAIgnAVcjwEQRCEq5DjIQiCIFyFHA9BEAThKuR4CIIgCFchx0MQHuaPf/wjjj/++Kq/z/LlyzFx4kQYhlH19yIIcjwE4VESiQSuueYaLFiwoOrv9V//9V+QZRn3339/1d+LIMjxEIRH+dvf/oZQKIQjjjjClff70Y9+hNtvv92V9yJ2bsjxEESV2bp1KxobG/GrX/0qu+3111+Hoih9ytTn8+CDD+LEE08s2HbMMcdgzpw5BdumT5+OH/3oR9m/99hjD1x//fWYMWMGampqsPvuu+OJJ57A1q1bcfLJJ6OmpgYTJkzA6tWrC45z4oknYvXq1fj444/L/7AEYQFyPARRZUaMGIF77rkH1157LVavXo3Ozk6cddZZmD17No477riSr3v11VdxyCGHlPWet956K4444gisW7cO06ZNw1lnnYUZM2bgzDPPxNq1a7HnnntixowZyK8RvNtuu6GhoQGvvPJKWe9JEFYhx0MQLnDCCSfgvPPOwxlnnIELL7wQwWAQixYtKrl/R0cHIpEImpqayn6/Cy64AHvvvTfmz5+PaDSKyZMn49RTT8U+++yDn//851i/fn2fbpNNTU347LPPynpPgrAKOR6CcInf/OY30DQNjzzyCO6//36oqlpy3+7ubgCAz+cr670mTJiQ/XdDQwMA4IADDuizbcuWLQWv8/v9iMfjZb0nQViFHA9BuMTHH3+Mr776CoZh4NNPP+1332HDhoExhvb29gGPq+t6n22yLGf/zRgrua13+PTXX3+NESNGDPieBFEJ5HgIwgVSqRTOPPNMnHbaafjFL36Bc889t8/VRj6KomD8+PF47733+jzXe3nsk08+cWSMiUQCH3/8MQ466CBHjkcQpSDHQxAucNVVVyESieD222/Hz3/+c+yzzz44++yz+31NS0sLXn311T7bH3/8cTz66KP4+OOP8ctf/hLvvfcePvvsM3z55ZcVjfGNN96AqqqYOnVqRcchiIEgx0MQVebFF1/Ebbfdhvvuuw+hUAiCIOC+++7DK6+8grvuuqvk68455xw8/fTTiEQiBdunTZuGG2+8EePHj8fLL7+MO++8E2+++Sbuu+++isb517/+FWeccQYCgUBFxyGIgWA8P56SIAhPceqpp+Lggw/GvHnzAJh5PBMnTsRtt93m6Pts27YN++67L1avXo2xY8c6emyC6A1d8RCEh7nppptQU1NT9ff59NNPceedd5LTIVyBrngIYghRrSsegnATcjwEQRCEq9BSG0EQBOEq5HgIgiAIVyHHQxAEQbgKOR6CIAjCVcjxEARBEK5CjocgCIJwFXI8BEEQhKuQ4yEIgiBchRwPQRAE4Sr/H+pKPdNNWBcYAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim_a_opt.plot(z=0, monitor_alpha=0)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cac91d04",
   "metadata": {},
   "source": [
    "Plot the transmission spectra for the final design with GST at two states. A clear switching with >20 dB contrast is confirmed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "247bc591",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:58:00.813800Z",
     "iopub.status.busy": "2025-05-15T10:58:00.813687Z",
     "iopub.status.idle": "2025-05-15T10:58:01.379528Z",
     "shell.execute_reply": "2025-05-15T10:58:01.379013Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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NAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANG47+GRnZzujDgAAAJcrc/BZtWqVBg0apJiYGHl7e8vf31+BgYGKi4vTtGnTdPz4cVfUCQAAcNvsDj6ffvqpGjdurKFDh8rLy0svvfSSli9frjVr1mj+/PmKi4vT+vXrFRMToxEjRuj06dOurBsAAKDMLIZhGPZs2KlTJ73yyivq0aOHPDyKz0vp6el6//33FR4erqSkJKcVWl4yMzMVFBSkixcvKjAw0N3lAAAAO9j7/W138DELgg8AAJWPvd/f3NUFAABMo8zBZ//+/frkk0+UlpYmSfriiy/UuXNn/eY3v9G0adPECSQAAFBReZVl408//VT9+vWTh4eHLBaL5s6dq+HDhys+Pl6BgYF67bXXrAOfAQAAKpoynfGZNm2aXnzxRV27dk2zZ8/WiBEjNH36dK1atUqff/65PvjgAy1cuNBFpQIAANyeMg1uDggIUEpKiho2bKi8vDz5+PgoJSVFLVu2lCQdPnxYzZs315UrV1xWsKsxuBkAgMrHJYObL1++rICAgPw3enioWrVq8vf3t66vVq0aT3IGAAAVVpmCj8VikcViKXYeAACgIivT4GbDMNS4cWNr2MnKylLbtm2tDzTkji4AAFCRlSn4LFiwwFV1AAAAuFyZgs+gQYNcVQcAAIDL8eRmAABgGnaf8QkODrZ7IPO5c+ccLggAAMBV7A4+7777rvX12bNnNXXqVCUmJqpTp06SpOTkZK1Zs0avvvqq04sEAABwBod+nf3RRx9VQkKCnnnmGZvlf/7zn7V+/XqtWLHCWfWVOx5gCABA5ePSX2dfs2aNunfvXmh59+7dtX79ekeaBAAAcDmHgk9oaKg+++yzQss/++wzhYaG3nZRAAAArlCm29kLTJ48WU8++aQ2bdqkDh06SJK2bdum1atXa968eU4tEAAAwFkcCj6DBw9Ws2bN9N5772n58uWSpGbNmumrr76yBiEAAICKxqHBze4wbdo0ffHFF0pJSZGPj48uXLhQaJujR49q5MiR2rhxo2rU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Jk2aqE6dOtq0aZN12aZNm/Twww+rQYMG+uabb2yWJyQkSJL+/ve/q3379goICFBERIQGDBigU6dOSZLy8vJUt25dzZ4922Zf33//vTw8PHTkyBFJ0oULF/Tkk08qLCxMgYGBuv/++7Vr164S650/f76aNWsmPz8/NW3aVH/5y1+s6w4fPiyLxaLly5crISFB/v7+atOmjZKTk23amDdvnqKiouTv768+ffpo1qxZqlmzpiRp4cKFmjx5snbt2iWLxSKLxaKFCxda33vmzBn16dNH/v7+atSokVauXFlivf/85z/Vpk0b3XHHHdZlRZ1Revfdd1W/fn3r/ODBg9W7d2+98cYbCg8PV82aNTVlyhTduHFDL7zwgkJCQlS3bl0tWLDApp0WLVooMjJSn376aYl1AWZF8AGghIQEbdy40Tq/ceNGxcfHKy4uzrr86tWr2rZtmzX4XL9+Xa+//rp27dqlFStW6PDhw9azGh4eHnrssce0ZMkSm/0sXrxY9957r+rVqydJ6tu3r06dOqVVq1Zp586dateunR544IFiz1YsXrxYEydO1LRp05Samqo33nhDr776qhYtWmSz3YQJE/T8888rJSVFjRs31mOPPWa9lPf1119rxIgReu6555SSkqKuXbtq2rRp1vf2799fY8eOVYsWLXTixAmdOHFC/fv3t66fPHmy+vXrpx9++EEPPvigBg4cWOLZlS1btqh9+/Yl9n9x/vvf/+r48eP68ssvNWvWLE2aNEn/8z//o+DgYG3btk0jRozQ8OHDC43pufvuu7VlyxaH9glUeQ7/rjuAKmPevHlG9erVjevXrxuZmZmGl5eXcerUKWPJkiVG586dDcMwjA0bNhiSjCNHjhTZxrfffmtIMi5dumQYhmF8//33hsVisW6fm5tr3HHHHcbs2bMNwzCMLVu2GIGBgca1a9ds2mnYsKHx4YcfGoZhGJMmTTLatGljs27JkiU227/++utGp06dDMMwjLS0NEOSMX/+fOv6PXv2GJKM1NRUwzAMo3///sZDDz1k08bAgQONoKAg6/yt+y0gyXjllVes81lZWYYkY9WqVUX2iWEYRps2bYwpU6bYLCuq/XfeeceoV6+edX7QoEFGvXr1jNzcXOuyJk2aGPfdd591/saNG0b16tWNjz76yKatpKQkIz4+vtiaADPjjA8AxcfH6/Lly/r222+1ZcsWNW7cWGFhYYqLi7OO89m0aZNiYmIUHR0tSdq5c6d69uyp6OhoBQQEKC4uTlL+mBZJuvPOO9WsWTPrWZ/Nmzfr1KlT6tu3ryRp165dysrKUmhoqGrUqGGd0tLSihw8ffnyZR08eFBPPPGEzfZTp04ttH3r1q2tr+vUqSNJ1stw+/bt0913322z/a3zJbm57erVqyswMNDadlGuXr0qPz8/u9u/WYsWLeTh8et/psPDw9WqVSvrvKenp0JDQwvtv1q1arpy5YpD+wSqOi93FwDA/WJjY1W3bl1t3LhR58+ft4aYyMhIRUVFaevWrdq4caPuv/9+SfkhJDExUYmJiVq8eLHCwsJ09OhRJSYmKicnx9ruwIEDtWTJEo0bN05LlixR9+7dFRoaKin/zrFbxxYVKBhvc7OsrCxJ+eNzOnToYLPO09PTZt7b29v62mKxSMofd+QMN7dd0H5JbdeqVUvnz58vtd3c3Fy79mXP/s+dO6ewsLBS9wmYEcEHgKT8cT6bNm3S+fPn9cILL1iXd+7cWatWrdL27ds1cuRISdLevXt19uxZzZgxQ1FRUZJkc1dYgQEDBuiVV17Rzp079a9//Utz5syxrmvXrp0yMjLk5eVlM6i3OOHh4YqMjNShQ4c0cOBAhz9nkyZN9O2339osu3Xex8enyCDiiLZt2+qnn34qtPzkyZM284cOHXLK/iTpxx9/LPQoAgD5uNQFQFJ+8Pnqq6+UkpJiPeMjSXFxcfrwww+Vk5NjHdgcHR0tHx8fvf/++zp06JBWrlyp119/vVCb9evX1z333KMnnnhCubm56tWrl3Vdly5d1KlTJ/Xu3Vtr167V4cOHtXXrVk2YMKHIECXlDyyePn263nvvPf3888/avXu3FixYoFmzZtn9OZ999ln95z//0axZs7R//359+OGHWrVqlfXMUEHdaWlpSklJ0ZkzZ5SdnW13+7dKTExUcnJyoSCVkZGhKVOm6NChQ/rkk0/097//XefPn9fevXsd3pckXblyRTt37lS3bt1uqx2gqiL4AJCUH3yuXr2q2NhYhYeHW5fHxcXp0qVL1tveJSksLEwLFy7UsmXL1Lx5c82YMUNvv/12ke0OHDhQu3btUp8+fVStWjXrcovFov/85z/q3LmzhgwZosaNG+t3v/udjhw5YrP/mz355JOaP3++FixYoFatWikuLk4LFy5UgwYN7P6c9957r+bMmaNZs2apTZs2Wr16tZKSkmzG4Tz66KPq3r27EhISFBYWpo8++sju9m/Vo0cPeXl5af369TbLW7ZsqZ9//lktWrTQq6++qvnz58vHx0fPP/+8w/uSpM8++0zR0dG67777bqsdoKqyGIZhuLsIAHCnYcOGae/evS67BfyDDz7QypUrtWbNGkn5z/FZsWKFUlJSnL6vjh07avTo0RowYIDT2waqAsb4ADCdt99+W127dlX16tW1atUqLVq0yOZBiM42fPhwXbhwQZcuXXLpz1acOXNGjzzyiB577DGX7QOo7DjjA8B0+vXrp02bNunSpUuKiYnRs88+qxEjRpTb/l15xgdAyQg+AADANBjcDAAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATOP/A4N479t1DGf1AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sim_data_a = batch_opt_results[\"a\"]\n",
    "sim_data_c = batch_opt_results[\"c\"]\n",
    "\n",
    "t_a = sim_data_a[\"mode\"].amps.sel(direction=\"+\").values\n",
    "T_a = np.abs(t_a) ** 2\n",
    "\n",
    "t_c = sim_data_c[\"mode\"].amps.sel(direction=\"+\").values\n",
    "T_c = np.abs(t_c) ** 2\n",
    "\n",
    "plt.plot(ldas, 10 * np.log10(T_a), c=\"blue\", linewidth=2, label=\"On\")\n",
    "plt.plot(ldas, 10 * np.log10(T_c), c=\"red\", linewidth=2, label=\"Off\")\n",
    "plt.xlabel(\"Wavelength (µm)\")\n",
    "plt.ylabel(\"Transmission (dB)\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "36ea6d65",
   "metadata": {},
   "source": [
    "Finally, plot the electric field norms to see the energy flow. When the GST is in the amorphous state (on state), the waveguide mode is transmitted with little loss. When the GST is in the crystalline state (off state), the transmission is cut off nearly completely. The result confirms that the optimized design functions very well as an optical switch while maintaining an ultra-compact footprint. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "f63bebb2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-15T10:58:01.381199Z",
     "iopub.status.busy": "2025-05-15T10:58:01.380972Z",
     "iopub.status.idle": "2025-05-15T10:58:01.794450Z",
     "shell.execute_reply": "2025-05-15T10:58:01.793966Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 800x200 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 2), tight_layout=True)\n",
    "sim_data_a.plot_field(\n",
    "    field_monitor_name=\"field\", field_name=\"E\", val=\"abs\", ax=ax1, eps_alpha=0.4, vmin=0, vmax=70\n",
    ")\n",
    "sim_data_c.plot_field(\n",
    "    field_monitor_name=\"field\", field_name=\"E\", val=\"abs\", ax=ax2, eps_alpha=0.4, vmin=0, vmax=70\n",
    ")\n",
    "ax1.set_title(\"On state\")\n",
    "ax1.set_ylim(-1, 1)\n",
    "ax2.set_title(\"Off state\")\n",
    "ax2.set_ylim(-1, 1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2207faa7",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "applications": [
   "Passive photonic integrated circuit components"
  ],
  "description": "This notebook demonstrates how to use direct binary search to optimize an on-chip optical switch based on phase change material.",
  "feature_image": "./img/optical_switch.png",
  "features": [
   "Global optimization"
  ],
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "keywords": "direct binary search, optimization, optical switch, phase change material, 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.12.3"
  },
  "title": "Direct Binary Search Optimization of an Optical Switch | Flexcompute"
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
