{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Dielectric disc\n",
"\n",
"This code will calculate the modes of a dielectric disc. This is calculated using a surface equivalent problem, where the solution is represented by equivalent surface currents of electric type \"J\" and magnetic type \"M\". This results in an impedance matrix of the following form:\n",
"\n",
"$$\\begin{bmatrix}E_{inc} \\\\ H_{inc}\\end{bmatrix} =\n",
"\\begin{bmatrix} Z_{EJ} & Z_{EM} \\\\ Z_{HJ} & Z_{HM}\\end{bmatrix}\n",
"\\begin{bmatrix}J \\\\ M\\end{bmatrix}\n",
"$$\n",
"\n",
"Compared to examples with PEC objeccts, the calculations are considerably slower (this will hopefully be improved in a future version)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from __future__ import print_function\n",
"\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import os.path as osp\n",
"import numpy as np\n",
"\n",
"import openmodes\n",
"from openmodes.material import IsotropicMaterial\n",
"from openmodes.operator.penetrable import PMCHWTOperator, CTFOperator\n",
"from openmodes.sources import PlaneWaveSource\n",
"from openmodes.integration import RectangularContour, EllipticalContour, ExternalModeContour, DunavantRule, GaussLegendreRule"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uncomment the lines below to see more information about the internal workings of OpenModes, including which parts of the simulation are taking the most time."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# import logging\n",
"# logging.getLogger().setLevel(logging.INFO)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since we are solving a surface equivalent problem for a dielectric object, we need to change the operator that we solve. The operator we are using here is the \"Combined Tangential Form\", as defined in [Ylä-Oijala et al, Radio Sci. 40, RS6002 (2005)](http://dx.doi.org/10.1029/2004RS003169). This operator is specified by the option `operator_class=CTFOperator` when creating the `Simulation` object."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sim = openmodes.Simulation(operator_class=CTFOperator, notebook=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When placing the part into the simulation, in addition to specifying the mesh, we also need to indicate which material the part will be made from. Here we use a simple model for silicon, as a non-dispersive material with a refractive index of 3.53 (note that it is squared to give the permittivity)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pruned cell types: vertex, line\n"
]
}
],
"source": [
"parameters={'radius':242e-9, 'height':220e-9, 'mesh_tol':75e-9, 'rounding':50e-9}\n",
"cross_section = 2*np.pi*parameters['radius']**2\n",
"mesh = sim.load_mesh(osp.join(openmodes.geometry_dir, 'cylinder_rounded.geo'), parameters=parameters)\n",
"\n",
"material = IsotropicMaterial(\"Silicon\", 3.53**2, 1)\n",
"\n",
"part = sim.place_part(mesh, material=material)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Calculate extinction directly"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d8481ee4387048ad995e6e88f430f3e4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(Label(value='Frequency Sweep'), FloatProgress(value=0.0, max=99.0)))"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pw = PlaneWaveSource([0, 1, 0], [0, 0, 1], p_inc=1.0)\n",
"\n",
"num_freqs = 100\n",
"\n",
"freqs = np.linspace(100e12, 300e12, num_freqs)\n",
"extinction = np.empty(num_freqs, np.complex128)\n",
"\n",
"for freq_count, s in sim.iter_freqs(freqs, log_skip=20):\n",
" Z = sim.impedance(s)\n",
" V = sim.source_vector(pw, s)\n",
" I = Z.solve(V)\n",
" V_E = sim.source_vector(pw, s, extinction_field=True)\n",
" extinction[freq_count] = np.vdot(V_E, I) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Find modes"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "57d99bd44eca4ee8837be80ff5ccc4d1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(Label(value='Contour Integration'), FloatProgress(value=0.0, max=74.0)))"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"contour = ExternalModeContour(-5.45e14+2j*np.pi*350e12, avoid_origin=0.5e14, integration_rule=GaussLegendreRule(15))\n",
"estimates = sim.estimate_poles(contour)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here the estimated frequencies of the poles are shown. Also plotted is the contour around which integration was performed in order to obtain the estimates of the poles."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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0P87ZPmu/XBp9P51JM79ey7lswtJnCf3AIkifhHRYoZq5JoBDAaGA+uBN0gZxUx5XVX9kUuimFwb/Qz/I3FdPRGpgCVO5RARkbrKzI4C/ububbf3WhHJLhqRExEREclSKuREREREspSmVkVERESylEbkRERERLJUnSnkzKyfmS2wxH0QrwudR0RERCRudWJq1cwaAgtJ3NtxJfAOcIa7z6vsPbvttpt37NixdgKKiIiIfAczZ85c4+4ty+7fKUSYGBwELIruN4iZPUniavGVFnIdO3aksLCwluKJiIiI7Dgzq/BWe3VlarUNpe8ruJIK7mFoZuebWaGZFX7++ee1Fk5EREQkDnWlkLMK9pWbM3b30e6e7+75LVuWG50UERERySp1pZBbSekbRLclcYNrERERkTqrrhRy7wBdzayTmTUmcf/DiYEziYiIiMSqTix2cPdtZjYEeAloCDzs7nMDxxIRERGJVZ0o5ADc/Xng+dA5RERERGpLXZlaFREREal3VMiJiIiIZCkVciIiIiJZSoWciIiISJZSISciIiKSperMqtW67JVXXmHLli2l9rVu3ZoePXoAUFBQwDfffFOqvV27dnTv3h1358UXXyz3mZ06dWLvvfdm27ZtTJkypVx7ly5d6Nq1K5s2beK1114r17733nvTqVMnvvzyS/7973+Xa+/evTvt2rVj/fr1vP322+Xa999/f/bYYw/+97//MWPGjHLtPXv2pFWrVqxevZp33323XPvBBx9MixYt+OSTT3j//ffLtR922GF8//vfZ/ny5cydW/5KNL1796Z58+Z89NFHLFiwoFz7McccQ5MmTfjvf//LokWLyrX36dOHnXbaifnz57N06dJy7f379wdgzpw5rFy5slRbw4YN6du3LwCzZs1i1apVpdqbNGnCMcccA0BhYSFlbyfXvHlzevfuDcD06dNZu3Ztqfbc3FwOP/xwAKZOncqGDRtKtbdo0YKDDz4YgDfeeIOvv/66VHurVq3o2bMnoGNPx56OvVSZeOy5J25iZGYcdthh5Obmsnz5cubNK3+rcR17NXfstWnThn333bdcHwTh7vXy0bNnT89Ua9as8VWrVpVs//CHP3QStxwrefziF78oaW/evHm59t/85jfu7l5cXFyuDfArr7zS3d3Xr19fYfvNN9/s7u4rV66ssP2Pf/yju7vPnz+/wvbR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mqQROREREZHIz3/+c/Lz84NmSKeQuz62FHXQa6+9RvPmzUPHEBERkZj0798/dIS0CrltZnYt0IbENOsnwER3nx9LsizXpUuX0BFEREQkRqtXr2bjxo107NgxWIZqnSMXFXBPkphenQG8Ez1/wsyuiy9e9ho9ejQFBQWhY4iIiEhMbrjhBo488sigGao7IncOsK+7b03daWb3AXOBP9R0sGx366230rdvX/r27Rs6ioiIiNRR1V21WgzsUcH+1lGbiIiIiNSy6o7IXQa8Ymb/BVZE+9oDXYAhcQQTERERkapVq5Bz9xfNrBtwEInFDn/qoWIAACAASURBVAasBN5x929izCciIiIilaj2qlV3Lwamx5hFREREJGuceeaZ/PjHPw6aIZ3Lj1TIzAa7+yM1EaYueeedd2jSpEnoGCIiIhKTo48+OnSEtG7RVZlbauAz6pzdd9+dXXbZJXQMERERicmyZcv44IMPgmao1oicmc2urAn4Yc3FqTuGDx9O586dOfHEE0NHERERkRgMGzaMgoICVqxYsf0Xx6S6U6s/BI4F1pbZb8DbNZqojrjvvvvo27evCjkRERGJTXULucnAzu4+q2yDmb1eo4lEREREpFqqe/mRc6po+0XNxRERERGR6qruvVatJl4jIiIiIjWnulOrr5nZM8AEd1+e3GlmjYEjgF8DrwGP1nhCERERkQx07rnncvzxxwfNUN1Crh9wNvCEmXUC1gFNgYZAATC8ovPn6rN58+ax007f+TJ9IiIikqEOPfTQ0BGqfY7cJuDPwJ/NrBGwG7DR3dfFGS6b5eTkhI4gIiIiMVq4cCFr167l4IMPDpYh7QsCu/tWd1+lIq5qt912G0899VToGCIiIhKTu+66i5///OdBM9TEnR2kAqNGjeKll14KHUNERETqsLQLOTPbqcx2+5qLIyIiIiLVVe1CzszOM7MFwAozW2dmr5rZIcBz8cUTERERkcpU916r1wL5wI/d/dNoX19gDKAROREREZEAqnt9jMHAfu6+NbnD3QvM7KckVrOKiIiI1CtDhgzhtNNOC5qh2hc6Sy3iUvatNrORNRupbli+fPn2XyQiIiJZ64ADDggdodrnyC02s3KXLjazYcArNRupbjAzdNcyERGRumv27Nm8+uqrQTNUd0TuQuAZMxsEvA/sDBwHzAIWxBMtu11//fXss88+nHXW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\n",
"text/plain": [
"