{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Dispersion fitting tool\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": "2023-03-28T01:15:50.508967Z", "iopub.status.busy": "2023-03-28T01:15:50.508378Z", "iopub.status.idle": "2023-03-28T01:15:51.555793Z", "shell.execute_reply": "2023-03-28T01:15:51.555192Z" }, "tags": [] }, "outputs": [], "source": [ "# first import packages\n", "import matplotlib.pylab as plt\n", "import numpy as np\n", "\n", "import tidy3d as td\n" ] }, { "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": "2023-03-28T01:15:51.558263Z", "iopub.status.busy": "2023-03-28T01:15:51.557856Z", "iopub.status.idle": "2023-03-28T01:15:52.012168Z", "shell.execute_reply": "2023-03-28T01:15:52.011591Z" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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ww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpiqzhJiEhAZ07d4ZarYa/vz/i4+ORmpp63/etW7cOzZo1g6urK1q3bo2tW7dWQ7VERERUE8gabpKSkjBu3Dj8+uuv2LlzJ4qKitCvXz/k5OSU+Z79+/dj+PDhGD16NFJSUhAfH4/4+HgcP368GisnIiIieyUJIYTcRZS4du0a/P39kZSUhKioKLPrDBs2DDk5Odi8ebNxWbdu3dCuXTssW7bsvvvQarXw8vJCdnY2NBqN1WonIiIi27Hk+9uuxtxkZ2cDAHx9fctcJzk5GX369DFZFhsbi+TkZLPrFxQUQKvVmjyIiIhIuewm3BgMBowfPx49evRAq1atylwvMzMTAQEBJssCAgKQmZlpdv2EhAR4eXkZH6GhoVatm4iIiOyL3YSbcePG4fjx41izZo1VtztlyhRkZ2cbHxcuXLDq9omIiMi+OMpdAAA899xz2Lx5M/bs2YN69eqVu25gYCCuXLlisuzKlSsIDAw0u76LiwtcXFysVisREZFcDAYDCgsL5S7DZpydnaFSVb3fRdZwI4TA888/jw0bNiAxMRHh4eH3fU9kZCR27dqF8ePHG5ft3LkTkZGRNqyUiIhIXoWFhUhLS4PBYJC7FJtRqVQIDw+Hs7NzlbYja7gZN24cVq9ejU2bNkGtVhvHzXh5ecHNzQ0AMGLECISEhCAhIQEA8OKLLyI6OhoLFizAoEGDsGbNGhw8eBAff/yxbMdBRERkS0IIZGRkwMHBAaGhoVbp3bA3BoMBly9fRkZGBurXrw9Jkiq9LVnDzdKlSwEAMTExJss//fRTjBo1CgCQnp5uchK7d++O1atX44033sBrr72GJk2aYOPGjeUOQiYiIqrJiouLkZubi+DgYLi7u8tdjs34+fnh8uXL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GyIiIlIUhhsiIiJSFIYbIiIiUhSGGyIiIlIUhhsiIiJSFIYbIiIiUhSGGyIiIlIUhhsiIiJSFFnDzZ49ezBkyBAEBwdDkiRs3Ljxvu9JTExEhw4d4OLigsaNG2PVqlU2r5OIiIhqDlnDTU5ODtq2bYslS5ZUaP20tDQMGjQIDzzwAI4cOYLx48djzJgx2LFjh40rJSIioprCUc6dDxgwAAMGDKjw+suWLUN4eDgWLFgAAGjevDn27duHRYsWITY21lZlEhERUQ1So8bcJCcno0+fPibLYmNjkZycXOZ7CgoKoNVqTR5ERESkXDUq3GRmZiIgIMBkWUBAALRaLfLy8sy+JyEhAV5eXsZHaGhodZRKREREMqlR4aYypkyZguzsbOPjwoULcpdERERENiTrmBtLBQYG4sqVKybLrly5Ao1GAzc3N7PvcXFxgYuLS3WUR0RERHagRvXcREZGYteuXSbLdu7cicjISJkqIiIiInsja7i5ffs2jhw5giNHjgC4c6v3kSNHkJ6eDuDOJaURI0YY13/66adx9uxZTJo0CX///Tc+/PBDfPPNN5gwYYIc5RMREZEdkjXcHDx4EO3bt0f79u0BABMnTkT79u3x5ptvAgAyMjKMQQcAwsPDsWXLFuzcuRNt27bFggULsHz5ct4GTkREREaSEELIXUR10mq18PLyQnZ2NjQajdzlEBERUQVY8v1do8bcEBEREd0Pww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsMNERERKQrDDRERESkKww0REREpCsONDQgh5C6BiIio1nKUuwCl0Ol0mP3mPOzauhcOejfoHfLw4ICemDrrVajVarnLIyIiqjXYc2MFly9fRrsmkbj2XWPESR9Co41A9qVibFqxF82COmPCuFeh0+nkLpOIiKhWYM9NFel0OvRs3xcPuL6KBu6d8cWF/yKqzlj09ZsISZIghEDqlt2I/SUeO/ZuZC8OERGRjbHnpopmvzkPhttuiPCMwZ4bHyGqzlhEqGMgSRIAQJIkNPN8EC20IzFn2nyZqyUiIlI+hpsq+mnLHniofCFJEs7lHkRTz2iT10sG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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from tidy3d.plugins.dispersion import DispersionFitter\n", "\n", "fname = \"misc/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(\n", " fitter.wvl_um,\n", " fitter.n_data,\n", " label=\"n\",\n", " color=\"crimson\",\n", " edgecolors=\"black\",\n", " linewidth=0.5,\n", ")\n", "plt.scatter(\n", " fitter.wvl_um,\n", " fitter.k_data,\n", " label=\"k\",\n", " color=\"blueviolet\",\n", " edgecolors=\"black\",\n", " linewidth=0.5,\n", ")\n", "plt.xlabel(\"wavelength ($\\mu m$)\")\n", "plt.ylabel(\"value\")\n", "plt.title(\"refractive index data\")\n", "plt.legend()\n", "plt.show()\n" ] }, { "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": "2023-03-28T01:15:52.014228Z", "iopub.status.busy": "2023-03-28T01:15:52.014057Z", "iopub.status.idle": "2023-03-28T01:15:59.253104Z", "shell.execute_reply": "2023-03-28T01:15:59.252565Z" }, "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6b32153ae88e4f9e89e8b5c6e0817a61", "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": [ "
[19:38:17] WARNING:        warning: did not find fit with RMS error under           log.py:50\n",
       "           tolerance_rms of 2.00e-02                                                         \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[19:38:17]\u001b[0m\u001b[2;36m \u001b[0mWARNING: warning: did not find fit with RMS error under \u001b]8;id=208537;file:///home/weiliang/Documents/tidy3d-core/tidy3d_frontend/tidy3d/log.py\u001b\\\u001b[2mlog.py\u001b[0m\u001b]8;;\u001b\\\u001b[2m:\u001b[0m\u001b]8;id=323645;file:///home/weiliang/Documents/tidy3d-core/tidy3d_frontend/tidy3d/log.py#50\u001b\\\u001b[2m50\u001b[0m\u001b]8;;\u001b\\\n", "\u001b[2;36m \u001b[0mtolerance_rms of \u001b[1;36m2.00e-02\u001b[0m \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "medium, rms_error = fitter.fit(num_poles=1, tolerance_rms=2e-2, num_tries=100)\n" ] }, { "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": "2023-03-28T01:15:59.368981Z", "iopub.status.busy": "2023-03-28T01:15:59.368790Z", "iopub.status.idle": "2023-03-28T01:15:59.578106Z", "shell.execute_reply": "2023-03-28T01:15:59.577549Z" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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v379EB0djREjRmDDhg1YuHAhjh07hg4dOtRon3X1gOKkpCTExMTwFyeIiIjooTToX55wdnbGokWLjJ6yHDNmDHJzc/Hdd98Z2nr16oUuXbpg1apVNRq/LoIdH05MREREptIgf3lCp9Nh8+bNyM3NRUhIiNE+Bw8exIwZM2RtQ4YMwbZt26oct7CwEIWFhYblrKwsk9RbFT6cmIiIiJSi+M0Tp06dgr29PTQaDZ5//nls3boV7dq1M9o3LS0NHh4esjYPDw+kpaVVOX50dDS0Wq3h5ePjY9L6K0pMTMSkSZOg1+uh0+lkfyMjI5GUlGS2fRMREREpHuyCgoIQHx+PQ4cO4YUXXsCzzz6Ls2fPmmz8qKgoZGZmGl5Xrlwx2dj34sOJiYiISEmKn4pVq9WGmwq6du2Kw4cPY9myZfjkk08q9fX09MT169dlbdevX4enp2eV42s0Gmg0GtMWXQU+nJiIiIiUpPiM3b30er3smriKQkJCsHv3blnbrl27qrwmr67x4cRERESkJEWDXVRUFH799VckJyfj1KlTiIqKQlxcHMaPHw8AmDBhAqKiogz9X3nlFezcuRNLlizB+fPnMX/+fBw5cgRTp05V6iPI8OHEREREpCRFg116ejomTJiAoKAgDBw4EIcPH8aPP/6IQYMGAQBSUlKQmppq6N+7d29s2LABq1evRufOnfH1119j27ZtNX6Gnbnx4cRERESkpHr3HDtzq4vn2PHhxERERGQqDfoBxeZWV788QURERGQKtcku9e7mCSIiIiJ6MAx2RERERBaCwY6IiIjIQjDYEREREVkIBjsiIiIiC8FgR0RERGQhGOyIiIiILASDHREREZGFYLAjIiIishAMdkREREQWgsGOiIiIyEIw2BERERFZCAY7IiIiIgvBYEdERERkIRjsiIiIiCwEgx0RERGRhWCwIyIiIrIQDHZEREREFoLBjoiIiMhCMNgRERERWQgGOyIiIiILwWBHREREZCEY7IiIiIgsBIMdERERkYVgsCMiIiKyEAx2RERERBaCwY6IiIjIQjDYEREREVkIBjsiIiIiC8FgR0RERGQhGOyIiIiILASDHREREZGFYLAjIiIishAMdkREREQWgsGOiIiIyEIw2BERERFZCAY7IiIiIgvBYEdERERkIRjsiIiIiCwEgx0RERGRhWCwIyIiIrIQiga76Oho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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()\n" ] }, { "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": "2023-03-28T01:15:59.580163Z", "iopub.status.busy": "2023-03-28T01:15:59.579975Z", "iopub.status.idle": "2023-03-28T01:16:00.834903Z", "shell.execute_reply": "2023-03-28T01:16:00.834360Z" }, "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f3efc62bcb824dcc9448aee4e19d9c6f", "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" } ], "source": [ "medium, rms_error = fitter.fit(num_poles=2, tolerance_rms=2e-2, num_tries=50)\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2023-03-28T01:16:00.858337Z", "iopub.status.busy": "2023-03-28T01:16:00.858176Z", "iopub.status.idle": "2023-03-28T01:16:01.056465Z", "shell.execute_reply": "2023-03-28T01:16:01.055968Z" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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Pzw9PY1af3mJiYn4eNocSZtWFJFclMubExMREZHJyR7s/P39ER8fj4MHD+Kll17Cc889hzNnzhht/MjISGRmZuofly9fNtrY94uJiUFrC2tJ22VdPgoh8ubEREREZHIWchegUqn0V4p269YNhw4dwrJly/D5559X6Ovm5oZr165J2q5duwY3N7dKx1er1VCr1cYtuhIpKSnwVUiDXXLxXQDgzYmJiIjI5GSfsbufTqdDQUGBwWVBQUHYuXOnpG3Hjh2VnpNX17y9vZEDHS5q86AtvSYlSVsS7HhzYiIiIjI1WWfsIiMjMWzYMHh5eSE7OxsbNmxAXFwcfv31VwDAhAkT0Lx5c0RFRQEApk2bhv79+2PJkiUYMWIEYmNjcfjwYaxevVrOj6EXHh6Oth9+iP/kpkIFAd5Ka+SKWgDgzYmJiIjI5GSdsbt+/TomTJgAf39/DBw4EIcOHcKvv/6KQYMGAQBSU1ORlpam79+nTx9s2LABq1evRufOnfH9999jy5Yt6Nixo1wfQcLPzw/R0dFQKBTQKhVIEvORLhTz5sRERERUJ+rdfexMrU7uY5eUhOjoaKSkpMDb2xsREREMdURERFQrNckuDHZERERE9ViDvEExERERET0cBjsiIiIiM8FgR0RERGQmGOyIiIiIzASDHREREZGZYLAjIiIiMhMMdkRERERmgsGOiIiIyEww2BERERGZCQY7IiIiIjPBYEdERERkJhjsiIiIiMwEgx0RERGRmWCwIyIiIjITDHZEREREZoLBjoiIiMhMMNgRERERmQkGOyIiIiIzwWBHREREZCYY7IiIiIjMBIMdERERkZlgsCMiIiIyEwx2RERERGaCwY6IiIjITDDYEREREZkJBjsiIiIiM8FgR0RERGQmGOyIiIiIzASDHREREZGZYLAjIiIiMhMMdkRERERmgsGOiIiIyEww2BERERGZCQY7IiIiIjPBYEdERERkJhjsiIiIiMwEgx0RERGRmWCwIyIiIjITDHZEREREZoLBjoiIiMhMMNgRERERmQlZg11UVBR69OgBOzs7uLi4YPTo0UhISKhynbVr10IQBMnDysqqjiomIiIiqr9kDXZ79uzBlClT8Ndff2HHjh0oKirC4MGDkZubW+V69vb2SEtL0z8uXbpURxUTERER1V8Wcm78l19+kbxfu3YtXFxccOTIETz66KOVricIAtzc3ExdHhEREVGDUq/OscvMzAQAODo6VtkvJycHLVu2hKenJ0aNGoXTp09X2regoABZWVmSBxEREZE5qjfBTqfTYfr06ejbty86duxYaT9/f3/ExMRg69at+Prrr6HT6dCnTx9cuXLFYP+oqChoNBr9w9PT01QfgYiIiEhWgiiKotxFAMBLL72E7du3488//0SLFi2qvV5RURHatWuHsWPH4r333quwvKCgAAUFBfr3WVlZ8PT0RGZmJuzt7Y1SOxEREZGpZGVlQaPRVCu7yHqOXZmpU6fip59+wh9//FGjUAcAlpaWCAwMRFJSksHlarUaarXaGGUSERER1WuyHooVRRFTp07F5s2bsWvXLvj4+NR4DK1Wi5MnT8Ld3d0EFRIRERE1HLLO2E2ZMgUbNmzA1q1bYWdnh/T0dACARqOBtbU1AGDChAlo3rw5oqKiAADvvvsuevfuDV9fX9y5cweLFy/GpUuXMGnSJNk+BxEREVF9IGuwW7lyJQAgODhY0r5mzRqEhYUBAFJTU6FQ3JtYzMjIwOTJk5Geng4HBwd069YN+/fvR/v27euqbCIiIqJ6qd5cPFFXanICIhEREZHcapJd6s3tToiIiIjo4TDYEREREZkJBjsiIiIiM8FgR0RERGQmGOyIiIiIzASDHREREZGZYLAjIiIiMhMMdkRERERmgsGOiIiIyEww2BERERGZCQY7IiIiIjPBYEdERERkJhjsiIiIiMwEgx0RERGRmWCwIyIiIjITDHZEREREZoLBjoiIiMhMMNgRERERmQkGOyIiIiIzwWBHREREZCYY7IiIiIjMBIMdERERkZlgsCMiIiIyEwx2RERERGaCwY6IiIjITDDYEREREZkJBjsiIiIiM8FgR0RERGQmGOyIiIiIzASDHREREZGZsJC7ACIiIqo9rVaLoqIiucugh2BpaQmlUmmUsRjsiIiIGiBRFJGeno47d+7IXQoZQdOmTeHm5gZBEB5qHAY7IiKiBqgs1Lm4uMDGxuahAwHJQxRF3L17F9evXwcAuLu7P9R4DHZEREQNjFar1Ye6Zs2ayV0OPSRra2sAwPXr1+Hi4vJQh2V58QQREVEDU3ZOnY2NjcyVkLGU/S0f9nxJBjsiIqIGiodfzYex/pYMdkRERERmgsGOiIiI6rXCwkL4+vpi//79lfZJSUmBIAiIj483eT2rVq1CaGioybdTGwx2REREVK+tWrUKPj4+6NOnj1HHDQsLw+jRo2u8Xnh4OI4ePYq9e/catR5jYLAjIiKieksURSxfvhwRERFyl6KnUqkwbtw4fPrpp3KXUgGDHRERUSOVmJiIyMhIjB07FpGRkUhMTDTp9oKDg/Hqq69i7ty5cHR0hJubG95+++0q1zly5AiSk5MxYsQISfvff/+NwMBAWFlZoXv37jh27JhkuVarRUREBHx8fGBtbQ1/f38sW7ZMv/ztt9/GunXrsHXrVgiCAEEQEBcXBwB47bXX0KZNG9jY2KBVq1aYP39+hatVQ0ND8cMPPyAvL6/2O8QEeB87IiKiRmjNmjWYNGkSBEGAKIoQBAEffvghoqOjERYWZrLtrlu3DjNnzsTBgwdx4MABhIWFoW/fvhg0aJDB/nv37kWbNm1gZ2enb8vJycHIkSMxaNAgfP3117h48SKmTZsmWU+n06FFixb47rvv0KxZM+zfvx/PP/883N3d8fTTT2P27Nk4e/YssrKysGbNGgCAo6MjAMDOzg5r166Fh4cHTp48icmTJ8POzg5z587Vj9+9e3cUFxfj4MGDCA4ONvJeqj1ZZ+yioqLQo0cP2NnZwcXFBaNHj0ZCQsID1/vuu+/Qtm1bWFlZoVOnTti2bVsdVEtERGQeEhMTMWnSJOh0Omi1WslzREQEkpKSTLbtgIAALFiwAH5+fpgwYQK6d++OnTt3Vtr/0qVL8PDwkLRt2LABOp0O0dHR6NChA0aOHIk5c+ZI+lhaWuKdd95B9+7d4ePjg/Hjx2PixIn49ttvAQC2trawtraGWq2Gm5sb3NzcoFKpAABvvvkm+vTpA29vb4SGhmL27Nn69crY2NhAo9Hg0qVLxtgtRiNrsNuzZw+mTJmCv/76Czt27EBRUREGDx6M3NzcStfZv38/xo4di4iICBw7dgyjR4/G6NGjcerUqTqsnIiIqOGKiYmp9L5pgiAgOjraZNsOCAiQvHd3d9f/nJYheXl5sLKykrSdPXsWAQEBkvagoKAK665YsQLdunWDs7MzbG1tsXr1aqSmpj6wxm+++QZ9+/aFm5sbbG1t8eabbxpcz9raGnfv3n3geHVJ1mD3yy+/ICwsDB06dEDnzp2xdu1apKam4siRI5Wus2zZMgwdOhRz5sxBu3bt8N5776Fr165Yvnx5HVZORETUcKWkpEAURYPLRFFESkqKybZtaWkpeS8IAnQ6XaX9nZyckJGRUePtxMbGYvbs2YiIiMBvv/2G+Ph4TJw4EYWFhVWud+DAAYwfPx7Dhw/HTz/9hGPHjmHevHkG17t9+zacnZ1rXJsp1auLJzIzMwHcO8ZtyIEDBxASEiJpGzJkCA4cOGDS2oiIiMyFt7d3lTN23t7edVtQFQIDA3Hu3DlJEG3Xrh1OnDiB/Px8fdtff/0lWW/fvn3o06cPXn75ZQQGBsLX1xfJycmSPiqVClqtVtK2f/9+tGzZEvPmzUP37t3h5+dn8HBrcnIy8vPzERgYaIyPaTT1JtjpdDpMnz4dffv2RceOHSvtl56eDldXV0mbq6sr0tPTDfYvKChAVlaW5EFERNSYhYeHVzljV59uLTJgwADk5OTg9OnT+rZx48ZBEARMnjwZZ86cwbZt2/DRRx9J1vPz88Phw4fx66+/4vz585g/fz4OHTok6ePt7Y0TJ04gISEBN2/eRFFREfz8/JCamorY2FgkJyfj008/xebNmyvUtXfvXrRq1QqtW7c2zQevpXoT7KZMmYJTp04hNjbWqONGRUVBo9HoH56enkYdn4iIqKHx8/NDdHQ0FAoFlEql5Dk6Ohq+vr5yl6jXrFkzPP7441i/fr2+zdbWFj/++CNOnjyJwMBAzJs3D4sWLZKs98ILL+CJJ57AmDFj0KtXL9y6dQsvv/yypM/kyZPh7++P7t27w9nZGfv27cO//vUvzJgxA1OnTkWXLl2wf/9+zJ8/v0JdGzduxOTJk03zoR+CIFYW2evQ1KlTsXXrVvzxxx/w8fGpsq+XlxdmzpyJ6dOn69sWLFiALVu24Pjx4xX6FxQUoKCgQP8+KysLnp6eyMzMhL29vdE+AxERUV3Jz8/HxYsX4ePjU+HCgppISkpCdHQ0UlJS4O3tjYiIiHoV6sqcOHECgwYNQnJyMmxtbeUuB6dPn8Zjjz2G8+fPQ6PRGGXMqv6mWVlZ0Gg01coust7HThRFvPLKK9i8eTPi4uIeGOqAkqtedu7cKQl2O3bsMHg1DACo1Wqo1WpjlUxERGQ2fH19ERUVJXcZDxQQEIBFixbh4sWL6NSpk9zlIC0tDV999ZXRQp0xyRrspkyZgg0bNmDr1q2ws7PTnyen0WhgbW0NAJgwYQKaN2+u/+JNmzYN/fv3x5IlSzBixAjExsbi8OHDWL16tWyfg4iIiEzLlDdNrqn7L+KsT2Q9x27lypXIzMxEcHAw3N3d9Y9vvvlG3yc1NRVpaWn693369MGGDRuwevVqdO7cGd9//z22bNlS5QUXRERERI2B7IdiH6Tsd9vKe+qpp/DUU0+ZoCIiIiKihqveXBVLRERERA+HwY6IiIjITDDYEREREZkJBjsiIiIiM8FgR0RERGQmah3skpKS8OuvvyIvLw9A9a5wJSIiIqqpwsJC+Pr6Yv/+/XW+7ZSUFAiCgPj4+GqvExwcLPkhhd69e2PTpk3GL86AGge7W7duISQkBG3atMHw4cP195iLiIjArFmzjF4gERERNW6rVq2Cj48P+vTpI3cptfLmm2/i9ddfh06nM/m2ahzsZsyYAQsLC6SmpsLGxkbfPmbMGPzyyy9GLY6IiIgaN1EUsXz5ckRERMhdSq0NGzYM2dnZ2L59u8m3VeNg99tvv2HRokVo0aKFpN3Pzw+XLl0yWmFERET0YKJOB+3NDFkfYjVnooKDg/Hqq69i7ty5cHR0hJubG95+++0q1zly5AiSk5MxYsQIfVvZ4dFvv/0W/fr1g7W1NXr06IHz58/j0KFD6N69O2xtbTFs2DDcuHFDv55Op8O7776LFi1aQK1Wo0uXLhUmpf7++28EBgbCysoK3bt3x7FjxyrUdOrUKQwbNgy2trZwdXXFv//9b9y8ebPSz6BUKjF8+HDExsZWaz89jBr/8kRubq5kpq7M7du3oVarjVIUERERVY/udiZS2v1L1hq8z/4ApZNDtfquW7cOM2fOxMGDB3HgwAGEhYWhb9++GDRokMH+e/fuRZs2bWBnZ1dh2YIFC7B06VJ4eXkhPDwc48aNg52dHZYtWwYbGxs8/fTTeOutt7By5UoAwLJly7BkyRJ8/vnnCAwMRExMDP71r3/h9OnT8PPzQ05ODkaOHIlBgwbh66+/xsWLFzFt2jTJNu/cuYPHHnsMkyZNwieffIK8vDy89tprePrpp7Fr165KP3fPnj2xcOHCau2jh1HjGbt+/frhq6++0r8XBAE6nQ4ffvghBgwYYNTiiIiIyLwEBARgwYIF8PPzw4QJE9C9e3fs3Lmz0v6XLl2Ch4eHwWWzZ8/GkCFD0K5dO0ybNg1HjhzB/Pnz0bdvXwQGBiIiIgK7d+/W9//oo4/w2muv4ZlnnoG/vz8WLVqELl26YOnSpQCADRs2QKfTITo6Gh06dMDIkSMxZ84cyTaXL1+OwMBAfPDBB2jbtq0+IO7evRvnz5+v9HN4eHjg8uXLJj/PrsYzdh9++CEGDhyIw4cPo7CwEHPnzsXp06dx+/Zt7Nu3zxQ1EhERkZkICAiQvHd3d8f169cr7Z+XlwcrK6sHjuXq6goA6NSpk6StbOysrCxcvXoVffv2lYzRt29fHD9+HABw9uxZBAQESLYXFBQk6X/8+HHs3r0btra2FepJTk5GmzZtDNZqbW0NnU6HgoICWFtbV/p5H1aNg13Hjh1x/vx5LF++HHZ2dsjJycETTzyBKVOmwN3d3RQ1EhERkZmwtLSUvC878lcZJycnnDx58oFjCYJgsM3YM2Q5OTkIDQ3FokWLKiyrKgfdvn0bTZo0MWmoA2oR7ABAo9Fg3rx5xq6FiIiIakjhqIH32R9kr8FUAgMDsXLlSoiiqA9vtWFvbw8PDw/s27cP/fv317fv27cPPXv2BAC0a9cO//3vf5Gfn6+ftfvrr78k43Tt2hWbNm2Ct7c3LCyqH6NOnTqFwMDAWtdfXTUOdn/88UeVyx999NFaF0NEREQ1IygU1b5woSEaMGAAcnJycPr0aXTs2PGhxpozZw4WLFiA1q1bo0uXLlizZg3i4+Oxfv16AMC4ceMwb948TJ48GZGRkUhJScFHH30kGWPKlCn44osvMHbsWP3VvUlJSYiNjcWXX34JpVJpcNt79+7F4MGDH6r+6qhxsAsODq7QVj5Ba7XahyqIiIiIqEyzZs3w+OOPY/369YiKinqosV599VVkZmZi1qxZuH79Otq3b48ffvgBfn5+AABbW1v8+OOPePHFFxEYGIj27dtj0aJFePLJJ/VjlM36vfbaaxg8eDAKCgrQsmVLDB06FAqF4WtS//nnH+zfvx9ff/31Q9VfHYJYw98Cy8zMlLwvKirCsWPHMH/+fLz//vsYOHCgUQs0tqysLGg0GmRmZsLe3l7ucoiIiGosPz8fFy9ehI+PT6UXFpiTEydOYNCgQUhOTjZ40UJ999prryEjIwOrV6+utE9Vf9OaZJcaz9hpNBWPow8aNAgqlQozZ87EkSNHajokERERUaUCAgKwaNEiXLx4UXLVa0Ph4uKCmTNn1sm2anXxhCGurq5ISEgw1nBEREREemFhYXKXUGuzZs2qs23VONidOHFC8l4URaSlpWHhwoXo0qWLseoiIiIiohqqcbDr0qULBEHA/afm9e7dGzExMUYrjIiIiIhqpsbB7uLFi5L3CoUCzs7OjeLkTSIiIqL6rMbBrmXLlqaog4iIiIgeUrWC3aefflrtAV999dVaF0NEREREtVetYPfJJ59UazBBEBjsiIiIiGRSrWB3/3l1RERERFT/GP7tCyIiIiIjCw4OxvTp02u83vz58/H888+bZOyaunnzJlxcXHDlyhWTb6s2anWD4itXruCHH35AamoqCgsLJcs+/vhjoxRGRERElJ6ejmXLluHkyZNGHTcuLg4DBgxARkYGmjZtWu31nJycMGHCBCxYsADR0dFGrckYahzsdu7ciX/9619o1aoVzp07h44dOyIlJQWiKKJr166mqJGIiIgaqS+//BJ9+vSpV3flmDhxIrp164bFixfD0dFR7nIkanwoNjIyErNnz8bJkydhZWWFTZs24fLly+jfvz+eeuopU9RIREREJpCYmIjIyEiMHTsWkZGRSExMrNPt//zzz9BoNFi/fn2lfWJjYxEaGippy83NxYQJE2Brawt3d3csWbKkwnr//e9/0b17d9jZ2cHNzQ3jxo3D9evXAQApKSkYMGAAAMDBwQGCIOh/suyXX37BI488gqZNm6JZs2YYOXIkkpOTJWN36NABHh4e2Lx588N8fJOocbA7e/YsJkyYAACwsLBAXl4ebG1t8e6772LRokVGL5CIiIiMb82aNWjbti0WL16Mb7/9FosXL0bbtm2xdu3aOtn+hg0bMHbsWKxfvx7jx4832Of27ds4c+YMunfvLmmfM2cO9uzZg61bt+K3335DXFwcjh49KulTVFSE9957D8ePH8eWLVuQkpKiD2+enp7YtGkTACAhIQFpaWlYtmwZgJLQOHPmTBw+fBg7d+6EQqHA448/Dp1OJxm/Z8+e2Lt3rzF2hVHV+FBskyZN9OfVubu7Izk5GR06dABQckIhERER1W+JiYmYNGlShbACABEREXjkkUfg6+trsu2vWLEC8+bNw48//oj+/ftX2i81NRWiKMLDw0PflpOTg+joaHz99dcYOHAgAGDdunVo0aKFZN3w8HD961atWuHTTz9Fjx49kJOTA1tbW/0hVBcXF8k5dk8++aRknJiYGDg7O+PMmTPo2LGjvt3DwwPHjh2r+Yc3sRrP2PXu3Rt//vknAGD4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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()\n" ] }, { "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": "2023-03-28T01:16:01.058527Z", "iopub.status.busy": "2023-03-28T01:16:01.058386Z", "iopub.status.idle": "2023-03-28T01:16:01.134042Z", "shell.execute_reply": "2023-03-28T01:16:01.133608Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2505cf17d1e040e4934b3c7b5d5dd69f", "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" } ], "source": [ "fitter = fitter.copy(update={\"wvl_range\": (3, 20)})\n", "medium, rms_error = fitter.fit(num_poles=1, tolerance_rms=2e-2, num_tries=100)\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2023-03-28T01:16:01.138450Z", "iopub.status.busy": "2023-03-28T01:16:01.138097Z", "iopub.status.idle": "2023-03-28T01:16:01.334953Z", "shell.execute_reply": "2023-03-28T01:16:01.334372Z" } }, "outputs": [ { "data": { "image/png": "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WFiYbVlubq5SUlL01ltvacCAAZKkRYsWqWXLlnbbjhkzxva+TZs2eumll9SzZ0/l5ubK39/fdgq1efPmdtfY/fnPf7brZ/78+WrWrJn27dunTp062ZaHhYVp+/bt1f/yTlbtEburr75aX3/9tSRp2LBheuCBB/T0009rzJgxuvrqqx1eIAAAcKz58+fLMIxy1xmG4dRJAR988IEmTZqkVatWVRrqJCk/P1+S7B5bevDgQRUVFal37962ZY0bN1ZMTIzdtlu3btWIESPUqlUrBQQE2PaVkZFR6T7T0tI0atQotWnTRoGBgYqIiCh3Oz8/P505c6byL+sC1Q52zz//vO1gPvHEExowYIDeffddRURE1MrZIQAAwF7ppMfymKap9PR0p+07NjZWzZo10/z58yusoVTTpk0lSSdPnqzWPvLy8jRkyBAFBgbq7bff1nfffWe7Hu7Cu3lcaMSIETpx4oRef/11bd68WZs3by53uxMnTqhZs2bVqqsmVDvYPfPMMzpx4oSkc6dl586dq127dmnp0qW1asYKAAAoX0RERKUjdqWjVM7Qtm1brVmzRitWrNA///nPi7YNDAzUvn377JZ5eXnZApd0Lvj98MMPts/ff/+9jh8/rhkzZujaa69V+/btbRMnSnl7e0uSSkpKbMuOHz+u1NRUPfrooxowYIA6dOhQYajcs2ePYmNjq/7Fa0i1g92xY8d0ww03KDw8XFOnTtXOnTudURcAAHCSMWPGVDpil5iY6NT9t2vXTmvWrNHSpUsrvamwxWLRwIEDbZeASZK/v78SExM1depUffnll9qzZ48SEhJksfwRaVq1aiVvb2/9+9//1o8//qgPP/xQTz31lF3frVu3lmEY+vjjj3Xs2DHl5uaqUaNGatKkiebNm6cDBw7oyy+/1OTJk8vUdebMGW3dulWDBw++/IPhYNUOditWrFBmZqamTZum7777TldddZWuvPJKPfPMM04dugUAAI4RHR2tlJQUWSwWeXh42P1NSUlx6sSJUjExMfryyy/1zjvv6IEHHqiw3dixY7VkyRK7iR6zZs3StddeqxEjRmjgwIG65ppr1L17d9v6Zs2aaeHChXr//ffVsWNHzZgxQ88995xdvy1atNATTzyhhx9+WMHBwZowYYIsFouWLFmirVu3qlOnTpo0aZJmzZpVpqYVK1aoVatWuvbaax1w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1bvJEwAAAO6KETsAAAA3QbADAABwEwQ7AAAAN0Gwq8Qrr7yiiIgI+fr6qnfv3vr2229dXZJLPf744zIMw+7Vvn17V5dV47766iuNGDFCYWFhMgxDy5cvt1tvmqYee+wxhYaGys/PTwMHDlRaWppriq0hFzsmCQkJZX47N9xwg2uKrSHJycnq2bOnAgIC1Lx5c40cOVKpqal2bQoKCjR+/Hg1adJE/v7++vOf/6wjR464qOKaUZXjEh8fX+b3cs8997io4prx6quvqkuXLrb7ssXFxenTTz+1ra+Pv5WLHZP6+DupCoJdBd59911NnjxZ06dP17Zt29S1a1cNGTJER48edXVpLnXllVcqMzPT9vr6669dXVKNy8vLU9euXfXKK6+Uu/7ZZ5/VSy+9pLlz52rz5s264oorNGTIEBUUFNRwpTXnYsdEkm644Qa7384777xTgxXWvHXr1mn8+PH65ptvtGrVKhUXF2vw4MHKy8uztZk0aZI++ugjvf/++1q3bp1+/fVX3XLLLS6s2vmqclwkady4cXa/l2effdZFFdeMli1basaMGdq6dau2bNmi66+/XjfddJP27t0rqX7+Vi52TKT69zupEhPl6tWrlzl+/Hjb55KSEjMsLMxMTk52YVWuNX36dLNr166uLqNWkWQuW7bM9tlqtZohISHmrFmzbMtOnTpl+vj4mO+8844LKqx5Fx4T0zTNO++807zppptcUk9tcfToUVOSuW7dOtM0z/0uvLy8zPfff9/WZv/+/aYkc9OmTa4qs8ZdeFxM0zT79etn3n///a4rqpZo1KiR+cYbb/BbOU/pMTFNficVYcSuHEVFRdq6dasGDhxoW2axWDRw4EBt2rTJhZW5XlpamsLCwtSmTRvdcccdysjIcHVJtcqhQ4eUlZVl99sJCgpS79696/1vZ+3atWrevLliYmJ077336vjx464uqUZlZ2dLkho3bixJ2rp1q4qLi+1+K+3bt1erVq3q1W/lwuNS6u2331bTpk3VqVMnJSUl6cyZM64ozyVKSkq0ZMkS5eXlKS4ujt+Kyh6TUvX5d1KReves2Kr47bffVFJSouDgYLvlwcHB+v77711Ulev17t1bCxcuVExMjDIzM/XEE0/o2muv1Z49exQQEODq8mqFrKwsSSr3t1O6rj664YYbdMsttygyMlIHDx7Uv/71Lw0dOlSb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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter.plot(medium)\n", "plt.show()\n" ] }, { "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": "2023-03-28T01:16:01.337220Z", "iopub.status.busy": "2023-03-28T01:16:01.337027Z", "iopub.status.idle": "2023-03-28T01:16:01.355203Z", "shell.execute_reply": "2023-03-28T01:16:01.354652Z" }, "tags": [] }, "outputs": [], "source": [ "b = td.Structure(geometry=td.Box(size=(1, 1, 1)), medium=medium)\n" ] }, { "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": "2023-03-28T01:16:01.357293Z", "iopub.status.busy": "2023-03-28T01:16:01.357125Z", "iopub.status.idle": "2023-03-28T01:16:01.374398Z", "shell.execute_reply": "2023-03-28T01:16:01.373923Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "td.PoleResidue(\n", "\teps_inf=1.0, \n", "\tpoles=(((-2356501547059525+574821084055067.5j), (1.6942059105382786e+16+1.376947608154165e+16j)),), \n", "\tfrequency_range=(15048764544660.518, 97485556621412.89))\n" ] } ], "source": [ "print(medium)\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2023-03-28T01:16:01.376306Z", "iopub.status.busy": "2023-03-28T01:16:01.376125Z", "iopub.status.idle": "2023-03-28T01:16:01.392692Z", "shell.execute_reply": "2023-03-28T01:16:01.392126Z" } }, "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))\n" ] }, { "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": "2023-03-28T01:16:01.394690Z", "iopub.status.busy": "2023-03-28T01:16:01.394480Z", "iopub.status.idle": "2023-03-28T01:16:01.418734Z", "shell.execute_reply": "2023-03-28T01:16:01.418064Z" }, "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)\n" ] }, { "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": "2023-03-28T01:16:01.420761Z", "iopub.status.busy": "2023-03-28T01:16:01.420623Z", "iopub.status.idle": "2023-03-28T01:16:01.438715Z", "shell.execute_reply": "2023-03-28T01:16:01.438089Z" } }, "outputs": [], "source": [ "from tidy3d.plugins.dispersion import StableDispersionFitter, AdvancedFitterParam\n", "\n", "fname = \"misc/nk_data.csv\"\n", "fitter_stable = StableDispersionFitter.from_file(fname, skiprows=1, delimiter=\",\")\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2023-03-28T01:16:01.440566Z", "iopub.status.busy": "2023-03-28T01:16:01.440429Z", "iopub.status.idle": "2023-03-28T01:16:12.681518Z", "shell.execute_reply": "2023-03-28T01:16:12.681016Z" }, "tags": [] }, "outputs": [], "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),\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note here we supply the `advanced_param` for more control of the fitting process. `nlopt_maxeval` 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": "2023-03-28T01:16:12.683601Z", "iopub.status.busy": "2023-03-28T01:16:12.683452Z", "iopub.status.idle": "2023-03-28T01:16:12.885115Z", "shell.execute_reply": "2023-03-28T01:16:12.884606Z" } }, "outputs": [ { "data": { "image/png": "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IAjw9PS0dnlEREREjUqDOscuOzsbAODq6lpjv9zcXLRu3Rq+vr4YM2YMTp8+XW3foqIi6PV6yYOIiIhIiRpMsDMajZg5cyb69euHzp07V9svODgYcXFx2LZtGz7//HMYjUb07dsXf/31l9n+MTEx0Ol0poevr6+1PgIRERGRrARRFEW5iwCAZ555Bjt27MCvv/6KVq1a1Xq9kpISdOjQAePHj8dbb71VZXlRURGKiopM7/V6PXx9fZGdnQ1nZ2eL1E5ERERkLXq9HjqdrlbZRdZz7CrMmDED3333HX755Zc6hToAsLW1RWhoKFJSUswu12q10Gq1liiTiIiIqEGT9VCsKIqYMWMGtmzZgt27dyMgIKDOYxgMBpw8eRJeXl5WqJCIiIio8ZB1xm769OnYuHEjtm3bBicnJ2RmZgIAdDod7O3tAQCTJk2Cj48PYmJiAABvvvkm+vTpg8DAQNy6dQtLlizBxYsXMXXqVNk+BxEREVFDIGuwW7VqFQAgPDxc0r527VpERkYCANLT06FS3Z5YzMrKwrRp05CZmQkXFxd0794dBw4cQMeOHeurbCIiIqIGqcFcPFFf6nICIhEREZHc6pJdGsztToiIiIjo/jDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESmEjdwFEBER0b0zGAwoKSmRuwy6D7a2tlCr1RYZi8GOiIioERJFEZmZmbh165bcpZAFNG/eHJ6enhAE4b7GYbAjIiJqhCpCnbu7OxwcHO47EJA8RFFEfn4+rl69CgDw8vK6r/EY7IiIiBoZg8FgCnUtWrSQuxy6T/b29gCAq1evwt3d/b4Oy/LiCSIiokam4pw6BwcHmSshS6n4W97v+ZIMdkRERI0UD78qh6X+lgx2RERERArBYEdEREQNWnFxMQIDA3HgwIFq+6SlpUEQBCQmJlq9ntWrV2P06NFW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bTt37kRYWFi162i1Wmi1WmuXRkRERCQ7WWfscnNzkZiYiMTERABltzNJTExEeno6gLLZtkmTJpn6P/300zh//jzmz5+PP//8E//3f/+HL7/8ErNmzZKjfCIiIqIGRdZgd/jwYYSGhiI0NBQAMHv2bISGhuK1114DAGRkZJhCHgAEBATg+++/x86dO9G1a1csW7YMn376KW91QkRERARAEEVRlLuI+qTX66HT6ZCdnQ1nZ2e5yyEiIiKqUV2yS6O6eIKIiIiIqsdgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQDHZERERECsFgR0RERKQQNnIXoFTJycmIi4tDWloa/P39MWXKFAQFBcldFhERESkYg50VrF27FlOnToUgCBBFEYIg4N1330VsbCwiIyPlLo+IiIgUisHOwo7vT0bKoo6Y3GodrhQlI6PoLM7k7ESBMRuTJ09Gq1atEBERIXeZREREpEA8x87Cli74BM1tvRHsFI6HWk7DOJ/3MKftz9DZeAIAhgwZgnXr1slbJBERESkSg50FJScnI/1EdpV2Z1sPjPR8FQAgiiKioqKQkpJS3+URERGRwjHYWVBcXBw87dqZXdZN9w/4O/QCAAiCgNjY2PosjYiIiJoABjsLSktLw+7rK7Hh0nQcuLm+yvJ/eC4EUDZrl5aWVs/VERERkdIx2FmQv78/skrTcVz/LbZmLMDWjAWS5a3su6CtQxhEUYSzs7NMVRIREZFSMdhZ0JQpUyCKoun9bzc/x7WiVEmf3q4TIYoiPv30U15EQURERBbFYGdBQUFBiI2NhUqlglqthigYceDmfyV9OjsNQzN1CxiNRl5EQURERBbFYGdhkZGRSEpKwrx58zBu3DgU+yahxFhoWm6j0qBH88cB8CIKIiIisiwGOysIDAxETEwMNm3ahLYdfHFC/71keW+XCRAg8CIKIiIisigGOyvz9/fH79kbJW0ttf5o26yfaTkRERGRJTDYWdmUKVNwMf8IMgr/lLT3cZkIo9GI5s2by1MYERERKQ6DnZUFBQXh7bffxqEs6axdJ+chcLRxw8svv8wLKIiIiMgiGOzqQXZ2No7nbEWxscDUphZs0bP5E7yAgoiIiCyGwa4epKWlocCgx/HsbyXtvVzGAyJ4AQURERFZBINdPfD394cgCDiUtUHS3kLjh0CHB/krFERERGQRDHb1oOIXKdILjuFy4RnJsl4uE/grFERERGQRDSLYrVy5Ev7+/rCzs0Pv3r3x+++/V9t33bp1EARB8rCzs6vHauuu4hcpBEHAoZvSWbuOToPhqHLjr1AQERHRfZM92H3xxReYPXs2Fi5ciKNHj6Jr164YOnQorl69Wu06zs7OyMjIMD0uXrxYjxXfm8jISDz11FNI1G9DsTHf1K4WbBDmOokXURAREdF9kz3Yvffee5g2bRomT56Mjh07YvXq1XBwcEBcXFy16wiCAE9PT9PDw8OjHiu+d9nZ2SgSc3H01v8k7X1cJkJltMXJkydlqoyIiIiUQNZgV1xcjCNHjiAiIsLUplKpEBERgYMHD1a7Xm5uLlq3bg1fX1+MGTMGp0+frrZvUVER9Hq95CGXiosofr25VtLezMYVoc0fwfbt23muHREREd0zWYPd9evXYTAYqsy4eXh4IDMz0+w6wcHBiIuLw7Zt2/D555/DaDSib9+++Ouvv8z2j4mJgU6nMz18fX0t/jlqq+IiiqtFyUjKSZAs6+86FRDBc+2IiIjonsl+KLauwsLCMGnSJHTr1g0DBgzA//73P7i5ueHjjz822z86OhrZ2dmmx6VLl+q54tsqLqIAgF9vSg81e9gFoZPTUJ5rR0RERPdM1mDXsmVLqNVqXLlyRdJ+5coVeHp61moMW1tbhIaGVjvLpdVq4ezsLHnIKTIyEiNHjkRy3i9Vfj92kNtzMBgMPNeOiIiI7omswU6j0aB79+7YtWuXqc1oNGLXrl0ICwur1RgVQcjLy8taZVpcly5dIKgE7L72kaTdx74L2js+zHPtiIiI6J7Ifih29uzZ+OSTT7B+/XqcPXsWzzzzDPLy8jB58mQAwKRJkxAdHW3q/+abb+Knn37C+fPncfToUfzrX//CxYsXMXXqVLk+Qp1VnGt3Qv89rhWdlywb6j4XEMv68Fw7IiIiqgvZg924ceOwdOlSvPbaa+jWrRsSExPxww8/mC6oSE9PR0ZGhql/VlYWpk2bhg4dOmDEiBHQ6/U4cOAAOnbsKNdHqLOKc+1EGLH72grJMh/7zuiq+wdEUcQLL7wgU4VERETUGAmiKIpyF1Gf9Ho9dDodsrOzZT/fbtSoUdjx/Q+Y2fZHeNq1M7XfLE7HkpSHYRCLkZycjMDAQBmrJCIiIjnVJbvIPmPXlHXp0gWiYMQPVxdL2l01fnioxTQAwJIlS+QojYiIiBohBjsZVZxrdyZnJy7k/SFZNsjtebjYtsKaNWt4IQURERHVCoOdjIKCgjBixAgAwDeZr8MoGk3LNCp7jPF8AwAwefJk/Pzzz7LUSERERI0Hg53MPvjgA6hUKvxdeBK/Zf1Xsqyj82CE6sYCAIYMGcKZOyIiIqoRg53MKv8axY9XliK39Lpk+Rivt+Bs4wFRFHkLFCIiIqoRg10DEBkZif/85z8oFPXYkvGqZJmDWodxPh9AgIq3QCEiIqIaMdg1EHPmzIEgCDip345jt7ZKlgU59kOE20wAwPbt23m+HREREZnFYNdAVD4kuzVzAW6VXJYsH+T2PDo6DQbA8+2IiIjIPAa7BiQyMhI7d+5EgSEbGy5Nh0EsMS1TCSqM9/kQXtoOEEWRV8oSERFRFQx2DUxERARGjBiBiwVHsOPKIskyrboZJrdeh+a2PgA4c0dERERSDHYNUMUtUH658QkO3/pasqy5rReear0RjjZuvFKWiIiIJBjsGqDK59ttvvxSlV+laKkNwDP+X6G5rQ9EUcTQoUORnJwsR6lERETUgDDYNVAV59sZUYJ1l6Ygo/BPyXI3bRs8G/A/uGuDcP78ebRv356HZYmIiJo4BrsGLCIiAnFxcSgwZOPTi//C9aI0yfLmtl54xv8r+Np3hdFo5AUVRERETRyDXQNXMXOXU3oVq9MerzJz18zGFU/7f4UezR8HAAwePBgjR47koVkiIqImiMGuEai4UlZfegWr0x7HxfwjkuW2Kjs84bMMj3kvho2gxfbt29GuXTssWrSomhGJiIhIiRjsGomKK2ULDNn45OJEnMv9pUqf3i7jMT3gf/DUBgMAoqOjMXDgQM7eERERNREMdo1ExZWygiCg2JiPtemT8euNuCr9fOy74Pk23yPCbSbUgi0SEhLQrl07Hp4lIiJqAhjsGpHIyEicO3cOI0aMgEEswTeZr2PDpekoMuRJ+tmoNBjiPhvPt/ke/g69AICHZ4mIiJoAQRRFUe4i6pNer4dOp0N2djacnZ3lLuee/fzzzxgyZAhEUYS7Ngj/brUaHnZBZvue1O/AjisxuF6cBgAIDw/HmjVrEBRkvj8RERE1HHXJLpyxa6QqboUiCAKuFiVj+fkR2H1tBQxiaZW+XZyHY3bbnzHG803obLxMh2e9vb3xn//8h4doiYiIFIIzdo1cSkoKpk6dir179wIAfOw643HvJfC272S2f6mxGEeyNyPh+v/hRvFFU/uIESPwwQcfcBaPiIiogalLdmGwU4jFixfjpZdeAgCoYIM+rhMx2G0Wmtm4mu1vFI34M2cX9t9ch5S8XyGi7GvQpk0bdOjQAV26dMGUKVMY9IiIiGTGYFcDpQY7oGz27oUXXsD27dsBAHYqZwxym4F+rpNho9JWu961olT8cetLHLu1FdmlGZJlISEhGDFiBEMeERGRTBjsaqDkYFfhzsOzOhsvDGj5NHq7jIetyq7a9YyiERfyf8ORW//DKf0OFBpzJMu9vLwwevRozJ07lyGPiIionjDY1aApBLsKlQ/PAoCjjRseajENvV0mwF5d82cvMRYiOXcfzuT+jLM5u5BTelWynIdsiYiI6geDXQ2aUrADqh6eBQCNygEP6B5FX9cn4WkXXKtx0vOP4UzOzziXuxd/F56CCKNkOQ/ZEhERWQeDXQ2aWrCrYC7gAUCAQy880PwxhDiPgL1aV6uxCgzZSM37Dal5B5CStx9Xi5JNF18AgK+vLzQaDTQaDfr3789Dt0RERPeBwa4GTTXYVUhJScHSpUvxzTffICPj9oUSNoIWHZwGIVT3CNo7DoSNSlPrMfMN2biUfwzpBbcfBYZsSR+GPSIionvDYFeDph7sKqtuFs9erUN7x4Ho6DQY7RwH3PV8PHOuFaUivSARlwtPI6PwLC4XnkG+IUvSpyLsAYCTkxN8fHx4zh4REdEdGOxqwGBXVUpKCmJjY7F9+3acOHFCskwt2CLAoTc6Og1GkOOD8NDee+DKLslERuFZZBSeRWbRn7hWdB7XilNRZMyr0pehj4iIqAyDXQ0Y7GpWEfJOnjyJs2fP4vz585LlzjYeaNssDIHN+iGwWT+4aFrd9zb1JVdwrTjVFPSuFV3AteJUZBX/DSOq/kSam5sbfHx80Lx5c2RlZSE3N5eHeImISLEY7GrAYFc31Z2TV0Fn4wk/hwfgZx8KP/sH0Mq+S433yqsLo2hAdkkGbpZcQlbxX8gq+Qs3iy8hq+QSbpb8BX1JJowwVFmvTZs28PPzM4U+oGzWr3nz5igsLESLFi04+0dERI0Gg10NGOzuXU2HbCuoYAMvuw7wcwiFj11neNt1hIe2ncXCXmVG0YCc0mvQl15Bdkkm9KWZZc8lV8raSjOhL8mscqPlyoKDg2FnZ1clAN4ZCnkomIiI5MJgVwMGO8u42yHbylRQo6UmAF52HeBl1xHedh3gpg2Ei20rqASV1WstNuYjp/Q6ckuvI6/0BnIN15FbeqPsYXp9HbmGG8gvvWl2FrCyO8//MxcEeZiYiIgshcGuBgx21lE56P3999/4+++/ce3atRrXsRG0aKFpDTdNG7hp25Y/t4Gbpi0cbJrXT+Fm5JVmocBwC/mGWygwZCPf9PoW8svfF5iey5cZs2EQS+46dk2HiWvbxsPJRERNC4NdDRjs6s+9hL0KDurmcLH1hYttK7hqWsHF1heumor3vtCoHKxcfd0VGwtQZMhBoTEHhcZcFBpyUWjUo8iQi0JjLoqMOSg0lC0rKn8uLG8rKn9dbMyvVUCszNzFJMDdw6GdnR1nGomIGgEGuxow2MnrzrCXk1N2/ltxcTEuXbpU63GaqVtAZ+sJnY0nnG09obPxgLOtJ5xtPKCz9YSzjSea2bhY62NYVamxGMViAYqN+Sgx5qPImI9i06MAxcY8FIsVr/PL3ptelz2KjPkoFvNRYixAibEQJWIhSsUilBgLq/wcXG2YO/xcm3B4t7a6jsHZSiJqihjsasBg13BZKvRVsBG0cLbxgJONOxxtXOFo0xLN1C3gaNMSjjYt4FjptYPatV7O92sISo3FkqBXIhai1FiEErEQJcYilJY/l7UXokSs/Lpyn0KUisUoFYtQKhbDIJag1FgMg1hc/r64fHml18Zis7ewuVfBwcFwcXGp94BpjXF5gQ4RVYfBrgYMdo1TxW1XfvnlFxQXF5v+x/HWrVt1OsRbHQEqOKhd4GTTEg5qFziom8NerSt/bg6H8kfZa2dTm53ayUKfsOkwisY7wl9J2bOxLCQaxJIqgbBiecUyI0phEEthEEtgLH82iKUwoqS83dyy268NYnFZW8VylMJoWlZyexkqXpdIfg/Z2iofXpdjZlSJY/DUAmrMGOxqwGCnTJVn+27cuAE7OzvcunXLNOvn5OSEgoICJCUlWXS7KtiYAqCd2hF2KmdoVY6m13Zqx/L3zrBTVbx2gp3KyfRaq3JsMrOFjZlRNFQKi5VDXymMogFGVDwbyp7FUvOvYai0juGO9Y23xxFLYYSxfLm59e/se3tbBhggVuprEEshVowFI0TRCCMMEEVjeXtZXxGiaT1RFMufDebXKd9e5XUaC0tcxNTQgivHkG+M+jhFhMGuBgx2TVttAmDFTOD9HgquLQECNCoH2KmcoFE5QKNqBo3Kvvy1AzSCAzTq8meVAzQqe2hVzWBb/rqij7aiv8oBtuV9VILaanUTmWMQSyGWBz7zgdFYHhRvB0YRBhgrBcYq64tieZ/ydrN9KofUsteiaATK1ygbw1hpm2KVPkaIpnEqrwOIpvrEavpUHk/6upZ9TONW36eiPtNnMvu5ys6hrVyjUazc/3afinVQviURRkDE7dcV7eW1oKLlznUIAKBSlf0DPTY2FpGRkRYdu9EFu5UrV2LJkiXIzMxE165d8dFHH6FXr17V9v/qq6+wYMECpKWlISgoCIsXL8aIESNqtS0GO7oX1Z3/Zy4IWvow8f1QC7awFexgo7KDrWAHW0ELW5UdbAQ72KrK3puWqexgU7686ntt+Tpa0zJbwQ5qlQY2ggZqoeLZFjaCxio3pCaihq0ieKNKGCwLoCiPoKhYUinw3l4H0n5i5ZCJKqFSLEuiZsOoaZ1K27+9PVSqsXL4h7SfaH4dyfbEsm38VXACe2+shkqlQlJSEgIDAy22b+uSXWwsttV79MUXX2D27NlYvXo1evfujQ8++ABDhw5FUlIS3N3dq/Q/cOAAxo8fj5iYGIwaNQobN27E2LFjcfToUXTu3FmGT0BNQWBgIGJiYu5p3XuZJaypLT09vcYbQldWdr5YCVDDr29Yiwo2sLkj+ElDoAY2qtth0EbQVnp9e3nlwKgWtFALNlALNlAJtlDDBmrBFqryNrVga3qoULmtvL9gAzUqva60LhHdH8kRAkG+OuRiI2iw9wYgCAJiY2Pv+X8z7pfsM3a9e/dGz549sWLFCgCA0WiEr68vnnvuObz00ktV+o8bNw55eXn47rvvTG19+vRBt27dsHr16rtujzN2pAQ1XUxSm3BYcb5IQ51prG8CBKgEm/IwWDX0qVH22kbQSEJk2TpqqAR1+bNN+WsbqARVpeWV+gk2UEF1R98717/dVw01hMr9KvVVC2oIpu2Xv6/0WiXYQCjflhq33wuCyrQNAQIEQc1wS3SfTul/xGeXpkGlUuGJJ57Apk2bLDZ2o5mxKy4uxpEjRxAdHW1qU6lUiIiIwMGDB82uc/DgQcyePVvSNnToUGzdutWapRI1KIGBgbX6h8z9uNvh57uFQ0sETGtf/FJBhFh+dWwJSsQCq2yjsVCVB8mysKsuf68qC4h3hMGyZYJpHRXK+wlqSYAsW1Z5HVV5XzVU5WOb1jetU/X5dg3SdcxtTzD9nwqCUP4MwTRORX9TH9MyodIyVTXrV+2jKu+DKttUldd7e53KfVRmakH5dlRmazb3WW6/5nm18qk431AQBPj7+8tWh6zB7vr16zAYDPDw8JC0e3h44M8//zS7TmZmptn+mZmZZvsXFRWhqKjI9F6v199n1URNw/0cfrYWc4e16ztgWmNca1+gUxdGGACx/ApX2c/ApntVU/i7M3gKEADhdhQWIAC4HWJvB1FIw+cd61Ve53Y/mLZVsc7tcHu7ztvjlK9jdvuC5LNV3d7tcUzrQEDZ/1fqJ1Sqpcq2K/pUHsfMOqY+t2u5VpQCABBFEVFRUfXzhzZD8XPvMTExeOONN+Qug4gsoCGGTUup7vB6QwmujXmMpnZqAVB+wQBwO6SXNZIVqVQqqFQqxMbGWvTCibqSNdi1bNkSarUaV65ckbRfuXIFnp6eZtfx9PSsU//o6GjJoVu9Xg9fX9/7rJyIyLLq4/B6U2bpi5gaUnDlGPKOUfk+dlFRUbKGOkDmYKfRaNC9e3fs2rULY8eOBVB28cSuXbswY8YMs+uEhYVh165dmDlzpqlt586dCAsLM9tfq9VCq9VaunQiImpElDzbS1SZ7IdiZ8+ejSeffBI9evRAr1698MEHHyAvLw+TJ08GAEyaNAk+Pj6m/yBfeOEFDBgwAMuWLcPIkSMRHx+Pw4cPY82aNXJ+DCIiIiLZyR7sxo0bh2vXruG1115DZmYmunXrhh9++MF0gUR6errpbs4A0LdvX2zcuBGvvvoqXn75ZQQFBWHr1q28hx0RERE1ebLfx66+8T52RERE1JjUJbvwl8eJiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFEL2nxSrbxU/tKHX62WuhIiIiOjuKjJLbX4srMkFu5ycHACAr6+vzJUQERER1V5OTg50Ol2NfZrcb8UajUZcvnwZTk5OEAThrv31ej18fX1x6dIl/rZsOe4T87hfquI+MY/7xTzul6q4T8xravtFFEXk5OTA29sbKlXNZ9E1uRk7lUqFVq1a1Xk9Z2fnJvHlqQvuE/O4X6riPjGP+8U87pequE/Ma0r75W4zdRV48QQRERGRQjDYERERESkEg91daLVaLFy4EFqtVu5SGgzuE/O4X6riPjGP+8U87pequE/M436pXpO7eIKIiIhIqThjR0RERKQQDHZERERECsFgR0RERKQQDHY1WLlyJfz9/WFnZ4fevXvj999/l7skWb3++usQBEHyaN++vdxl1btffvkFo0ePhre3NwRBwNatWyXLRVHEa6+9Bi8vL9jb2yMiIgLJycnyFFtP7rZPIiMjq3x3hg0bJk+x9SQmJgY9e/aEk5MT3N3dMXbsWCQlJUn6FBYWYvr06WjRogUcHR3x2GOP4cqVKzJVXD9qs1/Cw8OrfF+efvppmSquH6tWrUJISIjpvmxhYWHYsWOHaXlT/K7cbZ80xe9JbTDYVeOLL77A7NmzsXDhQhw9ehRdu3bF0KFDcfXqVblLk1WnTp2QkZFhevz6669yl1Tv8vLy0LVrV6xcudLs8nfffRcffvghVq9ejUOHDqFZs2YYOnQoCgsL67nS+nO3fQIAw4YNk3x3Nm3aVI8V1r+9e/di+vTp+O2337Bz506UlJRgyJAhyMvLM/WZNWsWvv32W3z11VfYu3cvLl++jEcffVTGqq2vNvsFAKZNmyb5vrz77rsyVVw/WrVqhUWLFuHIkSM4fPgwHn74YYwZMwanT58G0DS/K3fbJ0DT+57Uikhm9erVS5w+fbrpvcFgEL29vcWYmBgZq5LXwoULxa5du8pdRoMCQNyyZYvpvdFoFD09PcUlS5aY2m7duiVqtVpx06ZNMlRY/+7cJ6Ioik8++aQ4ZswYWeppKK5evSoCEPfu3SuKYtn3wtbWVvzqq69Mfc6ePSsCEA8ePChXmfXuzv0iiqI4YMAA8YUXXpCvqAbCxcVF/PTTT/ldqaRin4givyfV4YydGcXFxThy5AgiIiJMbSqVChERETh48KCMlckvOTkZ3t7eaNOmDSZOnIj09HS5S2pQLly4gMzMTMl3R6fToXfv3k3+u5OQkAB3d3cEBwfjmWeewY0bN+QuqV5lZ2cDAFxdXQEAR44cQUlJieS70r59e/j5+TWp78qd+6XChg0b0LJlS3Tu3BnR0dHIz8+XozxZGAwGxMfHIy8vD2FhYfyuoOo+qdCUvyfVaXK/FVsb169fh8FggIeHh6Tdw8MDf/75p0xVya93795Yt24dgoODkZGRgTfeeAP9+/fHqVOn4OTkJHd5DUJmZiYAmP3uVCxrioYNG4ZHH30UAQEBSE1Nxcsvv4zhw4fj4MGDUKvVcpdndUajETNnzkS/fv3QuXNnAGXfFY1Gg+bNm0v6NqXvirn9AgATJkxA69at4e3tjRMnTuDFF19EUlIS/ve//8lYrfWdPHkSYWFhKCwshKOjI7Zs2YKOHTsiMTGxyX5XqtsnQNP9ntwNgx3V2vDhw02vQ0JC0Lt3b7Ru3RpffvkloqKiZKyMGrp//vOfptddunRBSEgI2rZti4SEBAwaNEjGyurH9OnTcerUqSZ5TmpNqtsvTz31lOl1ly5d4OXlhUGDBiE1NRVt27at7zLrTXBwMBITE5GdnY2vv/4aTz75JPbu3St3WbKqbp907NixyX5P7oaHYs1o2bIl1Gp1lSuOrly5Ak9PT5mqaniaN2+Odu3aISUlRe5SGoyK7we/OzVr06YNWrZs2SS+OzNmzMB3332HPXv2oFWrVqZ2T09PFBcX49atW5L+TeW7Ut1+Mad3794AoPjvi0ajQWBgILp3746YmBh07doVy5cvb9Lfler2iTlN5XtyNwx2Zmg0GnTv3h27du0ytRmNRuzatUtybL+py83NRWpqKry8vOQupcEICAiAp6en5Luj1+tx6NAhfncq+euvv3Djxg1Ff3dEUcSMGTOwZcsW7N69GwEBAZLl3bt3h62treS7kpSUhPT0dEV/V+62X8xJTEwEAEV/X8wxGo0oKipqst8Vcyr2iTlN9XtShdxXbzRU8fHxolarFdetWyeeOXNGfOqpp8TmzZuLmZmZcpcmmzlz5ogJCQnihQsXxP3794sRERFiy5YtxatXr8pdWr3KyckRjx07Jh47dkwEIL733nvisWPHxIsXL4qiKIqLFi0SmzdvLm7btk08ceKEOGbMGDEgIEAsKCiQuXLrqWmf5OTkiHPnzhUPHjwoXrhwQfz555/FBx54QAwKChILCwvlLt1qnnnmGVGn04kJCQliRkaG6ZGfn2/q8/TTT4t+fn7i7t27xcOHD4thYWFiWFiYjFVb3932S0pKivjmm2+Khw8fFi9cuCBu27ZNbNOmjfjQQw/JXLl1vfTSS+LevXvFCxcuiCdOnBBfeuklURAE8aeffhJFsWl+V2raJ031e1IbDHY1+Oijj0Q/Pz9Ro9GIvXr1En/77Te5S5LVuHHjRC8vL1Gj0Yg+Pj7iuHHjxJSUFLnLqnd79uwRAVR5PPnkk6Iolt3yZMGCBaKHh4eo1WrFQYMGiUlJSfIWbWU17ZP8/HxxyJAhopubm2hrayu2bt1anDZtmuL/kWRufwAQ165da+pTUFAgPvvss6KLi4vo4OAgPvLII2JGRoZ8RdeDu+2X9PR08aGHHhJdXV1FrVYrBgYGivPmzROzs7PlLdzKpkyZIrZu3VrUaDSim5ubOGjQIFOoE8Wm+V2paZ801e9JbQiiKIr1Nz9IRERERNbCc+yIiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIiIiIFILBjoiIiEghGOyIqMkKDw/HzJkz5S7D5F7ruXHjBtzd3ZGWlmbxmu70z3/+E8uWLbP6dojo3jDYEZFVrV69Gk5OTigtLTW15ebmwtbWFuHh4ZK+CQkJEAQBqamp9Vxl/bJ0oHz77bcxZswY+Pv7W2zM6rz66qt4++23kZ2dbfVtEVHdMdgRkVUNHDgQubm5OHz4sKlt37598PT0xKFDh1BYWGhq37NnD/z8/NC2bVs5Sm2U8vPzERsbi6ioqHrZXufOndG2bVt8/vnn9bI9IqobBjsisqrg4GB4eXkhISHB1JaQkIAxY8YgICAAv/32m6R94MCBAIAffvgBDz74IJo3b44WLVpg1KhRkpm8NWvWwNvbG0ajUbK9MWPGYMqUKQAAo9GImJgYBAQEwN7eHl27dsXXX39dba216R8eHo7nn38e8+fPh6urKzw9PfH6669L+uTk5GDixIlo1qwZvLy88P7775tm6SIjI7F3714sX74cgiBAEATJIVSj0Vjj2Hfavn07tFot+vTpI2n/9ddfYWtrKwnOaWlpEAQBFy9eNL3evHkzHnroIdjb26Nnz55IT0/Hvn370KdPHzg4OGDQoEG4deuWZOzRo0cjPj6+xrqISB4MdkRkdQMHDsSePXtM7/fs2YPw8HAMGDDA1F5QUIBDhw6Zgl1eXh5mz56Nw4cPY9euXVCpVHjkkUdMQe7xxx/HjRs3JOPevHkTP/zwAyZOnAgAiImJwWeffYbVq1fj9OnTmDVrFv71r39h7969Zuusbf/169ejWbNmOHToEN599128+eab2Llzp2n57NmzsX//fnzzzTfYuXMn9u3bh6NHjwIAli9fjrCwMEybNg0ZGRnIyMiAr69vrce+0759+9C9e/cq7YmJiejQoQPs7OxMbceOHYOLiwtat26N48ePAwBWrVqFd955BwcOHMCVK1fwr3/9C4sWLcKKFSuwZ88eHD9+HGvXrpWM3atXL/z+++8oKiqqti4ikoeN3AUQkfINHDgQM2fORGlpKQoKCnDs2DEMGDAAJSUlWL16NQDg4MGDKCoqMgW7xx57TDJGXFwc3NzccObMGXTu3BkuLi4YPnw4Nm7ciEGDBgEAvv76a7Rs2RIDBw5EUVER3nnnHfz8888ICwsDALRp0wa//vorPv74YwwYMEAyfl36h4SEYOHChQCAoKAgrFixArt27cLgwYORk5OD9evXS+pau3YtvL29AQA6nQ4ajQYODg7w9PSssq9qGtucixcvmsau7Pjx4wgNDZW0JSYmomvXrqbXrq6u+OKLL9CiRQsAwIABA/Drr7/i9OnTcHBwAAD07NkTmZmZknG8vb1RXFyMzMxMtG7d2mxdRCQPztgRkdWFh4cjLy8Pf/zxB/bt24d27drBzc0NAwYMMJ1nl5CQgDZt2sDPzw8AkJycjPHjx6NNmzZwdnY2XRiQnp5uGnfixInYvHmzaeZow4YN+Oc//wmVSoWUlBTk5+dj8ODBcHR0ND0+++wzsxdn1KV/SEiI5L2XlxeuXr0KADh//jxKSkrQq1cv03KdTofg4OBa7auaxjanoKBAMitXITExEd26dZO0HTt2zNR2/PhxPPLII6ZQB5Tt23HjxplCXUVbQECAZBx7e3sAZef3EVHDwhk7IrK6wMBAtGrVCnv27EFWVpZp9svb2xu+vr44cOAA9uzZg4cffti0zujRo9G6dWt88sknpnPpOnfujOLiYkkfURTx/fffo2fPnti3bx/ef/99AGVX3gLA999/Dx8fH0k9Wq22So116W9rayt5LwhClXP97lVdx27ZsiWysrIkbQaDAadOnaoyY3f06FHTTGhiYiKio6Mly48fP45Zs2aZ3hcWFiIpKck0y1fh5s2bAAA3N7dafioiqi8MdkRULwYOHIiEhARkZWVh3rx5pvaHHnoIO3bswO+//45nnnkGQNl92ZKSkvDJJ5+gf//+AMouBriTnZ0dHn30UWzYsAEpKSkIDg7GAw88AADo2LEjtFot0tPTqxx2Naeu/avTpk0b2Nra4o8//jDNPmZnZ+PcuXN46KGHAAAajQYGg+Get1FZaGholStUk5KSUFhYKDlEe/DgQfz999/o1q0b9Ho90tLSJMHvwoULyM7OlrSdPHkSoiiiS5cukvFPnTqFVq1aoWXLlhb5DERkOQx2RFQvBg4ciOnTp6OkpEQSnAYMGIAZM2aguLjYdH6di4sLWrRogTVr1sDLywvp6el46aWXzI47ceJEjBo1CqdPn8a//vUvU7uTkxPmzp2LWbNmwWg04sEHH0R2djb2798PZ2dnPPnkk5Jx6tq/Ok5OTnjyyScxb948uLq6wt3dHQsXLoRKpYIgCAAAf39/HDp0CGlpaXB0dISrqytUqns7M2bo0KGIjo5GVlYWXFxcAJTNxgHARx99hOeffx4pKSl4/vnnAQDFxcU4fvw41Go1OnfubBqn4py7yufMJSYmom3btnB0dJRsc9++fRgyZMg91UtE1sVz7IioXgwcOBAFBQUIDAyEh4eHqX3AgAHIyckx3RYFAFQqFeLj43HkyBF07twZs2bNwpIlS8yO+/DDD8PV1RVJSUmYMGGCZNlbb72FBQsWICYmBh06dMCwYcPw/fffVzln7F77V+e9995DWFgYRo0ahYiICPTr109yhercuXOhVqvRsWNHuLm5Sc4brKsuXbrggQcewJdffmlqS0xMxNChQ3H+/Hl06dIFr7zyCt544w04Ozvjww8/xPHjxxEcHCw5N8/cxRbHjx+vchi2sLAQW7duxbRp0+65ZiKyHkEURVHuIoiIlCwvLw8+Pj5YtmyZVW4k/P3332PevHk4deoUVCoVhg4dip49e+L//b//Z/FtrVq1Clu2bMFPP/1k8bGJ6P7xUCwRkYUdO3YMf/75J3r16oXs7Gy8+eabAMpunmwNI0eORHJyMv7++2/4+vri+PHjpps0W5qtrS0++ugjq4xNRPePM3ZERBZ27NgxTJ06FUlJSdBoNOjevTvee++9KhchWENmZia8vLxw+vRpdOzY0erbI6KGhcGOiIiISCF48QQRERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQjDYERERESkEgx0RERGRQvz/9UxbZThd/OIAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitter_stable.plot(medium)\n", "plt.show()\n" ] }, { "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. The lower and upper bound can be set with `bound_f_lower` and `bound_f`, respectively.\n", "\n", "- The fitting tool performs global optimizations with random starting coefficients. By default, the value of the seed `rand_seed=0` is fixed, so that you'll obtain identical results when re-running the fitter. If you want to re-run the fitter several times to obtain the best results, the value of the seed should be changed, or set to `None` so that the starting coefficients are different each time. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.9.7" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "656d743981e6402790576f6cb79ceeac": { "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_9d9258be40c0402bb97ad50ba26c4aa3", "msg_id": "", "outputs": [ { "data": { "text/html": "
best RMS error so far: 9.95e-02 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2578  99% 0:00:01\n
\n", "text/plain": "best RMS error so far: 9.95e-02 \u001b[38;2;249;38;114m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m\u001b[38;2;249;38;114m\u2578\u001b[0m \u001b[35m 99%\u001b[0m \u001b[36m0:00:01\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "7f86787881cf46048f423fa6beb771a8": { "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_a925658d3863451c818fa34ceaf77a63", "msg_id": "", "outputs": [ { "data": { "text/html": "
best RMS error so far: 2.88e-02 \u2578\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501   2% -:--:--\n
\n", "text/plain": "best RMS error so far: 2.88e-02 \u001b[38;2;249;38;114m\u2578\u001b[0m\u001b[38;5;237m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[35m 2%\u001b[0m \u001b[36m-:--:--\u001b[0m\n" }, "metadata": {}, "output_type": "display_data" } ] } }, "9d9258be40c0402bb97ad50ba26c4aa3": { "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 } }, "a925658d3863451c818fa34ceaf77a63": { "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 } }, "ce4227e7facf437e80094dc0756636f3": { "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 } }, "f9ac955cc72d4c8d89c03221deaa5316": { "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_ce4227e7facf437e80094dc0756636f3", "msg_id": "", "outputs": [ { "data": { "text/html": "
Fitting with 1 to RMS of 0.02... \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501   0% -:--:--\n
\n", "text/plain": "Fitting with 1 to RMS of 0.02... \u001b[38;5;237m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\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 }