{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Transmittance Spectrum of a Waveguide Bend" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have computed the field patterns for light propagating around a waveguide bend. While this can be visually informative, the results are not quantitatively satisfying. We'd like to know exactly how much power makes it around the bend (transmittance), how much is reflected (reflectance), and how much is radiated away (scattered loss). How can we do this?\n", "\n", "The basic principles are described in Introduction. The computation involves keeping track of the fields and their Fourier transform in a certain region, and from this computing the flux of electromagnetic energy as a function of $\\omega$. Moreover, we'll get an entire spectrum of the transmittance in a single run, by Fourier-transforming the response to a short pulse. However, in order to normalize the transmitted flux by the incident power to obtain the transmittance, we'll have to do _two_ runs, one with and one without the bend (i.e., a straight waveguide)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using MPI version 3.1, 1 processes\n" ] } ], "source": [ "import meep as mp\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "resolution = 10 # pixels/um\n", "\n", "sx = 16 # size of cell in X direction\n", "sy = 32 # size of cell in Y direction\n", "cell = mp.Vector3(sx,sy,0)\n", "\n", "dpml = 1.0\n", "pml_layers = [mp.PML(dpml)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll also define a couple of parameters to set the width of the waveguide and the \"padding\" between it and the edge of the cell:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "pad = 4 # padding distance between waveguide and cell edge\n", "w = 1 # width of waveguide" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to define the waveguide positions, we will have to use arithmetic to define the horizontal and vertical waveguide centers as:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "wvg_xcen = 0.5*(sx-w-2*pad) # x center of horiz. wvg\n", "wvg_ycen = -0.5*(sy-w-2*pad) # y center of vert. wvg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We proceed to define the geometry. We have to do two simulations with different geometries: the bend, and also a straight waveguide for normalization. We will first set up the straight waveguide." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "geometry = [mp.Block(size=mp.Vector3(mp.inf,w,mp.inf),\n", " center=mp.Vector3(0,wvg_ycen,0),\n", " material=mp.Medium(epsilon=12))]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The source is a GaussianSource instead of a ContinuousSrc, parameterized by a center frequency and a frequency width (the width of the Gaussian spectrum)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "fcen = 0.15 # pulse center frequency\n", "df = 0.1 # pulse width (in frequency)\n", "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),\n", " component=mp.Ez,\n", " center=mp.Vector3(-0.5*sx+dpml,wvg_ycen,0),\n", " size=mp.Vector3(0,w,0))]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice how we're using our parameters like wvg_ycen and w: if we change the dimensions, everything will shift automatically.\n", "\n", "Finally, we have to specify where we want Meep to compute the flux spectra, and at what frequencies. This must be done after specifying the Simulation object which contains the geometry, sources, resolution, etcetera, because all of the field parameters are initialized when flux planes are created. As described in Introduction, the flux is the integral of the Poynting vector over the specified FluxRegion. It only integrates one component of the Poynting vector and the direction property specifies which component. In this example, since the FluxRegion is a line, the direction is its normal by default which therefore does not need to be explicitly defined." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-----------\n", "Initializing structure...\n", " block, center = (0,-11.5,0)\n", " size (1e+20,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "