{ "cells": [ { "cell_type": "markdown", "id": "0a854688", "metadata": {}, "source": [ "# Mode solver\n", "\n", "This tutorial shows how to use the mode solver plugin in Tidy3D." ] }, { "cell_type": "code", "execution_count": 1, "id": "dfe126a8", "metadata": { "tags": [] }, "outputs": [], "source": [ "# standard python imports\n", "import numpy as np\n", "import matplotlib.pylab as plt\n", "\n", "# tidy3D import\n", "import tidy3d as td\n", "from tidy3d.constants import C_0\n", "import tidy3d.web as web\n", "from tidy3d.plugins.mode import ModeSolver\n" ] }, { "cell_type": "markdown", "id": "56cfb817", "metadata": {}, "source": [ "## Setup\n", "\n", "We first set up the mode solver with information about our system. We start by setting parameters" ] }, { "cell_type": "code", "execution_count": 2, "id": "637d4748", "metadata": { "tags": [] }, "outputs": [], "source": [ "# size of simulation domain\n", "Lx, Ly, Lz = 6, 6, 6\n", "dl = 0.05\n", "\n", "# waveguide information\n", "wg_width = 1.5\n", "wg_height = 1.0\n", "wg_permittivity = 4.0\n", "\n", "# central frequency\n", "wvl_um = 2.0\n", "freq0 = C_0 / wvl_um\n", "fwidth = freq0 / 3\n", "\n", "# run_time in ps\n", "run_time = 1e-12\n", "\n", "# automatic grid specification\n", "grid_spec = td.GridSpec.auto(min_steps_per_wvl=20, wavelength=wvl_um)\n" ] }, { "cell_type": "markdown", "id": "97533832", "metadata": {}, "source": [ "Then we set up a simulation, in this case including a straight waveguide and periodic boundary conditions. Note that Tidy3D warns us that we have not added any sources in our `Simulation` object, however for purposes of mode solving it is not necessary." ] }, { "cell_type": "code", "execution_count": 3, "id": "a291bd49", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
[19:30:11] WARNING: No sources in simulation. log.py:50\n", "\n" ], "text/plain": [ "\u001b[2;36m[19:30:11]\u001b[0m\u001b[2;36m \u001b[0mWARNING: No sources in simulation. \u001b]8;id=625749;file:///home/daniil/Flexcompute/Code/frontend/tidy3d/log.py\u001b\\\u001b[2mlog.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=592478;file:///home/daniil/Flexcompute/Code/frontend/tidy3d/log.py#50\u001b\\\u001b[2m50\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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//xxkHbt2pn69eubZs2amUmTJgW84cDf//53M27cOJOUlGTCwsJMdHS0GTBggFm3bp1/m/Xr15uRI0eauLg443K5TFxcnBkzZoz55JNPrLNXdT+v12t+85vfmA4dOhi3220aN25sunXrZqZNm2aKi4sDtn399dfN7bff7t+uX79+Zu3atf77T506ZYYNG2YaNmxYpTccyM3N9T9edHS09Q0HLpaZmWmq8m1h69atpmfPniY8PNzExcWZn//852b16tUV5vn666/Nv/3bv5lGjRpd9g0HKnuDggvL1b7hgDHGlJeXmxdeeMEkJiYal8tlOnToYP74xz9W2O7Cj84cOXIkYP2ZM2fM+PHjTZMmTUyDBg1Mv379LvlndOnSpaZr167G7Xab+Ph489xzzxmv13vVxwBn8F6vAABY8BwlAAAWhBIAAAtCCQCARdCEMjs7W507d1ZUVJSioqLUq1cvvfPOO06PBQCo5YLmxTx/+ctfVK9ePd1yyy0yxuiNN97QjBkztGvXLnXo0MHp8QAAtVTQhLIy0dHRmjFjhsaPH+/0KACAWioo33CgvLxcixcvVmlpqXr16nXJ7crKygLeocTn8+nMmTNq0qTJFf12BgBAcDLG6KuvvlJcXJz1Fx9caueg8be//c1ERESYevXqGY/HY1auXGnd/sIPT7OwsLCwsEgyx44dq3Z7gurSq9fr1dGjR1VcXKwlS5botdde06ZNmy75a4ouPqMsLi5WixYtdOzYMUVFRdXU2KhFnlqQ5/QIddqsB/s7PQKCVElJiRISElRUVOT/dXtVFVSXXl0ul9q0aSPpn+8huX37dr300kt69dVXK93e7XZX+gtUL7xyFqguV3iE0yPUafy9xdW6kqfdgubHQyrj8/msv+kBAICrFTRnlBkZGRo6dKhatGihr776SgsXLlReXp5Wr17t9GgAgFosaEJZUFCghx56SCdPnpTH41Hnzp21evVqff/733d6NABALRY0ofzDH/7g9AgAgDooqJ+jBADgeiOUAABYEEoAACwIJQAAFoQSAAALQgkAgAWhBADAglACAGBBKAEAsCCUAABYEEoAACwIJQAAFoQSAAALQgkAgAWhBADAglACAGBBKAEAsCCUAABYEEoAACwIJQAAFoQSAAALQgkAgAWhBADAglACAGBBKAEAsCCUAABYEEoAACwIJQAAFoQS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", "text/plain": [ "