{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Self-intersecting PolySlab\n", "\n", "This tutorial shows how to use the `ComplexPolySlab` plugin in tidy3d to deal with self-intersecting polygon that occurs during extrusion in a slanted polyslab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:14.123659Z", "iopub.status.busy": "2023-03-27T21:58:14.123431Z", "iopub.status.idle": "2023-03-27T21:58:15.584351Z", "shell.execute_reply": "2023-03-27T21:58:15.583778Z" }, "scrolled": false, "tags": [] }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import gdstk\n", "\n", "import tidy3d as td\n", "\n", "from tidy3d.plugins.polyslab import ComplexPolySlab\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 1: concave polygon on the top with positive sidewall angle\n", "\n", "Let's consider a concave polygon as shown in the following figure. As we dilate the polygon, the length of the edge in the middle will approach 0, and the two vertices at the end of the edge can be degenerate. Further dilation will result in a self-intersecting polygon. The collapsing of the two neighboring vertices is known as one type of edge events. There are other types of edge events as well, while our plugin at the moment will focus on this type of edge event." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:15.587605Z", "iopub.status.busy": "2023-03-27T21:58:15.587270Z", "iopub.status.idle": "2023-03-27T21:58:15.952262Z", "shell.execute_reply": "2023-03-27T21:58:15.951687Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAHWCAYAAAAsM2MeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4w0lEQVR4nO3deVzVZd7/8TegHDAF9FZAlMKl3LdAGSzHFhLLsZxpRjNz4Zc6ubRxt0g64jJJi5lNuTxqMrubXLvT3HJDyVzSQp2xXMrUVBTUHDmIBsq5fn90e6YTO1/hcOD1fDzO49G5znV9z+cc87y9Puf7BS9jjBEAACg3b3cXAACApyNMAQCwiDAFAMAiwhQAAIsIUwAALCJMAQCwiDAFAMAiwhQAAIsIUwAALCJMgRokNTVVXl5eSk1NdXcpQLVCmALV0OzZszV//nx3l1EuCxYs0MyZM91dhiTJ4XDolVdeUbNmzeTn56eOHTtq4cKFpVo7f/58eXl5FXrLyMgoMH/FihW69dZb5efnpxtvvFFJSUm6evXq9X5JqCC13F0AgOtv9uzZatiwoYYNG+Yy/tvf/laXL1+Wr6+veworhQULFujrr7/WU0895e5SNH78eL300ksaMWKEunbtqk8++UQPP/ywvLy89NBDD5XqGFOmTFGzZs1cxoKCglzuf/rpp+rXr5/uuOMOvfnmm9q3b5/++te/6syZM5ozZ871ejmoQIQpqq2cnBzdcMMN7i6jSvH29pafn5+7y/AI6enpeu211zRmzBi99dZbkqThw4erZ8+eevbZZ/WnP/1JPj4+JR7n3nvvVVRUVLFznnnmGXXs2FHr169XrVo/fywHBARo2rRpevLJJ9W6dWvrLwgVijYvPEJ6eroeffRRhYWFyWazqVmzZho1apTy8vIk/ael9tlnn2n06NEKDg5W06ZNnetnz56tdu3ayWazKSwsTGPGjNGFCxdcnuO7777Tgw8+qNDQUPn5+alp06Z66KGHlJWV5ZyzYcMG3X777QoKClLdunXVqlUrvfDCCyXWX5p1ubm5SkpKUsuWLWWz2RQeHq7nnntOubm5BY73j3/8Q926dVOdOnVUv359/fa3v9X69eslSREREfrmm2/02WefOduKd9xxh6SivzNdunSpIiMj5e/vr4YNG+qRRx5Renq6y5xhw4apbt26Sk9PV79+/VS3bl01atRIzzzzjPLz80t8Dz755BP16dPH+WfYokULTZ061WXtHXfcodWrV+uHH35w1h4REVHkMYcNG1ZkK3XSpEkl1lRSvVeuXNHo0aOdY15eXho1apROnjypHTt2lPpY2dnZRb5H+/fv1/79+zVy5EhnkErS6NGjZYzRRx99VP4XgUrDzhRV3qlTp9StWzdduHBBI0eOVOvWrZWenq6PPvpIly5dcmlZjh49Wo0aNdLEiROVk5MjSZo0aZImT56s2NhYjRo1SocOHdKcOXP05Zdfatu2bapdu7by8vIUFxen3NxcPf744woNDVV6erpWrVqlCxcuKDAwUN98841+97vfqWPHjpoyZYpsNpsOHz6sbdu2FVt/adY5HA7df//92rp1q0aOHKk2bdpo3759ev311/Xtt99q+fLlzrmTJ0/WpEmT1L17d02ZMkW+vr7auXOnNm3apF69emnmzJl6/PHHVbduXY0fP16SFBISUmR98+fPV3x8vLp27ark5GRlZmbqjTfe0LZt27Rnzx6XlmR+fr7i4uIUHR2t6dOna+PGjXrttdfUokULjRo1qtj3Yf78+apbt64SEhJUt25dbdq0SRMnTpTdbterr74q6ee2alZWlk6ePKnXX39dklS3bt0ij/nnP/9ZsbGxLmNr167Vhx9+qODgYOfYuXPniq3tmnr16slms0mS9uzZoxtuuEFt2rRxmdOtWzfn47fffnuJx7zzzjt18eJF+fr6Ki4uTq+99ppuvvlm5+N79uyRpAK717CwMDVt2tT5OKo4A1RxQ4YMMd7e3ubLL78s8JjD4TDGGPPee+8ZSeb22283V69edT5+5swZ4+vra3r16mXy8/Od42+99ZaRZObNm2eMMWbPnj1Gklm6dGmRdbz++utGkjl79myZ6i/Nug8++MB4e3ubzz//3GV87ty5RpLZtm2bMcaY7777znh7e5vf//73Lq/HmP+8F8YY065dO9OzZ88Cz7N582YjyWzevNkYY0xeXp4JDg427du3N5cvX3bOW7VqlZFkJk6c6BwbOnSokWSmTJnicswuXbqYyMjI4t8EY8ylS5cKjP35z382derUMT/99JNzrE+fPuamm24q8XiF+e6770xgYKC55557XP4/kFSq23vvvedSR/PmzQs8R05OjpFkxo0bV2wtixcvNsOGDTPvv/++WbZsmZkwYYKpU6eOadiwoTl+/Lhz3quvvmokuYxd07VrV/Ob3/ymHO8EKhttXlRpDodDy5cvV9++fQv93snLy8vl/ogRI1y+x9q4caPy8vL01FNPydvb22VeQECAVq9eLUkKDAyUJK1bt06XLl0qtJZrO7RPPvlEDoej1K+hNOuWLl2qNm3aqHXr1jp37pzzdtddd0mSNm/eLElavny5HA6HJk6c6PJ6pILvRWl89dVXOnPmjEaPHu3yXWqfPn3UunVr5/vzS4899pjL/R49eujIkSMlPpe/v7/zv7Ozs3Xu3Dn16NFDly5d0sGDB8tc+6/l5OTo97//verXr6+FCxe6/H+wYcOGUt3i4uKcay5fvuzcpf7Stffp8uXLxdbTv39/vffeexoyZIj69eunqVOnat26dfrxxx/14osvujyPpCKfq6TnQdVAmxdV2tmzZ2W329W+fftSzf/1WZM//PCDJKlVq1Yu476+vmrevLnz8WbNmikhIUEzZszQhx9+qB49euj+++/XI4884gzaAQMG6O9//7uGDx+ucePG6e6779Yf/vAH/fGPfywQbL9UmnXfffedDhw4oEaNGhV6jDNnzkiSvv/+e3l7e6tt27alej9KUtT7I0mtW7fW1q1bXcb8/PwK1Fi/fn39+9//LvG5vvnmG02YMEGbNm2S3W53eeyX30uX14gRI/T9999r+/bt+q//+i+Xx37dCi4Nf3//Qr+v/umnn5yPl9Xtt9+u6Ohobdy40eV5JBX5XOV5HlQ+whTVipUPntdee03Dhg3TJ598ovXr1+uJJ55QcnKyvvjiCzVt2lT+/v7asmWLNm/erNWrV2vt2rVavHix7rrrLq1fv77IMztLs87hcKhDhw6aMWNGoccIDw8v9+u6nkpz9mphLly4oJ49eyogIEBTpkxRixYt5Ofnp927d+v5558v006/MG+88YYWLlyof/zjH+rcuXOBxwu7rrMwgYGBzv+HGjdurM2bN8sY47LrP336tKSfv9Msj/DwcB06dMh5v3Hjxs7j/vrP+fTp087vaFG10eZFldaoUSMFBATo66+/Ltf6m266SZJcPrwkKS8vT0ePHnU+fk2HDh00YcIEbdmyRZ9//rnS09M1d+5c5+Pe3t66++67NWPGDO3fv18vvviiNm3a5GzDFqWkdS1atND58+d19913KzY2tsDt2s6xRYsWcjgc2r9/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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vertices = (\n", " (0, 0),\n", " (1, 0),\n", " (1, 1),\n", " (0, 1),\n", " (0, 0.8),\n", " (0.5, 0.65),\n", " (0.5, 0.35),\n", " (0, 0.2),\n", ")\n", "s = td.PolySlab(\n", " vertices=vertices,\n", " slab_bounds=(0, 1),\n", " axis=2,\n", " sidewall_angle=0,\n", " reference_plane=\"top\",\n", ")\n", "s.plot(z=0.5)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For a slanted polyslab where this polygon is at the top, self-intersection can occur as the polygon is extruded to the base when the sidewall angle is large. Since `td.PolySlab` only deals with simple polyslab, an error message will be displayed in this case." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:15.954472Z", "iopub.status.busy": "2023-03-27T21:58:15.954305Z", "iopub.status.idle": "2023-03-27T21:58:15.976994Z", "shell.execute_reply": "2023-03-27T21:58:15.976461Z" } }, "outputs": [ { "data": { "text/html": [ "
[15:54:37] ERROR: Sidewall angle or structure thickness is so large that the        log.py:50\n",
       "           polygon is self-intersecting during extrusion. Please either reduce               \n",
       "           structure thickness to be < 2.016e-01, or use our plugin                          \n",
       "           'ComplexPolySlab' to divide the complex polyslab into a list of simple            \n",
       "           polyslabs.                                                                        \n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[15:54:37]\u001b[0m\u001b[2;36m \u001b[0mERROR: Sidewall angle or structure thickness is so large that the \u001b]8;id=30885;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=423555;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[0mpolygon is self-intersecting during extrusion. Please either reduce \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0mstructure thickness to be < \u001b[1;36m2.016e-01\u001b[0m, or use our plugin \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0m\u001b[32m'ComplexPolySlab'\u001b[0m to divide the complex polyslab into a list of simple \u001b[2m \u001b[0m\n", "\u001b[2;36m \u001b[0mpolyslabs. \u001b[2m \u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sidewall_angle = np.pi / 4\n", "try:\n", " s = td.PolySlab(\n", " vertices=vertices,\n", " slab_bounds=(0, 1),\n", " axis=2,\n", " sidewall_angle=sidewall_angle,\n", " reference_plane=\"top\",\n", " )\n", "except Exception as e:\n", " pass\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dividing a complex polyslab into sub-polyslabs\n", "\n", "The plugin `ComplexPolySlab` can divide such a complex polyslab into a list of simple polyslabs. The procedure of setting up the object is the same as in `td.PolySlab`:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:15.979089Z", "iopub.status.busy": "2023-03-27T21:58:15.978933Z", "iopub.status.idle": "2023-03-27T21:58:15.998780Z", "shell.execute_reply": "2023-03-27T21:58:15.998204Z" } }, "outputs": [], "source": [ "s = ComplexPolySlab(\n", " vertices=vertices,\n", " slab_bounds=(0, 1),\n", " axis=2,\n", " sidewall_angle=sidewall_angle,\n", " reference_plane=\"top\",\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can obtain the division result in the form of a list of simple polyslabs, or combined into a `GeometryGroup`. As shown below, the entire polyslab will be divided into 3 simple polyslabsl" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:16.000890Z", "iopub.status.busy": "2023-03-27T21:58:16.000745Z", "iopub.status.idle": "2023-03-27T21:58:16.233439Z", "shell.execute_reply": "2023-03-27T21:58:16.232914Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The number of sub-polyslabs in the list is 3.\n", "The number of sub-polyslabs in geometry group is 3.\n" ] } ], "source": [ "# To obtain the divided polyslabs, there are two approaches:\n", "# 1) a list of divided polyslabs\n", "sub_polyslabs = s.sub_polyslabs\n", "\n", "# 2) geometry group containing the divided polyslabs\n", "polyslabs_group = s.geometry_group\n", "\n", "print(f\"The number of sub-polyslabs in the list is {len(sub_polyslabs)}.\")\n", "print(\n", " f\"The number of sub-polyslabs in geometry group is {len(polyslabs_group.geometries)}.\"\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define a simulation\n", "Now let's make a simple simulation with a `ComplexPolySlab` object." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:16.235508Z", "iopub.status.busy": "2023-03-27T21:58:16.235355Z", "iopub.status.idle": "2023-03-27T21:58:16.572814Z", "shell.execute_reply": "2023-03-27T21:58:16.572236Z" } }, "outputs": [], "source": [ "mat = td.Medium(permittivity=2)\n", "\n", "# Three equivalent approaches\n", "# 1) from sub-polyslabs\n", "struct_list = [td.Structure(geometry=poly, medium=mat) for poly in s.sub_polyslabs]\n", "\n", "# 2) from geometry group\n", "struct_list = [td.Structure(geometry=s.geometry_group, medium=mat)]\n", "\n", "# 3) directly obtain the structure with a user-specified medium\n", "struct_list = [s.to_structure(mat)]\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:16.575059Z", "iopub.status.busy": "2023-03-27T21:58:16.574907Z", "iopub.status.idle": "2023-03-27T21:58:16.604210Z", "shell.execute_reply": "2023-03-27T21:58:16.603603Z" } }, "outputs": [ { "data": { "text/html": [ "
[15:54:38] WARNING: No sources in simulation.                                       log.py:50\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m[15:54:38]\u001b[0m\u001b[2;36m \u001b[0mWARNING: No sources in simulation. \u001b]8;id=662824;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=645751;file:///home/weiliang/Documents/tidy3d-core/tidy3d_frontend/tidy3d/log.py#50\u001b\\\u001b[2m50\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sim = td.Simulation(\n", " run_time=1e-12,\n", " size=(4, 4, 2),\n", " center=(0.5, 0.5, 0.5),\n", " grid_spec=td.GridSpec.auto(wavelength=1.0),\n", " structures=struct_list,\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: Tidy3D is warning us that our Simulation does not contain sources. In this case, since we are using the simulation as a demonstration and are not running any simulations, we may safely ignore this warning throughout this notebook." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualization\n", "\n", "Three characteristic normal cross sections are illustrated below. The polygon near the top looks similar to the supplied polygon. Somewhere between $z=0.75$ $\\mu$m and $z=0.95$ $\\mu$m, a vertex-vertex crossing event happens, and the shape of the polygon changes. Between $z=0.75$ $\\mu$m and $z=0.5$ $\\mu$m, another event occurs, and the shape evolves to a simple box." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:16.607357Z", "iopub.status.busy": "2023-03-27T21:58:16.607176Z", "iopub.status.idle": "2023-03-27T21:58:17.164897Z", "shell.execute_reply": "2023-03-27T21:58:17.164266Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAEaCAYAAACM48H1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABgZklEQVR4nO3deZRcZZ0//ndV19Kd6qWKTjckJEACsstiCAybgCKrLOOAKA6yKAIGHQg/GSIeGHAgKAg4CmGcEfAgIOgcwEEUwhoFUVZPyLAqSMhCupqq7nR1urb7/P7o71Nb13KX5y5V9/06pw+ku6rr9v3c+7mfz12eJyCEECAiIiIiIrIg6PYCEBERERFR+2NjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsiIiIiIjIMjYWRERERERkGRsLIiIiIiKyjI0FERERERFZxsaCiIiIiIgsY2NBlj399NMIBAJ4+umn3V4UIvII5gUiqsSc4A9sLEi3W2+9FXfeeafbi2HKPffcg5tvvtntxQAAaJqG73//+1iwYAG6u7ux11574d5779X9/pUrV+KQQw7BrFmzkEgkcMopp+C9996b8boddtgBgUBgxtf555+v8K8hv2NeUMNKXjj88MPr7uuBQADhcLjqtcwLZDfmBDWs5IQ777yzYU7YuHHjjNf/+te/xic+8Ql0d3dju+22w5VXXolCoWBquQNCCGHqneQ7e+65J2bPnj3jbIOmacjlcohEIggGvdmrfvazn8Vrr71WtwB32rJly3Ddddfh3HPPxeLFi/HQQw/hN7/5De6991584QtfaPrehx9+GCeddBI+8YlP4IwzzsD4+Dh++MMfIhqN4pVXXsHQ0FDptTvssAMSiQQuueSSqt+x8847Y//997flbyP/YV5Qw0peWLlyJT788MOq72UyGZx//vk47rjj8Jvf/Kb0feYFshtzghpWcsKdd96Js88+G1dffTUWLFhQ9bNTTjkF3d3dpX//9re/xfHHH4/DDz8cX/ziF7F69Wrccsst+NrXvoYVK1YYX3BBhkxMTLi9CK7ZY489xGGHHeb2Yphy/PHHi+23397txRAffPCBCIfDYsmSJaXvaZomDj30UDFv3jxRKBSavn/33XcXO+20k8hms6XvvfrqqyIYDIqlS5dWvXb77bcXxx9/vNo/gOpiXjjM7cUwpVPyQj133XWXACDuvvvuqu8zLziDOeEwtxfDlE7JCXfccYcAIF544YWWn7X77ruLvffeW+Tz+dL3Lr/8chEIBMTrr79ueNl93Vh88MEH4pxzzhFz5swRkUhE7LDDDuL8888vFW0yME8//bS44IILxNDQkIjH46X333LLLWL33XcXkUhEzJkzR3z9618XqVSq6jPeeust8bnPfU5svfXWIhqNim233VacdtppIp1Ol17z2GOPiYMPPlgMDAyIWCwmdt55Z7Fs2bKWy6/nfVNTU+KKK64QO+64o4hEImLevHniW9/6lpiamprx++666y6xePFi0dPTI+LxuDj00EPFo48+KoSYPhgBqPqSieOpp54SAMRTTz1V9fvuv/9+8YlPfEJ0d3eLwcFB8aUvfUl88MEHVa8588wzRSwWEx988IE46aSTRCwWE7NnzxaXXHKJroPpgw8+KI477rhSDBcuXCiuvvrqqvcedthhM5a9WeI488wzZ7xefl155ZUtl6mZW265RQAQa9asqfr+PffcIwCI3//+9w3fOzo6KgCIb33rWzN+tscee4i5c+dWfU8WENls1tcHOaOYF6oxL5SXyYt5oZFjjz1WxGKxGfs+84JxzAnVmBPKy+TVnFDZWIyPjzdcR2vWrBEAxC233FL1/XXr1gkA4rvf/a7hZQ8Zv8bRGdavX4/9998f6XQaX/va17Drrrti3bp1+NWvfoXJyUlEIpHSa7/+9a9jaGgIV1xxBTKZDADg3/7t33DVVVfhyCOPxAUXXIA333wTK1aswAsvvIBnn30W4XAYuVwORx99NLLZLL7xjW9gm222wbp16/Dwww8jnU5jYGAAa9aswWc/+1nstddeuPrqqxGNRvHOO+/g2Wefbbr8et6naRpOPPFE/OEPf8DXvvY17Lbbbli9ejVuuukmvPXWW3jwwQdLr73qqqvwb//2bzjooINw9dVXIxKJ4E9/+hOefPJJHHXUUbj55pvxjW98A729vbj88ssBAFtvvXXD5ZOX4RYvXozly5fjww8/xA9/+EM8++yzeOWVVxCPx0uvLRaLOProo3HAAQfghhtuwOOPP44f/OAH2HHHHXHBBRc0XQ933nknent7sXTpUvT29uLJJ5/EFVdcgfHxcVx//fUAgMsvvxxjY2P44IMPcNNNNwEAent7G/7O8847D0ceeWTV9373u9/h7rvvxvDwcOl7yWSy6bJJfX19iEajAIBXXnkFsVgMu+22W9Vr5C0Ir7zyCg455JC6vyebzQIAenp6Zvxs1qxZWLNmDTZu3Ihtttmm9P0nn3wSs2bNQrFYxPbbb4+LL74Y//Iv/6Jruf2IeYF5oRGv5oV6RkZGsHLlSpx22mmIxWIzfs68oB9zAnNCI+2QE4444ghMTEwgEong6KOPxg9+8AN87GMfK/38lVdeAQDst99+Ve+bO3cu5s2bV/q5IYZbkQ7x5S9/WQSDwbqXiTRNE0KUO75DDjmkqtvbtGmTiEQi4qijjhLFYrH0/R//+McCgLj99tuFEEK88sorAoD45S9/2XA5brrpJgFAjIyMGFp+Pe+76667RDAYnNHZ3nbbbQKAePbZZ4UQQrz99tsiGAyKf/zHf6z6e4QorwshGl/erD0LkcvlxPDwsNhzzz3Fli1bSq97+OGHBQBxxRVXlL4nO/6rr7666nfuu+++YtGiRc1XghBicnJyxvfOO+88MWvWrKozLVYub7799ttiYGBAfOYzn6naDtDgTEXt1x133FG1HAsXLpzxGZlMRgAQl112WcPlKBaLIh6Pi09/+tNV308mkyIWiwkA4sUXXyx9/4QTThDf+973xIMPPih++tOfikMPPVQAEJdeeqmp9eAHzAvMC3p5JS/U86Mf/UgAEI888siMnzEvGMOcwJygl5dywn333SfOOuss8bOf/Uw88MAD4jvf+Y6YNWuWmD17tnj//fdLr7v++usFgKrvSYsXLxb/8A//YHg9ePPpGZtpmoYHH3wQJ5xwwowuDQACgUDVv88991x0dXWV/v34448jl8vhoosuqnoA6dxzz0V/f3/pQbmBgQEAwKOPPorJycm6yyK78Yceegiapun+G/S875e//CV222037Lrrrkgmk6WvT33qUwCAp556CgDw4IMPQtM0XHHFFTMeqKpdF3q8+OKL2LRpE77+9a9XPSB0/PHHY9ddd616kFCqHZHk0EMPxd/+9reWn1V59n7z5s1IJpM49NBDMTk5iTfeeMPwstfKZDL4x3/8RyQSCdx7771V28HKlSt1fR199NGl92zZsqV0RqKSXE9btmxpuCzBYBDnnXcennjiCSxbtgxvv/02XnrpJXz+859HLpeb8f5f//rXuPTSS3HSSSfhnHPOwTPPPIOjjz4aN954Iz744APL66bTMC8wL+jlpbxQzz333IOhoSF85jOfmfEz5gX9mBOYE/TyWk74/Oc/jzvuuANf/vKXcfLJJ+O73/0uHn30UYyOjuKaa66p+hwADT/LaO4BAF/eCjUyMoLx8XHsueeeul5f+0T93//+dwDALrvsUvX9SCSChQsXln6+YMECLF26FDfeeCPuvvtuHHrooTjxxBPxz//8z6VEctppp+G///u/8dWvfhWXXXYZPv3pT+Nzn/scTjnllKajJuh539tvv43XX3+9aqSgSps2bQIA/PWvf0UwGMTuu++ua3200mj9AMCuu+6KP/zhD1Xf6+7unrGMiUQCqVSq5WetWbMG3/nOd/Dkk09ifHy86mdjY2NGF32Gc889F3/961/x3HPPYXBwsOpntZdA9ejp6Snd0lRpamqq9PNmrr76aiSTSXz/+9/HddddBwA46qij8JWvfAW33XZb08u2gUAAF198MR599FE8/fTT+Od//mfDy9/JmBemMS+05rW8UOlvf/sb/vjHP+LCCy9EKNT6EM+80BhzwjTmhNa8nBOkQw45BAcccAAef/zxqs8B0PCzzHyOLxsLo8ysWOkHP/gBzjrrLDz00EN47LHH8M1vfhPLly/H888/j3nz5qGnpwerVq3CU089hd/85jf43e9+h/vuuw+f+tSn8Nhjj1V1vbXL1Op9mqbh4x//OG688ca6v2P+/Pmm/y6VGv2NraTTaRx22GHo7+/H1VdfjR133BHd3d14+eWX8a//+q+GzurU88Mf/hD33nsvfv7zn2OfffaZ8fN6Y0HXMzAwUNqG5syZg6eeegpCiKozPBs2bAAwfV9jM5FIBP/93/+Na665Bm+99Ra23npr7Lzzzjj99NMRDAax0047NX2/jPlHH32ka9mpMeYFezEv6M8Lle655x4AwJe+9CXd72FeUIM5wV7MCeZyQqX58+fjzTffLP17zpw5pd9bG+cNGzaYG4La8M1THaBYLIr+/n5x0kknNX1do+G65FP5tfevZrNZMTAwIP7pn/6p4e989tlnBQBx+eWXN3zNNddcIwCIlStXtv5jmrzvuOOOE9tuu23VvY/1yHvsXnnllaav23PPPXXdN/ncc88JAOLWW2+d8drddtut6n5IOdJDrSuvvFK02jwfeOABAUA888wzVd//yU9+MmPkic9+9rOG7ptctWqVCIVC4qKLLmr4Gpi4b1LeW1s70sPdd98tAIhVq1bpXkapUCiIOXPmiAMPPLDla//3f/9XABD33HOP4c/pdMwL1ZgXZmqHvLDbbruJHXfcUffrhWBeaIQ5oRpzwkztkBMqLVq0SOy8886lf7/22msCaDwqVO0zLXr48hmLYDCIk08+Gf/7v/+LF198ccbPRYs5A4888khEIhH8x3/8R9Vrf/rTn2JsbAzHH388AGB8fHzGzIUf//jHEQwGS5ed6p0hkh1vvUtTkp73ff7zn8e6devwX//1XzNeu2XLltKoFSeffDKCwSCuvvrqGZ175d8Xi8WQTqcbLpO03377YXh4GLfddlvV3/Db3/4Wr7/+emn9WCXPXlQuYy6Xw6233jrjtbFYTPflzg0bNuDzn/88DjnkkNJoEfWYuW/ypJNOQjgcrlpGIQRuu+02bLvttjjooIOqluONN95APp9vurw33HADNmzYUDXh1UcffYRisVj1unw+j+uuuw6RSARHHHGErnXhJ8wLzAvNtENeeOWVV/D666/j9NNPr7tszAvGMCcwJzTj5ZwwMjIyYzkeeeQRvPTSSzjmmGNK39tjjz2w66674ic/+UlVblixYgUCgQBOOeUUXeuikm9vhbr22mvx2GOP4bDDDisNr7Zhwwb88pe/xB/+8IeqIc5qDQ0NYdmyZbjqqqtwzDHH4MQTT8Sbb76JW2+9FYsXLy7do/rkk0/iwgsvxKmnnoqdd94ZhUIBd911F7q6uvBP//RPAKbvmV+1ahWOP/54bL/99ti0aRNuvfVWzJs3r+lQYnred8YZZ+D+++/H+eefj6eeegoHH3wwisUi3njjDdx///149NFHsd9++2GnnXbC5Zdfju9+97s49NBD8bnPfQ7RaBQvvPAC5s6di+XLlwMAFi1ahBUrVuDf//3fsdNOO2F4eLj0cFelcDiM733vezj77LNx2GGH4Ytf/GJpCLkddtgBF198sdmwVTnooIOQSCRw5pln4pvf/CYCgQDuuuuuusl+0aJFuO+++7B06VIsXrwYvb29OOGEE+r+3m9+85sYGRnBpZdeil/84hdVP9trr72w1157ATB33+S8efNw0UUX4frrr0c+n8fixYvx4IMP4ve//z3uvvvuqku9y5Ytw89+9jO8++672GGHHQAAP//5z/E///M/+OQnP4ne3l48/vjjuP/++/HVr361tE0B0w9o/vu//ztOOeUULFiwAB999BHuuecevPbaa7j22murhqSlMuYF5oV2zAvS3XffDaDxbVDMC8YxJzAntGNOOOigg7Dvvvtiv/32w8DAAF5++WXcfvvtmD9/Pr797W9Xfdb111+PE088EUcddRS+8IUv4LXXXsOPf/xjfPWrX50x3K0uhq9xdJC///3v4stf/rIYGhoS0WhULFy4UCxZsmTGpDeNZi788Y9/LHbddVcRDofF1ltvLS644IKqSW/+9re/iXPOOUfsuOOOoru7W2y11VbiiCOOEI8//njpNU888YQ46aSTxNy5c0UkEhFz584VX/ziF8Vbb73VdNn1vi+Xy4nvfe97Yo899hDRaFQkEgmxaNEicdVVV4mxsbGq195+++1i3333Lb3usMMOq7rEunHjRnH88ceLvr4+AbSe9Oa+++4r/b6tttqq6aQ3tfRc3hRi+nLxP/zDP4ienh4xd+5ccemll4pHH310xvJMTEyI008/XcTjcQE0n/Sm3iQ58svqpDdCTF9ev/baa8X2228vIpGI2GOPPcTPf/7zGa+Tw+u9++67pe/96U9/Ep/85CdFIpEQ3d3dYu+99xa33XbbjEvYL774ojjhhBPEtttuKyKRiOjt7RWHHHKIuP/++y0vf6djXmBeqMfLeUG+f9tttxWf+MQnGn4G84I5zAnMCfV4OSdcfvnlYp999hEDAwMiHA6L7bbbTlxwwQVi48aNdT/rgQceEPvss4+IRqNi3rx54jvf+Y7I5XKmljsgRItreURERERERC348hkLIiIiIiJSi40FERERERFZxsaCiIiIiIgsY2NBRERERESWsbEgIiIiIiLL2FgQEREREZFlvpogT9M0rF+/Hn19fQgEAm4vDpHrhBDYvHkz5s6di2DQf+cZmBOIqvk9JwDMC0S1jOQFXzUW69evx/z5891eDCLPWbt2LebNm+f2YjiOOYGoPr/mBIB5gagRPXnBV41FX18fAODSSy9FT09P6fu5XK40tXskEnHkDIX8vNmzZyMcDiOXyyGdTgMA4vE4IpGI7ctQb5lGRkYAANFoFAMDA44vAwCMjY0hm80CAIaGhlw5Y2RnPPL5PJLJJAA0/duEEMjlcqXX2bFNbNmyBd///vdL+4bfNMoJ9TgRj9q8UE+n7x96dVK+0psTGikWiygUCgCAUCiErq4uw79D8ntOAIzlhXpU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CyIiIiIisoyNBRERERERWcbGgoiIiIiILGNjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsyDEjIyPYZpttcO2115a+99xzzyESieCJJ55wccmIyA3MCURUi3mhvQWEEMLthSD/eOSRR3DyySfjueeewy677IJ99tkHJ510Em688Ua3F42IXMCcQES1mBfaFxsLctySJUvw+OOPY7/99sPq1avxwgsvIBqNur1YROQS5gQiqsW80J7YWJDjtmzZgj333BNr167FSy+9hI9//ONuLxIRuYg5gYhqMS+0Jz5jQY7761//ivXr10PTNLz33ntuLw4RuYw5gYhqMS+0J16xIEflcjnsv//+2GeffbDLLrvg5ptvxurVqzE8POz2ohGRC5gTiKgW80L7YmNBjvrWt76FX/3qV/jLX/6C3t5eHHbYYRgYGMDDDz/s9qIRkQuYE4ioFvNC++KtUOSYp59+GjfffDPuuusu9Pf3IxgM4q677sLvf/97rFixwu3FIyKHMScQUS3mhfbGKxZERERERGQZr1gQEREREZFlbCyIiIiIiMgyNhZERERERGQZGwsiIiIiIrKMjQUREREREVnGxoKIiIiIiCxjY0FERERERJaxsSAiIiIiIsvYWBARERERkWVsLIiIiIiIyDI2FkREREREZNn/D9PCdYd07tFfAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 3, figsize=(8, 4), layout=\"tight\")\n", "sim.plot(z=0.95, ax=ax[0])\n", "sim.plot(z=0.75, ax=ax[1])\n", "sim.plot(z=0.5, ax=ax[2])\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example 2: GDS import\n", "Similar to `PolySlab`, a `ComplexPolySlab` can also be setup from a `gdstk.Cell`. To illustrate this, let's make a GDS cell with the aforementioned concave polygon, and load it with `.from_gds` classmethod." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:17.167391Z", "iopub.status.busy": "2023-03-27T21:58:17.167230Z", "iopub.status.idle": "2023-03-27T21:58:17.188160Z", "shell.execute_reply": "2023-03-27T21:58:17.187536Z" } }, "outputs": [], "source": [ "# add the concave polygon to the gds cell\n", "\n", "lib = gdstk.Library()\n", "cell = lib.new_cell(\"SI\")\n", "poly = gdstk.Polygon(vertices, layer=0)\n", "_ = cell.add(poly)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Loading a GDS cell into `ComplexPolySlab`" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:17.191033Z", "iopub.status.busy": "2023-03-27T21:58:17.190784Z", "iopub.status.idle": "2023-03-27T21:58:17.315676Z", "shell.execute_reply": "2023-03-27T21:58:17.315141Z" } }, "outputs": [], "source": [ "# obtain a list of polyslabs\n", "geo_list = ComplexPolySlab.from_gds(\n", " cell,\n", " gds_layer=0,\n", " axis=2,\n", " slab_bounds=(0, 1),\n", " sidewall_angle=np.pi / 4,\n", " reference_plane=\"top\",\n", ")\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:17.318250Z", "iopub.status.busy": "2023-03-27T21:58:17.318096Z", "iopub.status.idle": "2023-03-27T21:58:17.346758Z", "shell.execute_reply": "2023-03-27T21:58:17.346220Z" } }, "outputs": [ { "data": { "text/html": [ "
           WARNING: No sources in simulation.                                       log.py:50\n",
       "
\n" ], "text/plain": [ "\u001b[2;36m \u001b[0m\u001b[2;36m \u001b[0mWARNING: No sources in simulation. \u001b]8;id=532676;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=951333;file:///home/weiliang/Documents/tidy3d-core/tidy3d_frontend/tidy3d/log.py#50\u001b\\\u001b[2m50\u001b[0m\u001b]8;;\u001b\\\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "structure = td.Structure(\n", " geometry=td.GeometryGroup(geometries=geo_list),\n", " medium=mat,\n", ")\n", "\n", "sim = td.Simulation(\n", " run_time=1e-12,\n", " size=(4, 4, 2),\n", " center=(0.5, 0.5, 0.5),\n", " grid_spec=td.GridSpec.auto(wavelength=1.0),\n", " structures=[structure],\n", ")\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2023-03-27T21:58:17.348774Z", "iopub.status.busy": "2023-03-27T21:58:17.348605Z", "iopub.status.idle": "2023-03-27T21:58:17.947422Z", "shell.execute_reply": "2023-03-27T21:58:17.946886Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAEaCAYAAACM48H1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABgZklEQVR4nO3deZRcZZ0//ndV19Kd6qWKTjckJEACsstiCAybgCKrLOOAKA6yKAIGHQg/GSIeGHAgKAg4CmGcEfAgIOgcwEEUwhoFUVZPyLAqSMhCupqq7nR1urb7/P7o71Nb13KX5y5V9/06pw+ku6rr9v3c+7mfz12eJyCEECAiIiIiIrIg6PYCEBERERFR+2NjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsiIiIiIjIMjYWRERERERkGRsLIiIiIiKyjI0FERERERFZxsaCiIiIiIgsY2NBlj399NMIBAJ4+umn3V4UIvII5gUiqsSc4A9sLEi3W2+9FXfeeafbi2HKPffcg5tvvtntxQAAaJqG73//+1iwYAG6u7ux11574d5779X9/pUrV+KQQw7BrFmzkEgkcMopp+C9996b8boddtgBgUBgxtf555+v8K8hv2NeUMNKXjj88MPr7uuBQADhcLjqtcwLZDfmBDWs5IQ777yzYU7YuHHjjNf/+te/xic+8Ql0d3dju+22w5VXXolCoWBquQNCCGHqneQ7e+65J2bPnj3jbIOmacjlcohEIggGvdmrfvazn8Vrr71WtwB32rJly3Ddddfh3HPPxeLFi/HQQw/hN7/5De6991584QtfaPrehx9+GCeddBI+8YlP4IwzzsD4+Dh++MMfIhqN4pVXXsHQ0FDptTvssAMSiQQuueSSqt+x8847Y//997flbyP/YV5Qw0peWLlyJT788MOq72UyGZx//vk47rjj8Jvf/Kb0feYFshtzghpWcsKdd96Js88+G1dffTUWLFhQ9bNTTjkF3d3dpX//9re/xfHHH4/DDz8cX/ziF7F69Wrccsst+NrXvoYVK1YYX3BBhkxMTLi9CK7ZY489xGGHHeb2Yphy/PHHi+23397txRAffPCBCIfDYsmSJaXvaZomDj30UDFv3jxRKBSavn/33XcXO+20k8hms6XvvfrqqyIYDIqlS5dWvXb77bcXxx9/vNo/gOpiXjjM7cUwpVPyQj133XWXACDuvvvuqu8zLziDOeEwtxfDlE7JCXfccYcAIF544YWWn7X77ruLvffeW+Tz+dL3Lr/8chEIBMTrr79ueNl93Vh88MEH4pxzzhFz5swRkUhE7LDDDuL8888vFW0yME8//bS44IILxNDQkIjH46X333LLLWL33XcXkUhEzJkzR3z9618XqVSq6jPeeust8bnPfU5svfXWIhqNim233VacdtppIp1Ol17z2GOPiYMPPlgMDAyIWCwmdt55Z7Fs2bKWy6/nfVNTU+KKK64QO+64o4hEImLevHniW9/6lpiamprx++666y6xePFi0dPTI+LxuDj00EPFo48+KoSYPhgBqPqSieOpp54SAMRTTz1V9fvuv/9+8YlPfEJ0d3eLwcFB8aUvfUl88MEHVa8588wzRSwWEx988IE46aSTRCwWE7NnzxaXXHKJroPpgw8+KI477rhSDBcuXCiuvvrqqvcedthhM5a9WeI488wzZ7xefl155ZUtl6mZW265RQAQa9asqfr+PffcIwCI3//+9w3fOzo6KgCIb33rWzN+tscee4i5c+dWfU8WENls1tcHOaOYF6oxL5SXyYt5oZFjjz1WxGKxGfs+84JxzAnVmBPKy+TVnFDZWIyPjzdcR2vWrBEAxC233FL1/XXr1gkA4rvf/a7hZQ8Zv8bRGdavX4/9998f6XQaX/va17Drrrti3bp1+NWvfoXJyUlEIpHSa7/+9a9jaGgIV1xxBTKZDADg3/7t33DVVVfhyCOPxAUXXIA333wTK1aswAsvvIBnn30W4XAYuVwORx99NLLZLL7xjW9gm222wbp16/Dwww8jnU5jYGAAa9aswWc/+1nstddeuPrqqxGNRvHOO+/g2Wefbbr8et6naRpOPPFE/OEPf8DXvvY17Lbbbli9ejVuuukmvPXWW3jwwQdLr73qqqvwb//2bzjooINw9dVXIxKJ4E9/+hOefPJJHHXUUbj55pvxjW98A729vbj88ssBAFtvvXXD5ZOX4RYvXozly5fjww8/xA9/+EM8++yzeOWVVxCPx0uvLRaLOProo3HAAQfghhtuwOOPP44f/OAH2HHHHXHBBRc0XQ933nknent7sXTpUvT29uLJJ5/EFVdcgfHxcVx//fUAgMsvvxxjY2P44IMPcNNNNwEAent7G/7O8847D0ceeWTV9373u9/h7rvvxvDwcOl7yWSy6bJJfX19iEajAIBXXnkFsVgMu+22W9Vr5C0Ir7zyCg455JC6vyebzQIAenp6Zvxs1qxZWLNmDTZu3Ihtttmm9P0nn3wSs2bNQrFYxPbbb4+LL74Y//Iv/6Jruf2IeYF5oRGv5oV6RkZGsHLlSpx22mmIxWIzfs68oB9zAnNCI+2QE4444ghMTEwgEong6KOPxg9+8AN87GMfK/38lVdeAQDst99+Ve+bO3cu5s2bV/q5IYZbkQ7x5S9/WQSDwbqXiTRNE0KUO75DDjmkqtvbtGmTiEQi4qijjhLFYrH0/R//+McCgLj99tuFEEK88sorAoD45S9/2XA5brrpJgFAjIyMGFp+Pe+76667RDAYnNHZ3nbbbQKAePbZZ4UQQrz99tsiGAyKf/zHf6z6e4QorwshGl/erD0LkcvlxPDwsNhzzz3Fli1bSq97+OGHBQBxxRVXlL4nO/6rr7666nfuu+++YtGiRc1XghBicnJyxvfOO+88MWvWrKozLVYub7799ttiYGBAfOYzn6naDtDgTEXt1x133FG1HAsXLpzxGZlMRgAQl112WcPlKBaLIh6Pi09/+tNV308mkyIWiwkA4sUXXyx9/4QTThDf+973xIMPPih++tOfikMPPVQAEJdeeqmp9eAHzAvMC3p5JS/U86Mf/UgAEI888siMnzEvGMOcwJygl5dywn333SfOOuss8bOf/Uw88MAD4jvf+Y6YNWuWmD17tnj//fdLr7v++usFgKrvSYsXLxb/8A//YHg9ePPpGZtpmoYHH3wQJ5xwwowuDQACgUDVv88991x0dXWV/v34448jl8vhoosuqnoA6dxzz0V/f3/pQbmBgQEAwKOPPorJycm6yyK78Yceegiapun+G/S875e//CV222037Lrrrkgmk6WvT33qUwCAp556CgDw4IMPQtM0XHHFFTMeqKpdF3q8+OKL2LRpE77+9a9XPSB0/PHHY9ddd616kFCqHZHk0EMPxd/+9reWn1V59n7z5s1IJpM49NBDMTk5iTfeeMPwstfKZDL4x3/8RyQSCdx7771V28HKlSt1fR199NGl92zZsqV0RqKSXE9btmxpuCzBYBDnnXcennjiCSxbtgxvv/02XnrpJXz+859HLpeb8f5f//rXuPTSS3HSSSfhnHPOwTPPPIOjjz4aN954Iz744APL66bTMC8wL+jlpbxQzz333IOhoSF85jOfmfEz5gX9mBOYE/TyWk74/Oc/jzvuuANf/vKXcfLJJ+O73/0uHn30UYyOjuKaa66p+hwADT/LaO4BAF/eCjUyMoLx8XHsueeeul5f+0T93//+dwDALrvsUvX9SCSChQsXln6+YMECLF26FDfeeCPuvvtuHHrooTjxxBPxz//8z6VEctppp+G///u/8dWvfhWXXXYZPv3pT+Nzn/scTjnllKajJuh539tvv43XX3+9aqSgSps2bQIA/PWvf0UwGMTuu++ua3200mj9AMCuu+6KP/zhD1Xf6+7unrGMiUQCqVSq5WetWbMG3/nOd/Dkk09ifHy86mdjY2NGF32Gc889F3/961/x3HPPYXBwsOpntZdA9ejp6Snd0lRpamqq9PNmrr76aiSTSXz/+9/HddddBwA46qij8JWvfAW33XZb08u2gUAAF198MR599FE8/fTT+Od//mfDy9/JmBemMS+05rW8UOlvf/sb/vjHP+LCCy9EKNT6EM+80BhzwjTmhNa8nBOkQw45BAcccAAef/zxqs8B0PCzzHyOLxsLo8ysWOkHP/gBzjrrLDz00EN47LHH8M1vfhPLly/H888/j3nz5qGnpwerVq3CU089hd/85jf43e9+h/vuuw+f+tSn8Nhjj1V1vbXL1Op9mqbh4x//OG688ca6v2P+/Pmm/y6VGv2NraTTaRx22GHo7+/H1VdfjR133BHd3d14+eWX8a//+q+GzurU88Mf/hD33nsvfv7zn2OfffaZ8fN6Y0HXMzAwUNqG5syZg6eeegpCiKozPBs2bAAwfV9jM5FIBP/93/+Na665Bm+99Ra23npr7Lzzzjj99NMRDAax0047NX2/jPlHH32ka9mpMeYFezEv6M8Lle655x4AwJe+9CXd72FeUIM5wV7MCeZyQqX58+fjzTffLP17zpw5pd9bG+cNGzaYG4La8M1THaBYLIr+/n5x0kknNX1do+G65FP5tfevZrNZMTAwIP7pn/6p4e989tlnBQBx+eWXN3zNNddcIwCIlStXtv5jmrzvuOOOE9tuu23VvY/1yHvsXnnllaav23PPPXXdN/ncc88JAOLWW2+d8drddtut6n5IOdJDrSuvvFK02jwfeOABAUA888wzVd//yU9+MmPkic9+9rOG7ptctWqVCIVC4qKLLmr4Gpi4b1LeW1s70sPdd98tAIhVq1bpXkapUCiIOXPmiAMPPLDla//3f/9XABD33HOP4c/pdMwL1ZgXZmqHvLDbbruJHXfcUffrhWBeaIQ5oRpzwkztkBMqLVq0SOy8886lf7/22msCaDwqVO0zLXr48hmLYDCIk08+Gf/7v/+LF198ccbPRYs5A4888khEIhH8x3/8R9Vrf/rTn2JsbAzHH388AGB8fHzGzIUf//jHEQwGS5ed6p0hkh1vvUtTkp73ff7zn8e6devwX//1XzNeu2XLltKoFSeffDKCwSCuvvrqGZ175d8Xi8WQTqcbLpO03377YXh4GLfddlvV3/Db3/4Wr7/+emn9WCXPXlQuYy6Xw6233jrjtbFYTPflzg0bNuDzn/88DjnkkNJoEfWYuW/ypJNOQjgcrlpGIQRuu+02bLvttjjooIOqluONN95APp9vurw33HADNmzYUDXh1UcffYRisVj1unw+j+uuuw6RSARHHHGErnXhJ8wLzAvNtENeeOWVV/D666/j9NNPr7tszAvGMCcwJzTj5ZwwMjIyYzkeeeQRvPTSSzjmmGNK39tjjz2w66674ic/+UlVblixYgUCgQBOOeUUXeuikm9vhbr22mvx2GOP4bDDDisNr7Zhwwb88pe/xB/+8IeqIc5qDQ0NYdmyZbjqqqtwzDHH4MQTT8Sbb76JW2+9FYsXLy7do/rkk0/iwgsvxKmnnoqdd94ZhUIBd911F7q6uvBP//RPAKbvmV+1ahWOP/54bL/99ti0aRNuvfVWzJs3r+lQYnred8YZZ+D+++/H+eefj6eeegoHH3wwisUi3njjDdx///149NFHsd9++2GnnXbC5Zdfju9+97s49NBD8bnPfQ7RaBQvvPAC5s6di+XLlwMAFi1ahBUrVuDf//3fsdNOO2F4eLj0cFelcDiM733vezj77LNx2GGH4Ytf/GJpCLkddtgBF198sdmwVTnooIOQSCRw5pln4pvf/CYCgQDuuuuuusl+0aJFuO+++7B06VIsXrwYvb29OOGEE+r+3m9+85sYGRnBpZdeil/84hdVP9trr72w1157ATB33+S8efNw0UUX4frrr0c+n8fixYvx4IMP4ve//z3uvvvuqku9y5Ytw89+9jO8++672GGHHQAAP//5z/E///M/+OQnP4ne3l48/vjjuP/++/HVr361tE0B0w9o/vu//ztOOeUULFiwAB999BHuuecevPbaa7j22murhqSlMuYF5oV2zAvS3XffDaDxbVDMC8YxJzAntGNOOOigg7Dvvvtiv/32w8DAAF5++WXcfvvtmD9/Pr797W9Xfdb111+PE088EUcddRS+8IUv4LXXXsOPf/xjfPWrX50x3K0uhq9xdJC///3v4stf/rIYGhoS0WhULFy4UCxZsmTGpDeNZi788Y9/LHbddVcRDofF1ltvLS644IKqSW/+9re/iXPOOUfsuOOOoru7W2y11VbiiCOOEI8//njpNU888YQ46aSTxNy5c0UkEhFz584VX/ziF8Vbb73VdNn1vi+Xy4nvfe97Yo899hDRaFQkEgmxaNEicdVVV4mxsbGq195+++1i3333Lb3usMMOq7rEunHjRnH88ceLvr4+AbSe9Oa+++4r/b6tttqq6aQ3tfRc3hRi+nLxP/zDP4ienh4xd+5ccemll4pHH310xvJMTEyI008/XcTjcQE0n/Sm3iQ58svqpDdCTF9ev/baa8X2228vIpGI2GOPPcTPf/7zGa+Tw+u9++67pe/96U9/Ep/85CdFIpEQ3d3dYu+99xa33XbbjEvYL774ojjhhBPEtttuKyKRiOjt7RWHHHKIuP/++y0vf6djXmBeqMfLeUG+f9tttxWf+MQnGn4G84I5zAnMCfV4OSdcfvnlYp999hEDAwMiHA6L7bbbTlxwwQVi48aNdT/rgQceEPvss4+IRqNi3rx54jvf+Y7I5XKmljsgRItreURERERERC348hkLIiIiIiJSi40FERERERFZxsaCiIiIiIgsY2NBRERERESWsbEgIiIiIiLL2FgQEREREZFlvpogT9M0rF+/Hn19fQgEAm4vDpHrhBDYvHkz5s6di2DQf+cZmBOIqvk9JwDMC0S1jOQFXzUW69evx/z5891eDCLPWbt2LebNm+f2YjiOOYGoPr/mBIB5gagRPXnBV41FX18fAODSSy9FT09P6fu5XK40tXskEnHkDIX8vNmzZyMcDiOXyyGdTgMA4vE4IpGI7ctQb5lGRkYAANFoFAMDA44vAwCMjY0hm80CAIaGhlw5Y2RnPPL5PJLJJAA0/duEEMjlcqXX2bFNbNmyBd///vdL+4bfNMoJ9TgRj9q8UE+n7x96dVK+0psTGikWiygUCgCAUCiErq4uw79D8ntOAIzlhXpU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CyIiIiIisoyNBRERERERWcbGgoiIiIiILGNjQURERERElrGxICIiIiIiy9hYEBERERGRZWwsyDEjIyPYZpttcO2115a+99xzzyESieCJJ55wccmIyA3MCURUi3mhvQWEEMLthSD/eOSRR3DyySfjueeewy677IJ99tkHJ510Em688Ua3F42IXMCcQES1mBfaFxsLctySJUvw+OOPY7/99sPq1avxwgsvIBqNur1YROQS5gQiqsW80J7YWJDjtmzZgj333BNr167FSy+9hI9//ONuLxIRuYg5gYhqMS+0Jz5jQY7761//ivXr10PTNLz33ntuLw4RuYw5gYhqMS+0J16xIEflcjnsv//+2GeffbDLLrvg5ptvxurVqzE8POz2ohGRC5gTiKgW80L7YmNBjvrWt76FX/3qV/jLX/6C3t5eHHbYYRgYGMDDDz/s9qIRkQuYE4ioFvNC++KtUOSYp59+GjfffDPuuusu9Pf3IxgM4q677sLvf/97rFixwu3FIyKHMScQUS3mhfbGKxZERERERGQZr1gQEREREZFlbCyIiIiIiMgyNhZERERERGQZGwsiIiIiIrKMjQUREREREVnGxoKIiIiIiCxjY0FERERERJaxsSAiIiIiIsvYWBARERERkWVsLIiIiIiIyDI2FkREREREZNn/D9PCdYd07tFfAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 3, figsize=(8, 4), layout=\"tight\")\n", "sim.plot(z=0.95, ax=ax[0])\n", "sim.plot(z=0.75, ax=ax[1])\n", "sim.plot(z=0.5, ax=ax[2])\n", "plt.show()\n" ] }, { "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" } }, "nbformat": 4, "nbformat_minor": 4 }