{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simulating an All-Pass Filter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import photontorch as pt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Schematic\n", "![all pass filter](images/allpass.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulation & Design Parameters" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "dt = 1e-14 # Timestep of the simulation\n", "total_time = 2.5e-12 # Total time to simulate\n", "time = np.arange(0, total_time, dt) # Total time array\n", "loss = 1 # [dB] (alpha) roundtrip loss in ring\n", "neff = 2.34 # Effective index of the waveguides\n", "ng = 3.4\n", "ring_length = 1e-5 #[m] Length of the ring\n", "transmission = 0.5 #[] transmission of directional coupler\n", "wavelengths = 1e-6*np.linspace(1.5,1.6,1000) #[m] Wavelengths to sweep over" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Frequency Domain Analytically" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a comparison, we first calculate the frequency domain response for the all-pass filter analytically:\n", "\\begin{align*}\n", "o = \\frac{t-10^{-\\alpha/20}\\exp(2\\pi j n_{\\rm eff}(\\lambda) L / \\lambda)}{1-t10^{-\\alpha/20}\\exp(2\\pi j n_{\\rm eff}(\\lambda) L / \\lambda)}s\n", "\\end{align*}" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def frequency():\n", " ''' Analytic Frequency Domain Response '''\n", " detected = np.zeros_like(wavelengths)\n", " for i, wl in enumerate(wavelengths):\n", " wl0 = 1.55e-6\n", " neff_wl = neff + (wl0-wl)*(ng-neff)/wl0 # we expect a linear behavior with respect to wavelength\n", " out = np.sqrt(transmission) - 10**(-loss/20.)*np.exp(2j*np.pi*neff_wl*ring_length/wl)\n", " out /= (1 - np.sqrt(transmission)*10**(-loss/20.)*np.exp(2j*np.pi*neff_wl*ring_length/wl))\n", " detected[i] = abs(out)**2\n", " return detected" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def plot_frequency(detected, **kwargs):\n", " ''' Plot detected power vs time '''\n", " labels = kwargs.pop('labels', ['through','drop','add'])\n", " plots = plt.plot(wavelengths*1e9, detected, **kwargs)\n", " plt.xlabel('Wavelengths [nm]')\n", " plt.ylabel('Transmission')\n", " if labels is not None: plt.figlegend(plots, labels, loc='upper center', ncol=len(labels)%5)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 8.9 ms, sys: 0 ns, total: 8.9 ms\n", "Wall time: 8.9 ms\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%time detected_target = frequency()\n", "plot_frequency(detected_target)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Photontorch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we try to do the same simulation with Photontorch:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A Photontorch network - or circuit - is created by subclassing the `Network` class. First all\n", "network subcomponents are defined as attributes of the network, after which the ports of the subcomponents can be linked together by using the `link` method.\n", "\n", "The `link` method takes an arbitrary number of string arguments. Each argument contains the component name together with a port number in front of and a port number behind the name (e.g. `\"0:wg:1\"`). The port number behind the name will connect to the port number in front of the next name. The first component does not need a port number in front of it, while the last component does not need a port number behind.\n", "\n", "The port order of each of the standard Photontorch components can be found in its docstring. Try for example this in a code cell:\n", "\n", "```text\n", "?DirectionalCoupler\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define Allpass Network" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "class AllPass(pt.Network):\n", " def __init__(self):\n", " super(AllPass, self).__init__() # always initialize first.\n", " self.src = pt.Source()\n", " self.wg_in = pt.Waveguide(0.5*ring_length, neff=neff, ng=ng)\n", " self.dc = pt.DirectionalCoupler(1-transmission)\n", " self.wg_through = pt.Waveguide(0.5*ring_length, neff=neff, ng=ng)\n", " self.wg_ring = pt.Waveguide(ring_length, loss=loss/ring_length, neff=neff)\n", " self.det = pt.Detector()\n", " self.link('src:0', '0:wg_in:1', '0:dc:1', '0:wg_through:1', '0:det')\n", " self.link('dc:2', '0:wg_ring:1', '3:dc')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create AllPass Network" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "nw = AllPass()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Time Domain Simulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setting the simulation environment" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A simulation cannot be performed before a simulation environment is set. The simulation environment contains all the necessary global information (such as wavelength, timestep, number of timesteps, ...) to perform a simulation.\n", "\n", "After the environment is set, a simulation can be run (for example for a source with constant amplitude)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# create environment\n", "environment = pt.Environment(\n", " wl=np.mean(wavelengths),\n", " t=time,\n", ")\n", "\n", "# set environment\n", "pt.set_environment(environment)\n", "\n", "# run simulation\n", "detected = nw(source=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice the shape of the detected tensor:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "torch.Size([250, 1, 1, 1])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "detected.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In general the shape of the detected tensor always has the same form:\n", "```text\n", " (# timesteps, # wavelengths, # detectors, # parallel simulations)\n", "```\n", "In this case, we did a single simulation for 2500 timesteps while only using a single wavelength and a single detector.\n", "\n", "Each network has a plotting function, which uses this information and the information in the current environment to give you the most helpful plot possible. In this case, it is a simple power vs time plot:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot result\n", "nw.plot(detected);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sometimes, it is useful to detect the complex field values in stead of the power. This can be done by setting the `power=False` flag during simulation:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([2, 250, 1, 1, 1])\n" ] } ], "source": [ "detected = nw(source=1, power=False)\n", "print(detected.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, an extra dimension of size 2 will be added in front of the original detected shape, giving the real and imaginary part of the deteced field (because PyTorch does not support imaginary tensors)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "nw.plot(detected[0])\n", "nw.plot(detected[1])\n", "plt.legend(['real', 'imag'])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Frequency Domain Simulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Setting up a frequency domain simulation is very similar to setting up a time domain simulation. The only difference actually happens in the simulation environment, where the `frequency_domain` flag was set to `True`. This will remove all the delays inside the simulation, after which a simulation is performed for a single timestep. Because all the internal delays of the network were set to zero, this simulation of a single timestep will immediately reach the steady state. This is a very fast method for calculating the frequency domain response of your circuit. \n", "\n", "In the following, we choose to set the environment with a context manager. This will ensure the environment is closed after exiting the with-block. This way, the environment will return to the environment which was set originally." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This was detected inside the context manager:\n", "We see an exact copy of the analytically predicted response, as is to be expected\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "This was detected outside the context manager, with the default environment:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create simulation environment\n", "with pt.Environment(wl=wavelengths, freqdomain=True) as env:\n", " detected = nw(source=1)\n", " print(\"This was detected inside the context manager:\\n\"\n", " \"We see an exact copy of the analytically predicted response, as is to be expected\")\n", " nw.plot(detected, label=\"simulation\")\n", " plt.plot(env.wavelength*1e9, detected_target, linestyle=\"dotted\", linewidth=3, label=\"analytical\")\n", " plt.legend()\n", " plt.show()\n", "\n", "print(\"This was detected outside the context manager, \"\n", " \"with the default environment:\")\n", "detected = nw(source=1)\n", "nw.plot(detected)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multimode Simulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of the strengths of photontorch, is that time-domain simulations can be done for multiple wavelengths at the same time. Just specify a range of wavelengths to simulate over in the simulation environment" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "with pt.Environment(wl=wavelengths[::100], t=time):\n", " detected = nw(source=1)\n", " nw.plot(detected);" ] } ], "metadata": { "kernelspec": { "display_name": "ptdev", "language": "python", "name": "ptdev" }, "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.7" } }, "nbformat": 4, "nbformat_minor": 4 }