{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Calculating Extinction\n", "\n", "This notebook gives a simple example showing how to use OpenModes. A pair of split-ring resonators are created, and their extinction cross section is calculated" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we load import the `openmodes` packages, along with a few other useful python packages." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# setup 2D and 3D plotting \n", "%matplotlib inline\n", "from openmodes.ipython import matplotlib_defaults\n", "matplotlib_defaults()\n", "import matplotlib.pyplot as plt\n", "\n", "# the numpy library contains useful mathematical functions\n", "import numpy as np\n", "\n", "# import useful python libraries\n", "import os.path as osp\n", "\n", "# import the openmodes packages\n", "import openmodes\n", "from openmodes.sources import PlaneWaveSource" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we create a `Simulation` object which holds all the data for the simulation we are going to run. Since we are running in the IPython/Jupyter notebook, we pass `notebook=True` to enable in browser 3D plots and progress sliders." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sim = openmodes.Simulation(notebook=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we load the geometry file. This geometry file is written in the scripting language of [gmsh](http://geuz.org/gmsh), a program which converts the geometry into a surface mesh. The geometry file used is a split ring resonator provided with OpenModes. The installation location of these provided geometries is found in `openmodes.geometry_dir`. Also, these included geometries are written so that some of their geometric parameters can be modified. In this case the inner radius is set to 2.5mm and the outer radius to 4mm.\n", "\n", "The mesh density may be specified in the geometry file, but can be over-ridden with the parameter `mesh_tol`. Be careful with this parameter, setting it too small can result in very long computations." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pruned cell types: vertex, line\n" ] } ], "source": [ "filename = osp.join(openmodes.geometry_dir, \"SRR.geo\")\n", "mesh_tol = 1e-3\n", "outer_radius = 4e-3\n", "srr = sim.load_mesh(filename, mesh_tol, parameters={'inner_radius': 2.5e-3, 'outer_radius': outer_radius})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we place the parts within the simulation. By default the parts are placed at the origin, so after placement we need to move one of them to the desired distance from the other. Before moving the second ring, it is rotated $180^\\circ$ to create a broadside-coupled configuration. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "ring1 = sim.place_part(srr)\n", "ring2 = sim.place_part(srr)\n", "ring2.rotate(axis = [0, 0, 1], angle = 180)\n", "ring2.translate([0, 0, 2e-3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To check that the parts have been placed in the correct location, we can visualise them using the provided `plot_3d` function. This creates a 3d view of the objects within the browser. You can control the view point with the mouse\n", "- Hold the left button to rotate the view\n", "- Scroll the wheel to zoon\n", "- Hold the right button to pan" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " \n", " Wireframe\n", " Format\n", " \n", " \n", " Arrow Length\n", " \n", " \n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sim.plot_3d(wireframe=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will calculate the extinction cross section for this pair of SRRs, assuming that they are perfectly conducting. We want to excite it with a $y$ polarised plane wave, propagating in the $x$ direction. \n", "\n", "$$\\mathbf{E}_{inc} = \\hat{\\mathbf{y}}\\exp\\left(-\\frac{s}{c}\\hat{\\mathbf{x}}\\cdot\\mathbf{r}\\right)$$\n", "\n", "We will calculate at 401 frequencies between 5 and 10 GHz." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# the frequency range over which to calculate\n", "freqs = np.linspace(5e9, 10e9, 401)\n", "\n", "# construct the source plane wave with given polarisation and propagation direction\n", "e_inc = np.array([0, 1, 0])\n", "k_dir = np.array([1, 0, 0])\n", "# The optional p_inc parameter ensures that the incident field is normalised to 1W/m^2\n", "plane_wave = PlaneWaveSource(e_inc, k_dir, p_inc=1.0)\n", "\n", "# create an empty array to hold extinction data\n", "extinction_single = np.empty(len(freqs), np.float64)\n", "extinction_pair = np.empty(len(freqs), np.float64)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now loop through all the frequencies. For notational convenience, the time dependence is assumed as $\\exp(s t)$ with complex frequency $s$.\n", "\n", "At each frequency the impedance matrix $Z$ is calculated, as is the source term $V$ due to the plane wave. By default these matrices and vectors are composite objects accounting for all the parts. We can select one of these matrices to find the response of an isolated part, or we can combine them together to find the response of the entire system.\n", "\n", "In both cases, the extinction cross-section $\\sigma_{ext}$ is found from the impedance matrix $Z$ and driving term $V$ as $\\sigma_{ext}(s) = V^{*}(s)\\cdot Z(s) \\cdot V(s)$" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "07265f1e233b458aa277999a0d7807e4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(Label(value='Frequency Sweep'), FloatProgress(value=0.0, max=400.0)))" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for freq_count, s in sim.iter_freqs(freqs):\n", " Z = sim.impedance(s)\n", " V = sim.source_vector(plane_wave, s)\n", " \n", " Z_single = Z[ring1, ring1]\n", " V_single = V[:, ring1]\n", " \n", " # calculate the extinction only of one ring\n", " extinction_single[freq_count] = np.vdot(V_single, Z_single.solve(V_single)).real\n", "\n", " # calculate the extinction of the system of two rings\n", " extinction_pair[freq_count] = np.vdot(V, Z.solve(V)).real" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we plot the extinction cross-section as a function of frequency. We use the cross section to a disc with the same radius as the SRR as a reference to express it in the normalised form of extinction efficiency $Q_{ext}$." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "area = np.pi*outer_radius**2\n", "\n", "plt.figure()\n", "plt.plot(freqs*1e-9, extinction_single/area, label='single')\n", "plt.plot(freqs*1e-9, extinction_pair/area, label='pair')\n", "plt.legend(loc='upper right')\n", "plt.axis('tight')\n", "plt.xlabel('freq (GHz)')\n", "plt.ylabel('$Q_{ext}$')\n", "plt.title('Extinction efficiency')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This figure shows the fundamental resonance of a single ring. By bringing the two rings near to each other, this resonance splits into two coupled modes. Subsequent examples will show how such modes and be explicitly modelled, and serve as the basis for convenient semi-analytical models of these structures." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }