{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Dispersion fitting tool\n", "\n", "Run this notebook in your browser using [Binder](https://mybinder.org/v2/gh/flexcompute-readthedocs/tidy3d-docs/readthedocs?labpath=docs%2Fsource%2Fnotebooks%2FFitting.ipynb).\n", "\n", "Here we show how to fit optical measurement data and use the results to create dispersion material models for Tidy3d.\n", "\n", "Tidy3D's dispersion fitting tool peforms an optimization to find a medium defined as a dispersive [PoleResidue](../_autosummary/tidy3d.PoleResidue.rst) model that minimizes the RMS error between the model results and the data. This can then be directly used as a material in simulations." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:20.144858Z", "iopub.status.busy": "2022-07-21T20:42:20.143981Z", "iopub.status.idle": "2022-07-21T20:42:21.131660Z", "shell.execute_reply": "2022-07-21T20:42:21.131235Z" }, "tags": [] }, "outputs": [], "source": [ "# first import packages\n", "import matplotlib.pylab as plt\n", "import numpy as np\n", "\n", "import tidy3d as td" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load Data\n", "\n", "The fitting tool accepts three ways of loading data:\n", "\n", "1. Numpy arrays directly by specifying `wvl_um`, `n_data`, and optionally `k_data`;\n", "\n", "2. Data file with the `from_file` utility function.\n", "\n", " Our data file has columns for wavelength (um), real part of refractive index (n), and imaginary part of refractive index (k). k data is optional. \n", " \n", " Note: `from_file` uses [np.loadtxt](https://numpy.org/doc/stable/reference/generated/numpy.loadtxt.html) under the hood, so additional keyword arguments for parsing the file follow the same format as [np.loadtxt](https://numpy.org/doc/stable/reference/generated/numpy.loadtxt.html).\n", " \n", "3. URL linked to a csv/txt file that contains wavelength (micron), n, and optionally k data with the `from_url` utility function. URL can come from [refractiveindex](https://refractiveindex.info).\n", "\n", "Below the 2nd way is taken as an example:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:21.133923Z", "iopub.status.busy": "2022-07-21T20:42:21.133798Z", "iopub.status.idle": "2022-07-21T20:42:21.295829Z", "shell.execute_reply": "2022-07-21T20:42:21.295451Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
<Figure size 432x288 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from tidy3d.plugins import DispersionFitter\n", "\n", "fname = 'data/nk_data.csv'\n", "\n", "# note that additional keyword arguments to load_nk_file get passed to np.loadtxt\n", "fitter = DispersionFitter.from_file(fname, skiprows=1, delimiter=',')\n", "\n", "# lets plot the data\n", "plt.scatter(fitter.wvl_um, fitter.n_data, label='n', color='crimson', edgecolors='black', linewidth=0.5)\n", "plt.scatter(fitter.wvl_um, fitter.k_data, label='k', color='blueviolet', edgecolors='black', linewidth=0.5)\n", "plt.xlabel('wavelength ($\\mu m$)')\n", "plt.ylabel('value')\n", "plt.title('refractive index data')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fitting the data\n", "\n", "The fitting tool fit a dispersion model to the data by minimizing the root mean squared (RMS) error between the model n,k prediciton and the data at the given wavelengths.\n", "\n", "There are various fitting parameters that can be set, but the most important is the number of \"poles\" in the model.\n", "\n", "For each pole, there are 4 degrees of freedom in the model. Adding more poles can produce a closer fit, but each additional pole added will make the fit harder to obtain and will slow down the FDTD. Therefore, it is best to try the fit with few numbers of poles and increase until the results look good.\n", "\n", "Here, we will first try fitting the data with 1 pole and specify the RMS value that we are happy with (`tolerance_rms`).\n", "\n", "Note that the fitting tool performs global optimizations with random starting coefficients, and will repeat the optimization `num_tries` times, returning either the best result or the first result to satisfy the tolerance specified." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:21.297696Z", "iopub.status.busy": "2022-07-21T20:42:21.297526Z", "iopub.status.idle": "2022-07-21T20:42:36.797751Z", "shell.execute_reply": "2022-07-21T20:42:36.797474Z" }, "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1efaedb5de0d494fb68b35d9a1bdeae2", "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": [ "
[16:42:36] WARNING          warning: did not find fit with RMS error under         fit.py:364\n",
       "                    tolerance_rms of 2.00e-02                                                \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:42:36]\u001b[0m\u001b[2;36m \u001b[0m\u001b[31mWARNING \u001b[0m warning: did not find fit with RMS error under \u001b]8;id=807163;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py\u001b\\\u001b[2mfit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=288468;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py#364\u001b\\\u001b[2m364\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m tolerance_rms of \u001b[1;36m2.00e-02\u001b[0m \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO             returning best fit with RMS error 9.95e-02             fit.py:368\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m returning best fit with RMS error \u001b[1;36m9.95e-02\u001b[0m \u001b]8;id=639203;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py\u001b\\\u001b[2mfit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=237134;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py#368\u001b\\\u001b[2m368\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "medium, rms_error = fitter.fit(\n", " num_poles=1,\n", " tolerance_rms=2e-2,\n", " num_tries=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The RMS error stalled at a value that was far above our tolerance, so we might want to try more fits.\n", "\n", "Let's first visualize how well the best single pole fit captured our model using the `.plot()` method" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:36.922497Z", "iopub.status.busy": "2022-07-21T20:42:36.922308Z", "iopub.status.idle": "2022-07-21T20:42:37.030210Z", "shell.execute_reply": "2022-07-21T20:42:37.029703Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
<Figure size 432x288 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAz60lEQVR4nO3de3xU9Z3/8ddnJjdIIEEMF7kGtIKIhBBBW0XttsUolVq1SrcXtUpFtt3Wuvtzd3+r9vao7brq1l61iuLPC9Y7rFna3dIquqXcRcAqkihBbkZBEiCXmc/vjzkJQ0hCLjNkhryfPsY553u+53s+c4B88j3nO+dr7o6IiEiqCfV0ACIiIq1RghIRkZSkBCUiIilJCUpERFKSEpSIiKSkjJ4OoLNOPPFEHz16dE+HISIiCbJq1ar33b2wZXnaJajRo0ezcuXKng5DREQSxMzeaa1cl/hERCQlKUGJiEhKSlqCMrMcM/uLma0zsw1m9t1W6lxtZrvNbG3wui5Z8YiISHpJ5j2oOuCT7l5jZpnAMjMrd/c/t6i30N3/LolxiIhIGkpagvLYQ/5qgtXM4KUH/4mISIck9R6UmYXNbC2wC/i9uy9vpdplZvaamT1lZiOSGY+IiKSPpA4zd/cIUGxmBcCzZna6u78eV2UR8Li715nZ14GHgU+2bMfM5gBzAEaOHJnMkI+JSCTC4sWL+e1vf0s0GmX06NFs2bKF7du30/Lp8mbG0KFDGTNmTKt1jrY9EW0ci2Mozt4Zp85Fesd58sknk5mZyZQpUygrKyMcDpNIdqym2zCzW4H97n5nG9vDwAfunt9eO6WlpZ4K34OKRCKUl5ezatUqGhoa2Lx5c4f+oKPRKOvXr2fv3r3djiEDIwMj04xMjAwLkYERBkIYIYstG0YYIwQYEDaLbQ/qhc0wYt3pMBbUh1BQfmjf4N0s9vniXrGttCi3uO1x73ZkubXYnxb7W9xxWx7bODyew6PhsH1a01p5q2XW8Ta7d+yOHaejZW1t6U6brZ2LzsfUsl5Ha3ZOclpNv3aT2fZvrJpTp5WyZMmSLiUpM1vl7qUty5PWgzKzQqDB3feYWR/g08CPW9QZ6u7bg9VLgE3Jiqe7mno9CxcupKqqivXr17Nv3z4ikUib++RZmP6WwWuWQX4og3yLvcaF8sjtm08fQvSxMDkWoo+FyLFwUBZbzgkSTgZGVtOyHVoXEUkFv/lgG8uXL6e8vJyZM2cmrN1kXuIbCjwc9IxCwJPuvtjMvgesdPcXgG+a2SVAI/ABcHUS4+mSSCTC888/z9y5c9m1a9dh2/pbmLEZ/SgK92FMuA9DQ9kMDmUxJBx772OJ7e6KiKSq2tpa1q5dmx4Jyt1fAya3Un5r3PI/Af+UrBi6quny3YoVK3j44Yd5553YUzgmhHOZktmfyZn9mZzRj+HhnB6Ns8GjNOI0uAfvsfUIThSIuONAFCcCOE7EY9s8KIsSq9NUHsWDF0SDskhQx2nal+ZLmU0XNL355S3WiSuNK3eP205zrcP3a71NWuwfH4lzZCzx2rqg3dEL3a3Va+0yeav1OtNmByPq3HG6HmdnbgR053wk64ZDR89n59tNP8mIeY83kpubS3FxcULbTbtn8SVbfX09U6dOZePGjTQ0NHB6Rh63547hU1kDGRLO7lRbBz3Cnmgjez14BcsfeSP7oo3sJ8pBj3DAoxz0KAc8wgEOLdd5lAa8OQk1EKWxKRml5T8NETke5ebmcta0aZSVlSW0XSWoOPX19YwbN46KigouzBrI9fnDmZTZr836dR5lS+QAFZH9bIkcoCpSx45oHTuj9eyI1rHP274/1WTQoEFce+21VFZWUrt9O1nuZAH9g+1NAy2KioqoqKhocyBGW9sT0caxOIbi7J1x6lykd5xjx44lKyuLkpKSpIziU4IKNCWnPu/u4rH8iUzNPHIw4YfRBpY17GF1w0esadzHG421NOKMGjWKs846m907dhByZyixG3Bt/UGbGcOGDeMLX/gCM2fOTPgfqojI8UAJiiA5nTqOT+2s5zsFxWTEDaGt8yj/WbebZ+p2saJhLxEgPz+fSVNL+MLw4UoyIiJJ0usTVCQS4awzp3LD+xlcljusubzBoyw4uJ1f7d/Kh95IOBymcMgQfvGLX3DJJZcoIYmIJFmvT1CLX1jElyoPMitncHPZ6oaP+D81b1EROcDgwYO5fe7cpH1TWkREWterE1QkEmHN393Ol7MOzTT824M7+Neat2nEKSoq4o033iArK6sHoxQR6Z16dYL6092/5m/r8pqf//HEwR3835rNAEpOIiI9rNc+Lyd6sI6Bv3iWUDAg4tX6PdwWJKfBgwcrOYmI9LBem6A+/OVC8vYdjC1HG/iHmjeJANnZ2fz6179WchIR6WG9MkFF9u6j+q6Hm9fv2f8OO6P1AIwbNy6hz5ISEZGu6ZUJ6qNHFhE+GEtImxv388TBHc3bPv/5z2uknohICuh1CcobGtl7/1PN6785sI2mBxLl5eVRUlLSM4GJiMhhel2CqvnDciLv7Qbg/Wg9L9TFptDIzc1lWhIedigiIl3T6xLUm7/4f83Lzx3cRT1OVlYWN910U5dngxQRkcTrVQkqerCO3BWHJu1dVBfrSTU0NJCVlaXkJCKSQnpVgjrwh+VkNsTuOFVGDrAhUguQlIm2RESke3rVkyQOrtzYvPw734uZ6d6TiEiK6lUJauCtN5A7u4zVP/klB9+v4G/zzuLyyy/XdBkiIimoVyWoSCTCzLlfY/ny5dTW1pKbm8v27dv1xVwRkRTUq+5BlZeXs3z5cmpqanB3ampqWL58OeXl5T0dmoiItNCrEtSaNWuora09rKy2tpa1a9f2TEAiItKmpCUoM8sxs7+Y2Toz22Bm322lTraZLTSzzWa23MxGJysegMmTJ5Obm3tYmUbwiYikpmT2oOqAT7r7JKAYuNDMzmpR52vAh+5+MnA38OMkxkNZWRnTpk0jLy8PMyMvL08j+EREUlTSBkm4uwM1wWpm8PIW1WYBtwfLTwE/MzML9k2Kb3zjGwwZMgQz0wg+EZEUltRRfGYWBlYBJwM/d/flLaoMA7YCuHujme0FBgLvt2hnDjAHYOTIkV2KJRKJMGPGDI3gExFJE0kdJOHuEXcvBoYDU83s9C62c5+7l7p7aWFhYZdi0Qg+EZH0ckxG8bn7HmApcGGLTduAEQBmlgHkA9XJiEEj+ERE0ksyR/EVmllBsNwH+DTwRotqLwBfDZYvB/6QrPtPGsEnIpJektmDGgosNbPXgBXA7919sZl9z8wuCeo8AAw0s83ATcAtyQpGI/hERNKLJXHAXFKUlpb6ypUru7RvJBKhvLyctWvXUlxcTFlZmUbwiYj0MDNb5e6lR5T3pgQlIiKpp60E1asedSQiIulDCUpERFKSEpSIiKQkJSgREUlJSlAiIpKSlKBERCQlKUGJiEhKUoISEZGUpAQlIiIpSQlKRERSkhKUiIikJCUoERFJSUpQIiKSkpSgREQkJSlBiYhISlKCEhGRlKQEJSIiKUkJSkREUpISlIiIpCQlKBERSUlKUCIikpKSlqDMbISZLTWzjWa2wcz+vpU655vZXjNbG7xuTVY8IiKSXjKS2HYj8B13X21m/YBVZvZ7d9/Yot7L7j4ziXGIiEgaSloPyt23u/vqYHkfsAkYlqzjiYjI8eWY3IMys9HAZGB5K5vPNrN1ZlZuZhPa2H+Oma00s5W7d+9OZqgiIpIikp6gzCwPeBr4lrt/1GLzamCUu08C7gWea60Nd7/P3UvdvbSwsDCp8YqISGpIaoIys0xiyelRd3+m5XZ3/8jda4LlF4FMMzsxmTGJiEh6SOYoPgMeADa5+11t1BkS1MPMpgbxVCcrJhERSR/JHMX3CeDLwHozWxuU/TMwEsDdfwVcDsw1s0bgAHCVu3sSYxIRkTSRtATl7ssAO0qdnwE/S1YMIiKSvvQkCRERSUlKUCIikpKUoEREJCUpQYmISEpSghIRkZSkBCUiIilJCUpERFKSEpSIiKQkJSgREUlJSlAiIpKSkvksPhGRtNbQ0EBVVRUHDx7s6VCOCzk5OQwfPpzMzMwO1VeCEhFpQ1VVFf369WP06NEEEy9IF7k71dXVVFVVUVRU1KF9dIlPRKQNBw8eZODAgUpOCWBmDBw4sFO9USUoEZF2KDklTmfPpRKUiIikJCUoEZHjwD333MOCBQuOKK+srOT0009vd9/Kykoee+yxox5j9+7dXHjhhV2OsbOUoEREEiQSibB48WK+//3vs3jxYiKRyDE5bmNjIw8++CBf/OIXu7R/RxNUYWEhQ4cO5ZVXXunScTpLCUpEJAEikQgzZsxg9uzZ3HbbbcyePZsZM2Z0K0lVVlYyfvx4rr/+eiZMmMBnPvMZDhw4cES9P/zhD5SUlJCRERuYvWrVKiZNmsSkSZP4+c9/flh75557LiUlJZSUlPDqq68CcMstt/Dyyy9TXFzM3Xff3WY9gM997nM8+uijXf5MneLuafWaMmWKi4gcCxs3buxw3UWLFnleXp4Dza+8vDxftGhRl49fUVHh4XDY16xZ4+7uV1xxhT/yyCNH1Lv11lv9pz/9afP6xIkT/U9/+pO7u998880+YcIEd3evra31AwcOuLv7m2++6U0/T5cuXeoXX3xx8/5t1XN3r6qq8tNPP73Ln6m1cwqs9FZ+3qsHJSKSAGvWrKG2tvawstraWtauXdutdouKiiguLgZgypQpVFZWHlFn+/btFBYWArBnzx727NnD9OnTAfjyl7/cXK+hoYHrr7+eiRMncsUVV7Bx48ZWj9levUGDBvHee+916zN1lL6oKyKSAJMnTyY3N5eamprmstzc3Obk0lXZ2dnNy+FwuNVLfH369OnQ94vuvvtuBg8ezLp164hGo+Tk5HS63sGDB+nTp08XPknnqQclIpIAZWVlTJs2jby8PMyMvLw8pk2bRllZWdKPPX78eDZv3gxAQUEBBQUFLFu2DOCw+0V79+5l6NChhEIhHnnkkeb7Y/369WPfvn1HrQfw5ptvHnVUYKIkLUGZ2QgzW2pmG81sg5n9fSt1zMx+amabzew1MytJVjwiIskUDodZsmQJjz/+ON/73vd4/PHHWbJkCeFwOOnHLisr46WXXmpenz9/PvPmzaO4uJjYLZ6YG2+8kYcffphJkybxxhtvkJubC8AZZ5xBOBxm0qRJ3H333W3WA1i6dCkXX3xx0j8TgMUHn9CGzYYCQ919tZn1A1YBn3P3jXF1LgK+AVwETAP+w92ntdduaWmpr1y5Mikxi4jE27RpE+PHj+/pMDrk0ksv5Sc/+QmnnHJKUo8zffp0nn/+eQYMGNCl/Vs7p2a2yt1LW9ZNWg/K3be7++pgeR+wCRjWotosYEEwkOPPQEGQ2EREpBPuuOMOtm/fntRj7N69m5tuuqnLyamzjskgCTMbDUwGlrfYNAzYGrdeFZQddpbNbA4wB2DkyJFJi1NEJF2deuqpnHrqqUk9RmFhIZ/73OeSeox4SR8kYWZ5wNPAt9z9o6604e73uXupu5c2DaUUEZHjW1ITlJllEktOj7r7M61U2QaMiFsfHpSJiEgvl8xRfAY8AGxy97vaqPYC8JVgNN9ZwF53T+5FVBERSQvJvAf1CeDLwHozWxuU/TMwEsDdfwW8SGwE32ZgP3BNEuMREZE0krQE5e7LgHZnpwqewTQvWTGIiPQW99xzDyeccAJf+cpXEtru7bffTl5eHjfffHOH6tx8881cdNFFfPKTn+z2sY96ic/MBpvZA2ZWHqyfZmZf6/aRRUQkIbo73UYifeMb3+COO+5ISFsd6UE9BMwH/iVYfxNYSOz+kohIr/B24blJa3vs7pdbLa+srKSsrIxzzjmHV199lWHDhvH8888f8Sy8ltNtnH/++UyePJmXX36Z2tpaFixYwI9+9CPWr1/PlVdeyQ9+8AMA7rrrLh588EEArrvuOr71rW8B8MMf/pCHH36YQYMGMWLECKZMmQLA22+/zbx589i9ezd9+/bl/vvvZ9y4cYfFMmrUKKqrq9mxYwdDhgzp1nnpyCCJE939SSAK4O6NwLGZhUtEpJd76623mDdvHhs2bKCgoICnn376iDqvvPJKcxJpkpWVxcqVK7nhhhuYNWsWP//5z3n99dd56KGHqK6uZtWqVcyfP5/ly5fz5z//mfvvv581a9awatUqnnjiCdauXcuLL77IihUrmtucM2cO9957L6tWreLOO+/kxhtvbDXmkpKShExq2JEeVK2ZDSQ2vwlNo+26fWQRETmqjk630fLxQZdccgkAEydOZMKECQwdGntIz5gxY9i6dSvLli3j0ksvbX7O3uc//3lefvllotEol156KX379j2snZqaGl599VWuuOKK5mPU1dW1GnOipuToSIK6idhw8LFm9gpQCFze7SOLiKSRti7DJVtXp9to2i8UCh3WRigUorGxsdNxRKNRCgoKOjS/VaKm5DjqJb7geXrnAR8Hvg5McPfXun1kERFJiPjpNjrq3HPP5bnnnmP//v3U1tby7LPPcu655zJ9+nSee+45Dhw4wL59+1i0aBEA/fv3p6ioiN/+9rdAbDb2devWtdp2oqbkOGoPysxajlksMTPcfUG3jy4iIt1WVlZ22My5HVFSUsLVV1/N1KlTgdggicmTJwNw5ZVXMmnSJAYNGsSZZ57ZvM+jjz7K3Llz+cEPfkBDQwNXXXUVkyZNOqzdhoYGNm/eTGnpEQ8n77SjTrdhZvfGreYAfwOsdvceucyn6TZE5FjRdBud9+yzz7J69Wq+//3vt7q9M9NtHLUH5e7faNFQAfBEZwIWEZHkappuo6cTVGNjI9/5zncS0lZXniRRCxQl5OgiIpIQx2K6jY6IH+XXXR25B7WIYIg5sUEVpwFPJiwCERGRVnSkB3Vn3HIj8I67VyUpHhEREaBj96D+dCwCERERiddmgjKzfRy6tHfYJmIPIu+ftKhERKTXa/OLuu7ez937t/Lqp+QkIpJ8lZWVHfrC6/bt25k5c2ar284//3yO9tWce+65h/379x/1OFdddRVvvfXWUeslSodn1DWzQWY2sumVzKBERNJRJBJh8eLFfP/732fx4sVEIsfmudp33XUX119/fZf372iCmjt3Lj/5yU+6fJzO6sh8UJeY2VtABfAnoBIoT3JcIiJpJRKJMGPGDGbPns1tt93G7NmzmTFjRsKS1JYtW5g8efJhTxdv8vTTT3PhhRcCcODAAa666irGjx/PpZdeetiz++bOnUtpaSkTJkzgtttuA+CnP/0p7733HhdccAEXXHBBm/Ug9nik//7v/+7Ss/y6xN3bfQHrgIHAmmD9AuCBo+2XrNeUKVNcRORY2LhxY4frLlq0yPPy8pzYvXsHPC8vzxctWtTl41dUVPiECRP8jTfe8OLiYl+7du0RdbZs2eIlJSXN6//+7//u11xzjbu7r1u3zsPhsK9YscLd3aurq93dvbGx0c877zxft26du7uPGjXKd+/e3dxGW/Xc3T/1qU/5ypUru/yZWjunwEpv5ed9Ry7xNbh7NRAys5C7LwW6/5AlEZHjyJo1a6itrT2srLa2tkNP/27P7t27mTVrFo8++ugRz72D2P2nwsLC5vWXXnqJL33pSwCcccYZnHHGGc3bnnzySUpKSpg8eTIbNmxg48aNrR6zvXqJmkqjIzryPag9ZpYHvAw8ama7iD1NQkREApMnTyY3N5eamprmstzc3Oa5nLoqPz+fkSNHsmzZMk477bQjtrc21UZrKioquPPOO1mxYgUDBgzg6quvbnW/o9VL1FQaHdGRHtRSIB/4e+C/gLeBzyYzKBGRdFNWVsa0adPIy8vDzMjLy2PatGmUlZV1q92srCyeffZZFixYwGOPPXbE9o997GOHTWI4ffr05nqvv/46r70Wmx3po48+Ijc3l/z8fHbu3El5+aGhBP369WPfvn1HrQeJm0qjIzrSg8oAfgd8ACwEFgaX/NplZg8CM4Fd7n7EpzGz84HniQ2+AHjG3b/XsbBFRFJLOBxmyZIllJeXs3btWoqLiykrKyMcDne77dzcXBYvXsynP/1p8vLymme5bdo2duxYNm/ezMknn8zcuXO55pprGD9+POPHj2+eCn7SpElMnjyZcePGMWLECD7xiU80tzFnzhwuvPBCTjrpJJYuXdpmvZ07d9KnTx+GDBnS7c/UEUedbqO5otkZwJXAZUCVu3/qKPWnAzXAgnYS1M3u3vrg/TZoug0ROVbSZbqNZ599llWrVvGDH/wgqce5++676d+/P1/72te63EZCp9uIswvYAVQDg45W2d1fMrPRnWhfRES64NJLL6W6+qgXtrqtoKCg0xMjdkdHvgd1o5n9EfgfYsPNr3f3M9rfq8PONrN1ZlZuZhPaiWGOma00s5W7d+9O0KFFRI4f1113XdKPcc0115CR0ZVZmrqmI0caAXzL3dcm+NirgVHuXmNmFwHPAa3OtOXu9wH3QewSX4LjEBGRFHTUHpS7/1MSkhPu/pG71wTLLwKZZnZioo8jIiLpqcPP4ks0MxtiZhYsTw1iSf5FVBERSQtJu5hoZo8D5wMnmlkVcBuQCeDuvwIuB+aaWSNwALjKOzqkUEREjntJ60G5+2x3H+rume4+3N0fcPdfBckJd/+Zu09w90nufpa7v5qsWERE0lEipttI9vHj66xfv56rr746YcfvsUt8IiKSGN2dbiNRJk6cSFVVFe+++25C2jt24wVFRNLYv52+NWlt/8PrI45aZ8uWLVx22WXcd999nHnmmYdte/rpp5u/pPvQQw/x3HPPUVtby1tvvcXNN99MfX09jzzyCNnZ2bz44ouccMIJrF27lhtuuIH9+/czduxYHnzwQQYMGMCqVau49tprAfjMZz7TfIxIJMItt9zCH//4R+rq6pg3bx5f//rXj4jzs5/9LE888QT/+I//2J1TAqgHJSKS8v76179y2WWX8dBDDx2RnCoqKhgwYADZ2dnNZa+//jrPPPMMK1as4F/+5V/o27cva9as4eyzz2bBggUAfOUrX+HHP/4xr732GhMnTuS73/0uEPuu07333su6desOO84DDzxAfn4+K1asYMWKFdx///1UVFTQUmlpKS+//HJCPrcSlIhICuvsdBsAF1xwAf369aOwsJD8/Hw++9nY870nTpxIZWUle/fuZc+ePZx33nkAfPWrX+Wll15iz5497Nmzh+nTpwMc9tSI3/3udyxYsIDi4mKmTZtGdXV1q9O/J3I6Dl3iExHpgI5chkuGrky3Ed+bCoVCzeuhUKjLs+G6O/feey8zZsw4rDz+SeqQ2Ok41IMSEUlhnZ1uoyPy8/MZMGBA86W4Rx55hPPOO4+CggIKCgpYtmwZAI8++mjzPjNmzOCXv/wlDQ0NQGzajZYTNDaVJ2o6DvWgRERSXGem2+iohx9+uHmQxJgxY5g/fz4A8+fP59prr8XMDhskcd1111FZWUlJSQnuTmFhIc8999wR7S5dupSLL7646x82Toen20gVmm5DRI4VTbfROXV1dZx33nksW7aszYfKJmu6DRERSUHHarqNo3n33Xe54447EvbEcyUoEZHjwLGY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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, there is room for improvement at short wavelengths. Let's now try a two pole fit." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:37.032276Z", "iopub.status.busy": "2022-07-21T20:42:37.032097Z", "iopub.status.idle": "2022-07-21T20:42:39.134509Z", "shell.execute_reply": "2022-07-21T20:42:39.134201Z" }, "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "01eb1e4c9051467f8794e7cdbedf0f1f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[16:42:39] INFO             found optimal fit with RMS error = 1.49e-02, returning fit.py:360\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:42:39]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m found optimal fit with RMS error = \u001b[1;36m1.49e-02\u001b[0m, returning \u001b]8;id=435291;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py\u001b\\\u001b[2mfit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=134261;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py#360\u001b\\\u001b[2m360\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "medium, rms_error = fitter.fit(\n", " num_poles=2,\n", " tolerance_rms=2e-2,\n", " num_tries=50)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.154262Z", "iopub.status.busy": "2022-07-21T20:42:39.154114Z", "iopub.status.idle": "2022-07-21T20:42:39.313788Z", "shell.execute_reply": "2022-07-21T20:42:39.313350Z" }, "scrolled": true, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
<Figure size 432x288 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This fit looks great and should be sufficient for our simulation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, if the simulation is narrowband, you might want to truncate your data to not include wavelengths far outside your measurement wavelength to simplify the dispersive model. This is through modifying the attribute `wvl_range` where you can set the lower wavelength bound `wvl_range[0]` and the higher wavelength bound `wvl_range[1]`. This operation is non-destructive, so you can always unset them by setting the value to `None`. \n", "\n", "E.g. if we are only interested in the wavelength 3-20 um, we can still use the single-pole model:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.316318Z", "iopub.status.busy": "2022-07-21T20:42:39.316143Z", "iopub.status.idle": "2022-07-21T20:42:39.550658Z", "shell.execute_reply": "2022-07-21T20:42:39.550376Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "bad6e72fa363414995dfe4e0f13130ff", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
           INFO             found optimal fit with RMS error = 1.18e-02, returning fit.py:360\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m found optimal fit with RMS error = \u001b[1;36m1.18e-02\u001b[0m, returning \u001b]8;id=803460;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py\u001b\\\u001b[2mfit.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=384197;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit.py#360\u001b\\\u001b[2m360\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n",
       "
\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter = fitter.copy(update={'wvl_range' : (3, 20)})\n", "medium, rms_error = fitter.fit(\n", " num_poles=1,\n", " tolerance_rms=2e-2,\n", " num_tries=100)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.555054Z", "iopub.status.busy": "2022-07-21T20:42:39.554925Z", "iopub.status.idle": "2022-07-21T20:42:39.656367Z", "shell.execute_reply": "2022-07-21T20:42:39.656028Z" } }, "outputs": [ { "data": { "text/html": [ "
<Figure size 432x288 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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8YmItKKmpoazzjpL4RQHZsZZZ53VqatRBZSISBsUTvHT2XOpgBIRkaSkgBIROQ088MADLFu2rMXyvXv3cv7557e57d69e/nNb37T7jEqKyuZPXt2l2vsLAWUiEichMNh1qxZww9+8APWrFlDOBw+Jcetr6/nscce4wtf+EKXtu9oQOXn5zNkyBBeffXVLh2nsxRQIiJxEA6HmTVrFjfddBP33HMPN910E7NmzepWSO3du5eJEydy2223MWnSJK688kqOHz/eot3vf/97CgsLSU+PdMwuLS1l6tSpTJ06lYceeuik/V1yySUUFhZSWFjIa6+9BsBdd93FK6+8wrRp07j//vtbbQdwzTXXsHz58i7/Tp3i7in1mT59uouInAo7duzocNvVq1d7Tk6OA02fnJwcX716dZePX15e7qFQyLds2eLu7tdff70/8cQTLdrdfffd/vOf/7xpfvLkyf7HP/7R3d0XLVrkkyZNcnf36upqP378uLu7v/nmm97493TdunV+1VVXNW3fWjt394qKCj///PO7/DvFOqfAJo/x915XUCIicbBlyxaqq6tPWlZdXU1ZWVm39jtmzBimTZsGwPTp09m7d2+LNvv37yc/Px+Aw4cPc/jwYS699FIAvvSlLzW1q6ur47bbbmPy5Mlcf/317NixI+Yx22o3cOBA9u3b163fqaP0RV0RkTgoKCggOzubqqqqpmXZ2dlN4dJVffr0aZoOhUIxb/H17du3Q98vuv/++xk0aBBbt26loaGBrKysTrerqamhb9++XfhNOk9XUCIicVBcXMzMmTPJycnBzMjJyWHmzJkUFxcn/NgTJ05k9+7dAOTl5ZGXl8f69esBTnpedOTIEYYMGUJaWhpPPPFE0/Ox/v37c/To0XbbAbz55pvt9gqMl4QFlJmNMLN1ZrbDzLab2TdjtDEz+7mZ7TazbWZWmKh6REQSKRQKsXbtWp588km+//3v8+STT7J27VpCoVDCj11cXMzLL7/cNL9kyRIWLlzItGnTiDziibjjjjtYunQpU6dOZdeuXWRnZwMwZcoUQqEQU6dO5f7772+1HcC6deu46qqrEv47AVh08XHdsdkQYIi7bzaz/kApcI2774hq8xngG8BngJnA/3b3mW3tt6ioyDdt2pSQmkVEou3cuZOJEyf2dBkdMm/ePH7yk58wYcKEhB7n0ksvZdWq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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using Fit Results\n", "\n", "With the fit performed, we want to use the `Medium` in our simulation.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Method 1: direct export as Medium\n", "\n", "The fit returns a medium, which can be used directly in simulation" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.658851Z", "iopub.status.busy": "2022-07-21T20:42:39.658681Z", "iopub.status.idle": "2022-07-21T20:42:39.660843Z", "shell.execute_reply": "2022-07-21T20:42:39.660585Z" }, "tags": [] }, "outputs": [], "source": [ "b = td.Structure(\n", " geometry=td.Box(size=(1,1,1)),\n", " medium=medium)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Method 2: print medium definition string\n", "\n", "In many cases, one may want to perform the fit once and then hardcode the result in their tidy3d script.\n", "\n", "For a quick and easy way to do this, just `print()` the medium and the output can be copied and pasted into your main svript" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.663030Z", "iopub.status.busy": "2022-07-21T20:42:39.662895Z", "iopub.status.idle": "2022-07-21T20:42:39.664994Z", "shell.execute_reply": "2022-07-21T20:42:39.664738Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "td.PoleResidue(\n", "\tpoles=(((-5087492343270255-2769398780468049.5j), (5400878649077309+5.6004210872673416e+16j)),), \n", "\tfrequency_range=(15048764573822.465, 97485556810323.33))\n" ] } ], "source": [ "print(medium)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.667212Z", "iopub.status.busy": "2022-07-21T20:42:39.666998Z", "iopub.status.idle": "2022-07-21T20:42:39.668621Z", "shell.execute_reply": "2022-07-21T20:42:39.668374Z" } }, "outputs": [], "source": [ "# medium = td.PoleResidue(\n", "# \tpoles=[((-1720022108564405.2, 1111614865738177.4), (1.0199002935090378e+16, -3696384150818460.5)), ((0.0, -3100558969639478.5), (3298054971521434.5, 859192377978951.2))], \n", "# \tfrequency_range=(7994465562158.582, 299792458580946.8))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Method 3: save and load file containing poles\n", "\n", "Finally, one can save export the `Medium` directly as .json file. Here is an example." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.670681Z", "iopub.status.busy": "2022-07-21T20:42:39.670479Z", "iopub.status.idle": "2022-07-21T20:42:39.673376Z", "shell.execute_reply": "2022-07-21T20:42:39.673080Z" }, "tags": [] }, "outputs": [], "source": [ "# save poles to pole_data.txt\n", "fname = 'data/my_medium.json'\n", "medium.to_file(fname)\n", "\n", "# load the file in your script\n", "medium = td.PoleResidue.from_file(fname)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tricks and Tips / Troubleshooting\n", "\n", "Performing dispersion model fits is more of an art than a science and some trial and error may be required to get good fits. A good general strategy is to:\n", "\n", "- Start with few poles and increase unitl RMS error gets to the desired level.\n", "\n", "- Large `num_tries` values can sometimes find good fits if the RMS seems stalled. it can be a good idea to set a large number of tries and let it run for a while on an especially difficult data model.\n", "\n", "- Tailor the parameters to your data. Long wavelengths and large n,k values can affect the RMS error that is considered a 'good' fit. So it is a good idea to tweak the tolerance to match your data. Once size does not fit all.\n", "\n", "Finally, there are some things to be aware of when troubleshooting the dispersion models in your actaual simulation:\n", "\n", "- If you are unable to find a good fit to your data, it might be worth considering whether you care about certain features in the data. For example as shown above, if the simulation is narrowband, you might want to truncate your data to not include wavelengths far outside your measurement wavelength to simplify the dispersive model.\n", "\n", "- It is common to find divergence in FDTD simulations due to dispersive materials. Besides trying \"absorber\" PML types and reducing runtime, a good solution can be to try other fits, or to explore our new `StableFitter` feature which will be explained below.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Stable fitter\n", "\n", "We recently introduced a version of the `DispersionFitter` tool that implements our proprietary stability criterion. We observe consistently stable FDTD simulations when materials are fit using this method and also provide it in the newest versions of Tidy3d.\n", "\n", "Functionally speaking, it works identically to the previously introduced tool, excpet the `.fit()` method is run on Flexcompute servers and therefore this tool reqiures signing in to a Tidy3D account. Here is a demonstration." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.675538Z", "iopub.status.busy": "2022-07-21T20:42:39.675320Z", "iopub.status.idle": "2022-07-21T20:42:39.678334Z", "shell.execute_reply": "2022-07-21T20:42:39.678039Z" } }, "outputs": [], "source": [ "from tidy3d.plugins import StableDispersionFitter, AdvancedFitterParam\n", "\n", "fname = 'data/nk_data.csv'\n", "fitter_stable = StableDispersionFitter.from_file(fname, skiprows=1, delimiter=',')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:39.680412Z", "iopub.status.busy": "2022-07-21T20:42:39.680203Z", "iopub.status.idle": "2022-07-21T20:42:42.739621Z", "shell.execute_reply": "2022-07-21T20:42:42.739184Z" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
           INFO     Using Tidy3D credentials from stored file                      auth.py:74\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m Using Tidy3D credentials from stored file \u001b]8;id=57800;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/auth.py\u001b\\\u001b[2mauth.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=656678;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/web/auth.py#74\u001b\\\u001b[2m74\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
[16:42:42] INFO             found optimal fit with RMS error = 1.74e-02,       fit_web.py:286\n",
       "                    returning                                                                \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[16:42:42]\u001b[0m\u001b[2;36m \u001b[0m\u001b[34mINFO \u001b[0m found optimal fit with RMS error = \u001b[1;36m1.74e-02\u001b[0m, \u001b]8;id=128491;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit_web.py\u001b\\\u001b[2mfit_web.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=911824;file:///home/shashwat/flexcompute/repositories/tidy3d-docs/tidy3d/tidy3d/plugins/dispersion/fit_web.py#286\u001b\\\u001b[2m286\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0m returning \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "medium, rms_error = fitter_stable.fit(\n", " num_poles=2,\n", " tolerance_rms=2e-2,\n", " num_tries=50,\n", " advanced_param=AdvancedFitterParam(nlopt_maxeval=10000))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note here we supply the `advanced_param` for more control of the fitting process. `nlopt_max` stands for the maximal number of iterations for each inner optimization. Details of a list of other advanced parameters will be explained later." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can visualize our fits the same way." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2022-07-21T20:42:42.741571Z", "iopub.status.busy": "2022-07-21T20:42:42.741418Z", "iopub.status.idle": "2022-07-21T20:42:42.844218Z", "shell.execute_reply": "2022-07-21T20:42:42.843733Z" } }, "outputs": [ { "data": { "text/html": [ "
<Figure size 432x288 with 1 Axes>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mFigure\u001b[0m\u001b[39m size 432x288 with \u001b[0m\u001b[1;36m1\u001b[0m\u001b[39m Axes\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fitter_stable.plot(medium)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once the fitting is performed, the procedure of using the medium in our simulation is also idential to the previous fitting tool, which we will not go into details here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tips\n", "\n", "- Our stable fitter is based on a web service, and therefore it can run into `timeout` errors if the fitter runs for too long. In this case, you are encouraged to decrease the value of `num_tries` or to relax the value of `tolerance_rms` to your needs.\n", "\n", "- Our fitting tool performs global optimizations with random starting coefficients, and will repeat the optimization `num_tries` times. Within each inner optimization, the maximal number of iterations is bounded by an **advanced parameter** `nlopt_maxeval` whose default value is `5000`. Since there is a well-known tradeoff between exploration and exploitation in a typical global optimization process, you can play around with `num_tries` and `nlopt_maxeval`. In particular in senarios where `timeout` error occurs and decreasing `num_tries` leads to larger RMS error, you can try to decrease `nlopt_maxeval`.\n", "\n", "A list of other advanced parameters can be found in our documentation. For example:\n", "\n", "- In cases where the permittivity at inifinity frequency is other than 1, it can also be optimized by setting an **advanced parameter** `bound_eps_inf` so that the permittivity at infinite frequency can take values between `[1,bound_eps_inf]`.\n", "\n", "- Sometimes we want to bound the pole frequency in the dispersive model so that the oscillater can be resolved with the time steps in our simulation. This can be set with `bound_f`. " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "01eb1e4c9051467f8794e7cdbedf0f1f": { "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_922f62e1590d4ad594a8ef31f35a1660", "msg_id": "", "outputs": [ { "data": { "text/html": "
best RMS error so far: 2.01e-02 ━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  18% 0:00:09\n
\n", "text/plain": "best RMS error so far: 2.01e-02 \u001b[38;2;249;38;114m━━━━━━━\u001b[0m\u001b[38;5;237m╺\u001b[0m\u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 18%\u001b[0m \u001b[36m0:00:09\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "1efaedb5de0d494fb68b35d9a1bdeae2": { "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_68149edfb3f04d6c83ac7a7b0d59a68e", "msg_id": "", "outputs": [ { "data": { "text/html": "
best RMS error so far: 9.95e-02 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  98% 0:00:01\n
\n", "text/plain": "best RMS error so far: 9.95e-02 \u001b[38;2;249;38;114m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[38;5;237m╺\u001b[0m \u001b[35m 98%\u001b[0m \u001b[36m0:00:01\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "3bd16734d6284b089a98042f3727dd7b": { "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 } }, "68149edfb3f04d6c83ac7a7b0d59a68e": { "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 } }, "922f62e1590d4ad594a8ef31f35a1660": { "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 } }, "bad6e72fa363414995dfe4e0f13130ff": { "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_3bd16734d6284b089a98042f3727dd7b", "msg_id": "", "outputs": [ { "data": { "text/html": "
Fitting with 1 to RMS of 0.02... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--\n
\n", "text/plain": "Fitting with 1 to RMS of 0.02... \u001b[38;5;237m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }