{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Optical Forces\n", "\n", "This tutorial demonstrates Meep's ability to compute classical forces via the [Maxwell stress tensor](https://en.wikipedia.org/wiki/Maxwell_stress_tensor). The geometry consists of two identical, parallel, silicon waveguides with square cross section in vacuum. A schematic of the geometry is shown below. Due to the parallel orientation of the waveguides (propagation axis along $z$ and separation in $x$), the two modes can be chosen to be either symmetric or anti-symmetric with respect to an $x$ mirror-symmetry plane between them. As the two waveguides are brought closer and closer together, their modes couple and give rise to a gradient force that is *transverse* to the waveguide axis (i.e., in the $x$ direction). This is different from [radiation pressure](https://en.wikipedia.org/wiki/Radiation_pressure) which involves momentum exchange between photons and is longitudinal in nature (i.e., along the $z$ direction). An interesting phenomena that occurs for this coupled waveguide system is that the force can be tuned to be either attractive or repulsive depending on the relative phase of the two modes. This tutorial will demonstrate this effect.\n", "\n", "![](https://meep.readthedocs.io/en/latest/images/Waveguide_forces.png)\n", "\n", "The gradient force $F$ on each waveguide arising from the evanescent coupling of the two waveguide modes can be computed analytically:\n", "\n", "$$F=-\\frac{1}{\\omega}\\frac{d\\omega}{ds}\\Bigg\\vert_\\vec{k}U$$\n", "\n", "where $\\omega$ is the mode frequency of the coupled waveguide system, $s$ is the separation distance between the parallel waveguides, $k$ is the conserved wave vector, and $U$ is the total energy of the electromagnetic fields. By convention, negative and positive values correspond to attractive and repulsive forces, respectively. For more details, see [Optics Letters, Vol. 30, pp. 3042-4, 2005](https://www.osapublishing.org/ol/abstract.cfm?uri=ol-30-22-3042). This expression has been shown to be mathematically equivalent to the Maxwell stress tensor in [Optics Express, Vol. 17, pp. 18116-35, 2009](http://www.opticsinfobase.org/oe/abstract.cfm?URI=oe-17-20-18116). We will verify this result in this tutorial. In this particular example, only the fundamental mode with odd mirror-symmetry in $y$ shows the bidirectional force.\n", "\n", "It is convenient to [normalize the force](https://meep.readthedocs.io/en/latest/Python_User_Interface/#force-spectra) in order to work with [dimensionless quantities](https://meep.readthedocs.io/en/latest/Introduction/#units-in-meep). Since the total transmitted power in the waveguide per unit length is $P=v_gU/L$ where $v_g$ is the group velocity, $U$ is the total energy of the electromagnetic fields (same as before), and $L$ is the waveguide length, we focus instead on the force per unit length per unit power $(F/L)(ac/P)$ where $a$ is the waveguide width/height and $c$ is the speed of light. This dimensionless quantity can be computed in a single simulation.\n", "\n", "The gradient force $F$ can be computed using two different methods: (1) using MPB, compute the frequency $\\omega$ and group velocity $v_g$ for a given mode over a range of separation distances $s$ and then use a centered [finite-difference](https://en.wikipedia.org/wiki/Finite_difference) scheme to evaluate $F$ using the formula from above, and (2) using Meep, directly compute both the gradient force $F$ and the transmitted power $P$ over the same range of separation distances $s$. This tutorial verifies that (1) and (2) produce equivalent results.\n", "\n", "The main component of the Meep script is the function `parallel_waveguide` which computes the force $F$ and transmitted power $P$ given the waveguide separation distance `s` and relative phase of the waveguide modes `xodd=True/False`. The eigenmode frequency $\\omega$ is computed first using `get_eigenmode` in order to specify the frequency of the `add_force` and `add_flux` monitors. (Note that when `match_frequency=False`, `get_eigenmode` ignores the input `frequency` parameter.) An [`EigenModeSource`](https://meep.readthedocs.io/en/latest/Python_User_Interface/#eigenmodesource) with `eig_match_freq=False` is then used to launch the guided mode using a pulse (the `frequency` but not the `fwidth` parameter of `GaussianSource` is ignored). Alternatively, a constant-amplitude point/area source can be used to launch the mode but this is less efficient as demonstrated in [Tutorial/Eigenmode Source/Index-Guided Modes in a Ridge Waveguide](https://meep.readthedocs.io/en/latest/Python_Tutorials/Eigenmode_Source/#index-guided-modes-in-a-ridge-waveguide). The waveguide has width/height of $a=1$ μm and a fixed propagation wavevector of $\\pi/a$." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import meep as mp\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "resolution = 40 # pixels/μm\n", "\n", "Si = mp.Medium(index=3.45)\n", "\n", "dpml = 1.0\n", "pml_layers = [mp.PML(dpml)]\n", "\n", "sx = 5\n", "sy = 3\n", "cell = mp.Vector3(sx + 2 * dpml, sy + 2 * dpml, 0)\n", "\n", "a = 1.0 # waveguide width/height\n", "\n", "k_point = mp.Vector3(z=0.5)\n", "\n", "\n", "def parallel_waveguide(s, xodd):\n", " geometry = [\n", " mp.Block(\n", " center=mp.Vector3(-0.5 * (s + a)),\n", " size=mp.Vector3(a, a, mp.inf),\n", " material=Si,\n", " ),\n", " mp.Block(\n", " center=mp.Vector3(0.5 * (s + a)), size=mp.Vector3(a, a, mp.inf), material=Si\n", " ),\n", " ]\n", "\n", " symmetries = [mp.Mirror(mp.X, phase=-1 if xodd else 1), mp.Mirror(mp.Y, phase=-1)]\n", "\n", " sim = mp.Simulation(\n", " resolution=resolution,\n", " cell_size=cell,\n", " geometry=geometry,\n", " boundary_layers=pml_layers,\n", " symmetries=symmetries,\n", " k_point=k_point,\n", " )\n", "\n", " sim.init_sim()\n", " EigenmodeData = sim.get_eigenmode(\n", " 0.22,\n", " mp.Z,\n", " mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx, sy)),\n", " 2 if xodd else 1,\n", " k_point,\n", " match_frequency=False,\n", " parity=mp.ODD_Y,\n", " )\n", "\n", " fcen = EigenmodeData.freq\n", " print(\"freq:, {}, {}, {}\".format(\"xodd\" if xodd else \"xeven\", s, fcen))\n", "\n", " sim.reset_meep()\n", "\n", " eig_sources = [\n", " mp.EigenModeSource(\n", " src=mp.GaussianSource(fcen, fwidth=0.1 * fcen),\n", " size=mp.Vector3(sx, sy),\n", " center=mp.Vector3(),\n", " eig_band=2 if xodd else 1,\n", " eig_kpoint=k_point,\n", " eig_match_freq=False,\n", " eig_parity=mp.ODD_Y,\n", " )\n", " ]\n", "\n", " sim.change_sources(eig_sources)\n", "\n", " flux_reg = mp.FluxRegion(\n", " direction=mp.Z, center=mp.Vector3(), size=mp.Vector3(sx, sy)\n", " )\n", " wvg_flux = sim.add_flux(fcen, 0, 1, flux_reg)\n", "\n", " force_reg1 = mp.ForceRegion(\n", " mp.Vector3(0.49 * s), direction=mp.X, weight=1, size=mp.Vector3(y=sy)\n", " )\n", " force_reg2 = mp.ForceRegion(\n", " mp.Vector3(0.5 * s + 1.01 * a), direction=mp.X, weight=-1, size=mp.Vector3(y=sy)\n", " )\n", " wvg_force = sim.add_force(fcen, 0, 1, force_reg1, force_reg2)\n", "\n", " sim.run(until_after_sources=1500)\n", "\n", " flux = mp.get_fluxes(wvg_flux)[0]\n", " force = mp.get_forces(wvg_force)[0]\n", " print(\n", " \"data:, {}, {}, {}, {}, {}\".format(\n", " \"xodd\" if xodd else \"xeven\", s, flux, force, -force / flux\n", " )\n", " )\n", "\n", " sim.reset_meep()\n", " return flux, force" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are four important items to note: (1) a single flux surface is used to compute the Poynting flux in $z$ which spans the entire non-PML region of the cell. This is because in the limit of small waveguide separation distance, two separate flux surfaces for each waveguide would overlap and result in overcounting. The total power through a single flux surface need, by symmetry, only be halved in order to determine the value for a single waveguide. (2) Instead of defining a closed, four-sided \"box\" surrounding the waveguides, the Maxwell stress tensor is computed using just two line monitors oriented in $y$ (to obtain the force in the perpendicular $x$ direction) with `weight` values of `+1`/`-1` to correctly sum the total force. The force monitors are placed in the vacuum region adjacent to the waveguide rather than on its surface so that the fields are [second-order accurate](https://meep.readthedocs.io/en/latest/Subpixel_Smoothing/). By symmetry, the force in the $y$ direction is zero and need not be computed. (3) Since the `parity`/`eig_parity` parameter of `get_eigenmode`/`EigenModeSource` can only be specified using the $y$ and/or $z$ directions (but *not* $x$, the waveguide separation axis), the `band`/`eig_band` parameter must be set to `1`/`2` to distinguish modes with even/odd $x$-mirror symmetry. (4) A 2d `cell_size` in $xy$ combined with a `k_point` containing a non-zero $z$ component results in a [2d simulation (which is the default)](https://meep.readthedocs.io/en/latest/2d_Cell_Special_kz/).\n", "\n", "In this example, the fields of the guided mode never decay away to zero. [Choosing a runtime](https://meep.readthedocs.io/en/latest/FAQ/#checking-convergence) is therefore somewhat arbitrary but requires some care. A sufficiently long runtime is necessary to obtain the [steady-state response](https://meep.readthedocs.io/en/latest/FAQ/#how-do-i-compute-the-steady-state-fields). However, an excessively long runtime will lead to large values for the Fourier-transformed fields used to compute both the flux and the Maxwell stress tensor. Large floating-point numbers may contain [roundoff errors](https://en.wikipedia.org/wiki/Round-off_error) and produce inaccurate results.\n", "\n", "The simulation is run over the range of separation distances $s$ from 0.1 to 1.0 μm in increments of 0.1 μm. The results are compared with those from MPB. This is shown in the top figure. The two methods show good agreement." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00295496 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.55,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.55,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0137441 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7594150d888346fbb6eab2f3b74120a0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 239.38333333333333/366.6666717529297 = 65.3% done in 4.0s, 2.1s to go\n", "on time step 14404 (time=240.067), 0.000277733 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.2337849185921515, -1.9695192598601073e-09, 59350757.150949866, 0.5581279688138194, -0.5553187433557634-0.055927836092732594i, 2.543717760177644e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.1, 0.2337849185921515\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00183916 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.55,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.55,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0193331 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.770666) = 0.233421 after 12 iters\n", "MPB solved for frequency_1(0,0,0.771882) = 0.233785 after 7 iters\n", "MPB solved for frequency_1(0,0,0.771882) = 0.233785 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.770666) = 0.233421 after 12 iters\n", "MPB solved for frequency_1(0,0,0.771882) = 0.233785 after 7 iters\n", "MPB solved for frequency_1(0,0,0.771882) = 0.233785 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "25d74586424d475ba7fd3c46c7af0993", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 211.81666666666666/666.6666717529297 = 31.8% done in 4.0s, 8.6s to go\n", "on time step 12744 (time=212.4), 0.000313893 s/step\n", "Meep progress: 438.3333333333333/666.6666717529297 = 65.7% done in 8.0s, 4.2s to go\n", "on time step 26339 (time=438.983), 0.000294248 s/step\n", "Meep progress: 660.8666666666667/666.6666717529297 = 99.1% done in 12.0s, 0.1s to go\n", "on time step 39695 (time=661.583), 0.000299507 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00133109 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.55,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.55,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0117002 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b4da8f0d9e514cd8973e7a86f36aa83a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 246.28333333333333/366.6666717529297 = 67.2% done in 4.0s, 2.0s to go\n", "on time step 14810 (time=246.833), 0.000270096 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.21436005656524434, 2.1977416545924374e-08, -4876825.629557369, 1.0437686932994705, -0.6908642657795828-0.7824063211534797i, 3.332567959460228e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.1, 0.21436005656524434\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00119805 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.55,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.55,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0203319 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.706409) = 0.214152 after 11 iters\n", "MPB solved for frequency_1(0,0,0.707103) = 0.21436 after 6 iters\n", "MPB solved for frequency_1(0,0,0.707103) = 0.21436 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.706409) = 0.214152 after 11 iters\n", "MPB solved for frequency_1(0,0,0.707103) = 0.21436 after 6 iters\n", "MPB solved for frequency_1(0,0,0.707103) = 0.21436 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "133c2f48e1d04fcc94f8ba14ae285e83", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 83.76666666666667/666.6666717529297 = 12.6% done in 4.0s, 27.8s to go\n", "on time step 5044 (time=84.0667), 0.000793118 s/step\n", "Meep progress: 168.71666666666667/666.6666717529297 = 25.3% done in 8.0s, 23.6s to go\n", "on time step 10144 (time=169.067), 0.000784439 s/step\n", "Meep progress: 255.01666666666665/666.6666717529297 = 38.3% done in 12.0s, 19.4s to go\n", "on time step 15324 (time=255.4), 0.000772402 s/step\n", "Meep progress: 340.3666666666667/666.6666717529297 = 51.1% done in 16.0s, 15.3s to go\n", "on time step 20446 (time=340.767), 0.000780987 s/step\n", "Meep progress: 424.3833333333333/666.6666717529297 = 63.7% done in 20.0s, 11.4s to go\n", "on time step 25484 (time=424.733), 0.00079398 s/step\n", "Meep progress: 509.8/666.6666717529297 = 76.5% done in 24.0s, 7.4s to go\n", "on time step 30615 (time=510.25), 0.00077967 s/step\n", "Meep progress: 594.2/666.6666717529297 = 89.1% done in 28.0s, 3.4s to go\n", "on time step 35680 (time=594.667), 0.000789747 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00357318 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.6,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.6,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0155571 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c6edcf731c7e4156999f724734815579", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 97.31666666666666/366.6666717529297 = 26.5% done in 4.0s, 11.1s to go\n", "on time step 5854 (time=97.5667), 0.000683346 s/step\n", "Meep progress: 195.31666666666666/366.6666717529297 = 53.3% done in 8.0s, 7.0s to go\n", "on time step 11733 (time=195.55), 0.000680444 s/step\n", "Meep progress: 290.3666666666667/366.6666717529297 = 79.2% done in 12.0s, 3.2s to go\n", "on time step 17439 (time=290.65), 0.000701091 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.2321007699342635, -6.589441383742643e-10, 176115664.75642273, 0.7050710049152503, -0.3914039769859229-0.5864537908239694i, 2.563795272483861e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.2, 0.2321007699342635\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00154901 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.6,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.6,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0192392 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.763979) = 0.231754 after 10 iters\n", "MPB solved for frequency_1(0,0,0.765136) = 0.232101 after 6 iters\n", "MPB solved for frequency_1(0,0,0.765136) = 0.232101 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.763979) = 0.231754 after 10 iters\n", "MPB solved for frequency_1(0,0,0.765136) = 0.232101 after 6 iters\n", "MPB solved for frequency_1(0,0,0.765136) = 0.232101 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ae454de372884127a593b61a598bd379", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 83.15/666.6666717529297 = 12.5% done in 4.0s, 28.1s to go\n", "on time step 5003 (time=83.3833), 0.000799551 s/step\n", "Meep progress: 168.0/666.6666717529297 = 25.2% done in 8.0s, 23.7s to go\n", "on time step 10096 (time=168.267), 0.000785392 s/step\n", "Meep progress: 252.48333333333332/666.6666717529297 = 37.9% done in 12.0s, 19.7s to go\n", "on time step 15165 (time=252.75), 0.00078922 s/step\n", "Meep progress: 336.6166666666667/666.6666717529297 = 50.5% done in 16.0s, 15.7s to go\n", "on time step 20213 (time=336.883), 0.000792426 s/step\n", "Meep progress: 421.5/666.6666717529297 = 63.2% done in 20.0s, 11.6s to go\n", "on time step 25308 (time=421.8), 0.000785113 s/step\n", "Meep progress: 506.68333333333334/666.6666717529297 = 76.0% done in 24.0s, 7.6s to go\n", "on time step 30420 (time=507), 0.000782534 s/step\n", "Meep progress: 591.7833333333333/666.6666717529297 = 88.8% done in 28.0s, 3.5s to go\n", "on time step 35528 (time=592.133), 0.000783211 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00184393 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.6,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.6,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.015429 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "cf6496e54bc04252bd6312b4c1784ff9", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 98.25/366.6666717529297 = 26.8% done in 4.0s, 10.9s to go\n", "on time step 5906 (time=98.4333), 0.000677395 s/step\n", "Meep progress: 196.18333333333334/366.6666717529297 = 53.5% done in 8.0s, 7.0s to go\n", "on time step 11784 (time=196.4), 0.000680643 s/step\n", "Meep progress: 289.8/366.6666717529297 = 79.0% done in 12.0s, 3.2s to go\n", "on time step 17401 (time=290.017), 0.000712187 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.21796392210149537, 2.7101979244778688e-08, -4021180.8911241614, 1.2931472666535015, -0.6549272150232459+1.1150337197929565i, 1.1090356875112212e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.2, 0.21796392210149537\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.0045712 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.6,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.6,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0223899 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.717283) = 0.217732 after 10 iters\n", "MPB solved for frequency_1(0,0,0.718056) = 0.217964 after 6 iters\n", "MPB solved for frequency_1(0,0,0.718056) = 0.217964 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.717283) = 0.217732 after 10 iters\n", "MPB solved for frequency_1(0,0,0.718056) = 0.217964 after 6 iters\n", "MPB solved for frequency_1(0,0,0.718056) = 0.217964 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d5cd0cc64a6c4b4c89c769e543a30d50", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 80.98333333333333/666.6666717529297 = 12.1% done in 4.0s, 28.9s to go\n", "on time step 4873 (time=81.2167), 0.000821001 s/step\n", "Meep progress: 167.45/666.6666717529297 = 25.1% done in 8.0s, 23.9s to go\n", "on time step 10064 (time=167.733), 0.00077061 s/step\n", "Meep progress: 249.98333333333332/666.6666717529297 = 37.5% done in 12.0s, 20.0s to go\n", "on time step 15016 (time=250.267), 0.000807818 s/step\n", "Meep progress: 332.5833333333333/666.6666717529297 = 49.9% done in 16.0s, 16.1s to go\n", "on time step 19974 (time=332.9), 0.000806779 s/step\n", "Meep progress: 416.75/666.6666717529297 = 62.5% done in 20.0s, 12.0s to go\n", "on time step 25023 (time=417.05), 0.000792321 s/step\n", "Meep progress: 500.4166666666667/666.6666717529297 = 75.1% done in 24.0s, 8.0s to go\n", "on time step 30045 (time=500.75), 0.000796587 s/step\n", "Meep progress: 584.0333333333333/666.6666717529297 = 87.6% done in 28.0s, 4.0s to go\n", "on time step 35066 (time=584.433), 0.000796753 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00176692 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.65,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.65,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.022615 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3746edd53d114015b5824f25e125594b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 98.23333333333333/366.6666717529297 = 26.8% done in 4.0s, 10.9s to go\n", "on time step 5908 (time=98.4667), 0.00067706 s/step\n", "Meep progress: 195.71666666666667/366.6666717529297 = 53.4% done in 8.0s, 7.0s to go\n", "on time step 11757 (time=195.95), 0.000683889 s/step\n", "Meep progress: 289.85/366.6666717529297 = 79.0% done in 12.0s, 3.2s to go\n", "on time step 17406 (time=290.1), 0.000708109 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.23050129868403818, 1.1111522223430954e-09, -103721746.69190612, 0.8510771099307869, 0.2097756989886373-0.824819012366937i, 2.532377183551288e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.30000000000000004, 0.23050129868403818\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00193691 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.65,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.65,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0224741 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.759804) = 0.230167 after 12 iters\n", "MPB solved for frequency_1(0,0,0.760921) = 0.230501 after 7 iters\n", "MPB solved for frequency_1(0,0,0.760921) = 0.230501 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.759804) = 0.230167 after 12 iters\n", "MPB solved for frequency_1(0,0,0.760921) = 0.230501 after 7 iters\n", "MPB solved for frequency_1(0,0,0.760921) = 0.230501 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "11a3ef7cf85a4d2a9db9e4e40bd4b300", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 84.26666666666667/666.6666717529297 = 12.6% done in 4.0s, 27.6s to go\n", "on time step 5068 (time=84.4667), 0.000789299 s/step\n", "Meep progress: 168.88333333333333/666.6666717529297 = 25.3% done in 8.0s, 23.6s to go\n", "on time step 10146 (time=169.1), 0.000787785 s/step\n", "Meep progress: 253.36666666666667/666.6666717529297 = 38.0% done in 12.0s, 19.6s to go\n", "on time step 15217 (time=253.617), 0.000788949 s/step\n", "Meep progress: 337.76666666666665/666.6666717529297 = 50.7% done in 16.0s, 15.6s to go\n", "on time step 20281 (time=338.017), 0.000789954 s/step\n", "Meep progress: 422.93333333333334/666.6666717529297 = 63.4% done in 20.0s, 11.5s to go\n", "on time step 25393 (time=423.217), 0.000782588 s/step\n", "Meep progress: 507.96666666666664/666.6666717529297 = 76.2% done in 24.0s, 7.5s to go\n", "on time step 30498 (time=508.3), 0.000783646 s/step\n", "Meep progress: 592.5/666.6666717529297 = 88.9% done in 28.0s, 3.5s to go\n", "on time step 35571 (time=592.85), 0.000788548 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00206399 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.65,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.65,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.020714 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "05665f9e0ca64c61919b04105aea010b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 97.15/366.6666717529297 = 26.5% done in 4.0s, 11.1s to go\n", "on time step 5847 (time=97.45), 0.000684132 s/step\n", "Meep progress: 194.53333333333333/366.6666717529297 = 53.1% done in 8.0s, 7.1s to go\n", "on time step 11689 (time=194.817), 0.000684739 s/step\n", "Meep progress: 288.7/366.6666717529297 = 78.7% done in 12.0s, 3.2s to go\n", "on time step 17342 (time=289.033), 0.000707681 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.2202853119212703, 1.661718958542485e-08, -6628236.104211189, 1.3726411235812384, 0.8679324852926675+1.0634081319606588i, 4.943132075236113e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.30000000000000004, 0.2202853119212703\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00254488 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.65,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.65,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0223539 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.726009) = 0.220034 after 11 iters\n", "MPB solved for frequency_1(0,0,0.726846) = 0.220285 after 6 iters\n", "MPB solved for frequency_1(0,0,0.726846) = 0.220285 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.726009) = 0.220034 after 11 iters\n", "MPB solved for frequency_1(0,0,0.726846) = 0.220285 after 6 iters\n", "MPB solved for frequency_1(0,0,0.726846) = 0.220285 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "32edc002b0594a85872a5f15e469b486", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 83.03333333333333/666.6666717529297 = 12.5% done in 4.0s, 28.1s to go\n", "on time step 4991 (time=83.1833), 0.000801588 s/step\n", "Meep progress: 166.5/666.6666717529297 = 25.0% done in 8.0s, 24.0s to go\n", "on time step 10001 (time=166.683), 0.000798491 s/step\n", "Meep progress: 250.11666666666667/666.6666717529297 = 37.5% done in 12.0s, 20.0s to go\n", "on time step 15019 (time=250.317), 0.0007972 s/step\n", "Meep progress: 334.71666666666664/666.6666717529297 = 50.2% done in 16.0s, 15.9s to go\n", "on time step 20097 (time=334.95), 0.000787764 s/step\n", "Meep progress: 418.81666666666666/666.6666717529297 = 62.8% done in 20.0s, 11.8s to go\n", "on time step 25142 (time=419.033), 0.000792875 s/step\n", "Meep progress: 503.55/666.6666717529297 = 75.5% done in 24.0s, 7.8s to go\n", "on time step 30228 (time=503.8), 0.000786594 s/step\n", "Meep progress: 587.45/666.6666717529297 = 88.1% done in 28.0s, 3.8s to go\n", "on time step 35264 (time=587.733), 0.000794317 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00176716 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.7,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.7,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0131691 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1b075265f05142889634e50818f79e06", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 98.36666666666666/366.6666717529297 = 26.8% done in 4.0s, 10.9s to go\n", "on time step 5915 (time=98.5833), 0.000676356 s/step\n", "Meep progress: 196.03333333333333/366.6666717529297 = 53.5% done in 8.0s, 7.0s to go\n", "on time step 11777 (time=196.283), 0.000682479 s/step\n", "Meep progress: 289.5833333333333/366.6666717529297 = 79.0% done in 12.0s, 3.2s to go\n", "on time step 17392 (time=289.867), 0.000712464 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22938047554467897, 2.8259525192417854e-09, -40584630.13494343, 0.9554083501216192, 0.7088623048929175-0.6405617442401746i, 4.7858601707454104e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.4, 0.22938047554467897\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00361514 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.7,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.7,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0198278 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.754994) = 0.229057 after 10 iters\n", "MPB solved for frequency_1(0,0,0.75607) = 0.22938 after 6 iters\n", "MPB solved for frequency_1(0,0,0.75607) = 0.22938 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.754994) = 0.229057 after 10 iters\n", "MPB solved for frequency_1(0,0,0.75607) = 0.22938 after 6 iters\n", "MPB solved for frequency_1(0,0,0.75607) = 0.22938 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "49e7f1011eb04db090ccea4009ce3a6a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 82.06666666666666/666.6666717529297 = 12.3% done in 4.0s, 28.5s to go\n", "on time step 4936 (time=82.2667), 0.000810417 s/step\n", "Meep progress: 166.41666666666666/666.6666717529297 = 25.0% done in 8.0s, 24.0s to go\n", "on time step 9998 (time=166.633), 0.000790205 s/step\n", "Meep progress: 249.71666666666667/666.6666717529297 = 37.5% done in 12.0s, 20.0s to go\n", "on time step 14996 (time=249.933), 0.00080039 s/step\n", "Meep progress: 333.55/666.6666717529297 = 50.0% done in 16.0s, 16.0s to go\n", "on time step 20028 (time=333.8), 0.000795032 s/step\n", "Meep progress: 416.65/666.6666717529297 = 62.5% done in 20.0s, 12.0s to go\n", "on time step 25015 (time=416.917), 0.000802087 s/step\n", "Meep progress: 500.7/666.6666717529297 = 75.1% done in 24.0s, 8.0s to go\n", "on time step 30060 (time=501), 0.00079297 s/step\n", "Meep progress: 584.4666666666667/666.6666717529297 = 87.7% done in 28.0s, 3.9s to go\n", "on time step 35087 (time=584.783), 0.000795733 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00191903 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.7,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.7,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.029588 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "20771f63a2984401ad8c7b9ba6494fb8", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 97.71666666666667/366.6666717529297 = 26.6% done in 4.0s, 11.0s to go\n", "on time step 5876 (time=97.9333), 0.000680849 s/step\n", "Meep progress: 194.2/366.6666717529297 = 53.0% done in 8.0s, 7.1s to go\n", "on time step 11665 (time=194.417), 0.000690981 s/step\n", "Meep progress: 286.93333333333334/366.6666717529297 = 78.3% done in 12.0s, 3.3s to go\n", "on time step 17231 (time=287.183), 0.000718741 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22197905508783583, 2.689453714201604e-09, -41268428.21567816, 1.380617017276195, 1.3806167115397914-0.0009188088320141777i, 5.815262450716548e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.4, 0.22197905508783583\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00408697 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.7,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.7,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0230129 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.730545) = 0.221717 after 10 iters\n", "MPB solved for frequency_1(0,0,0.731419) = 0.221979 after 6 iters\n", "MPB solved for frequency_1(0,0,0.731419) = 0.221979 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.730545) = 0.221717 after 10 iters\n", "MPB solved for frequency_1(0,0,0.731419) = 0.221979 after 6 iters\n", "MPB solved for frequency_1(0,0,0.731419) = 0.221979 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e183edf238ee4fb9b268879c6cb80157", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 83.2/666.6666717529297 = 12.5% done in 4.0s, 28.1s to go\n", "on time step 5007 (time=83.45), 0.000798937 s/step\n", "Meep progress: 167.13333333333333/666.6666717529297 = 25.1% done in 8.0s, 23.9s to go\n", "on time step 10044 (time=167.4), 0.000794127 s/step\n", "Meep progress: 251.06666666666666/666.6666717529297 = 37.7% done in 12.0s, 19.9s to go\n", "on time step 15081 (time=251.35), 0.000794205 s/step\n", "Meep progress: 334.51666666666665/666.6666717529297 = 50.2% done in 16.0s, 15.9s to go\n", "on time step 20090 (time=334.833), 0.000798598 s/step\n", "Meep progress: 423.31666666666666/666.6666717529297 = 63.5% done in 20.0s, 11.5s to go\n", "on time step 25419 (time=423.65), 0.000750669 s/step\n", "Meep progress: 507.84999999999997/666.6666717529297 = 76.2% done in 24.0s, 7.5s to go\n", "on time step 30493 (time=508.217), 0.000788413 s/step\n", "Meep progress: 592.3333333333334/666.6666717529297 = 88.8% done in 28.0s, 3.5s to go\n", "on time step 35564 (time=592.733), 0.000788837 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.0018878 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.75,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.75,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.016355 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b214004d80b44af9ab864af98dae656b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 93.36666666666666/366.6666717529297 = 25.5% done in 4.0s, 11.7s to go\n", "on time step 5619 (time=93.65), 0.000711909 s/step\n", "Meep progress: 186.51666666666665/366.6666717529297 = 50.9% done in 8.0s, 7.7s to go\n", "on time step 11208 (time=186.8), 0.000715819 s/step\n", "Meep progress: 275.8333333333333/366.6666717529297 = 75.2% done in 12.0s, 4.0s to go\n", "on time step 16567 (time=276.117), 0.000746435 s/step\n", "Meep progress: 364.9166666666667/366.6666717529297 = 99.5% done in 16.0s, 0.1s to go\n", "on time step 21916 (time=365.267), 0.000747914 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22839396754116606, 4.693442764536769e-09, -24331176.387926824, 1.0415890909263652, 1.0168824850407956-0.22551684184128717i, 4.249035856082629e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.5, 0.22839396754116606\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00539398 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.75,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.75,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.023149 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.752833) = 0.228077 after 12 iters\n", "MPB solved for frequency_1(0,0,0.753888) = 0.228394 after 7 iters\n", "MPB solved for frequency_1(0,0,0.753888) = 0.228394 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.752833) = 0.228077 after 12 iters\n", "MPB solved for frequency_1(0,0,0.753888) = 0.228394 after 7 iters\n", "MPB solved for frequency_1(0,0,0.753888) = 0.228394 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "35aea70ba52b49b285dbd05619bd4a8e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 81.8/666.6666717529297 = 12.3% done in 4.0s, 28.6s to go\n", "on time step 4924 (time=82.0667), 0.000812495 s/step\n", "Meep progress: 164.1/666.6666717529297 = 24.6% done in 8.0s, 24.5s to go\n", "on time step 9862 (time=164.367), 0.000810167 s/step\n", "Meep progress: 247.63333333333333/666.6666717529297 = 37.1% done in 12.0s, 20.3s to go\n", "on time step 14875 (time=247.917), 0.00079793 s/step\n", "Meep progress: 330.1666666666667/666.6666717529297 = 49.5% done in 16.0s, 16.3s to go\n", "on time step 19829 (time=330.483), 0.000807541 s/step\n", "Meep progress: 413.0333333333333/666.6666717529297 = 62.0% done in 20.0s, 12.3s to go\n", "on time step 24804 (time=413.4), 0.000804159 s/step\n", "Meep progress: 496.95/666.6666717529297 = 74.5% done in 24.0s, 8.2s to go\n", "on time step 29839 (time=497.317), 0.000794594 s/step\n", "Meep progress: 580.2166666666667/666.6666717529297 = 87.0% done in 28.0s, 4.2s to go\n", "on time step 34837 (time=580.617), 0.000800409 s/step\n", "Meep progress: 664.0166666666667/666.6666717529297 = 99.6% done in 32.0s, 0.1s to go\n", "on time step 39867 (time=664.45), 0.000795323 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00177789 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.75,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.75,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0188749 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6f23ec57cbd44ccd9c05b973705f2da3", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 96.9/366.6666717529297 = 26.4% done in 4.0s, 11.1s to go\n", "on time step 5834 (time=97.2333), 0.000685744 s/step\n", "Meep progress: 194.31666666666666/366.6666717529297 = 53.0% done in 8.0s, 7.1s to go\n", "on time step 11679 (time=194.65), 0.000684423 s/step\n", "Meep progress: 288.7/366.6666717529297 = 78.7% done in 12.0s, 3.2s to go\n", "on time step 17345 (time=289.083), 0.000705968 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.2230300941405038, -7.841965023994586e-09, 14220293.858623678, 1.3613884433238386, 1.1598737564442396-0.7127912476508345i, 7.609870353913999e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.5, 0.2230300941405038\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00159287 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.75,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.75,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.02321 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.735089) = 0.222758 after 11 iters\n", "MPB solved for frequency_1(0,0,0.735997) = 0.22303 after 6 iters\n", "MPB solved for frequency_1(0,0,0.735997) = 0.22303 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.735089) = 0.222758 after 11 iters\n", "MPB solved for frequency_1(0,0,0.735997) = 0.22303 after 6 iters\n", "MPB solved for frequency_1(0,0,0.735997) = 0.22303 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e436a71259cd488398bd3aedff3a057c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 82.91666666666667/666.6666717529297 = 12.4% done in 4.0s, 28.2s to go\n", "on time step 4986 (time=83.1), 0.000802322 s/step\n", "Meep progress: 165.63333333333333/666.6666717529297 = 24.8% done in 8.0s, 24.2s to go\n", "on time step 9950 (time=165.833), 0.000805971 s/step\n", "Meep progress: 249.08333333333334/666.6666717529297 = 37.4% done in 12.0s, 20.1s to go\n", "on time step 14957 (time=249.283), 0.000798944 s/step\n", "Meep progress: 332.0333333333333/666.6666717529297 = 49.8% done in 16.0s, 16.1s to go\n", "on time step 19937 (time=332.283), 0.00080335 s/step\n", "Meep progress: 416.8333333333333/666.6666717529297 = 62.5% done in 20.0s, 12.0s to go\n", "on time step 25028 (time=417.133), 0.000785816 s/step\n", "Meep progress: 501.56666666666666/666.6666717529297 = 75.2% done in 24.0s, 7.9s to go\n", "on time step 30113 (time=501.883), 0.000786698 s/step\n", "Meep progress: 585.2666666666667/666.6666717529297 = 87.8% done in 28.0s, 3.9s to go\n", "on time step 35137 (time=585.617), 0.000796204 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.0018599 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.8,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.8,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0129621 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5218926d24124ece9c74de7f1cc1effc", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 97.08333333333333/366.6666717529297 = 26.5% done in 4.0s, 11.1s to go\n", "on time step 5839 (time=97.3167), 0.000685119 s/step\n", "Meep progress: 193.31666666666666/366.6666717529297 = 52.7% done in 8.0s, 7.2s to go\n", "on time step 11612 (time=193.533), 0.000692887 s/step\n", "Meep progress: 287.93333333333334/366.6666717529297 = 78.5% done in 12.0s, 3.3s to go\n", "on time step 17291 (time=288.183), 0.000704366 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22779219587071284, 6.5733308116063705e-09, -17326999.233669, 1.0936986894641623, 1.0885703324807652+0.10578967141617628i, 1.6452384436270636e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.6, 0.22779219587071284\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00145602 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.8,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.8,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0227098 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.749747) = 0.227483 after 10 iters\n", "MPB solved for frequency_1(0,0,0.750779) = 0.227792 after 6 iters\n", "MPB solved for frequency_1(0,0,0.750779) = 0.227792 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.749747) = 0.227483 after 10 iters\n", "MPB solved for frequency_1(0,0,0.750779) = 0.227792 after 6 iters\n", "MPB solved for frequency_1(0,0,0.750779) = 0.227792 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "bb85e22b6bea4492b28f6bd247b5fe39", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 81.93333333333334/666.6666717529297 = 12.3% done in 4.0s, 28.6s to go\n", "on time step 4932 (time=82.2), 0.000811153 s/step\n", "Meep progress: 164.1/666.6666717529297 = 24.6% done in 8.0s, 24.5s to go\n", "on time step 9863 (time=164.383), 0.000811203 s/step\n", "Meep progress: 246.46666666666667/666.6666717529297 = 37.0% done in 12.0s, 20.5s to go\n", "on time step 14805 (time=246.75), 0.000809507 s/step\n", "Meep progress: 328.0/666.6666717529297 = 49.2% done in 16.0s, 16.5s to go\n", "on time step 19699 (time=328.317), 0.000817414 s/step\n", "Meep progress: 410.98333333333335/666.6666717529297 = 61.6% done in 20.0s, 12.4s to go\n", "on time step 24678 (time=411.3), 0.000803526 s/step\n", "Meep progress: 493.6333333333333/666.6666717529297 = 74.0% done in 24.0s, 8.4s to go\n", "on time step 29641 (time=494.017), 0.000806037 s/step\n", "Meep progress: 575.4833333333333/666.6666717529297 = 86.3% done in 28.0s, 4.4s to go\n", "on time step 34552 (time=575.867), 0.000814608 s/step\n", "Meep progress: 657.2666666666667/666.6666717529297 = 98.6% done in 32.0s, 0.5s to go\n", "on time step 39463 (time=657.717), 0.000814686 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00235796 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.8,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.8,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0135491 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b671743684474e82b4692b977e92a73a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 98.13333333333333/366.6666717529297 = 26.8% done in 4.0s, 10.9s to go\n", "on time step 5904 (time=98.4), 0.000677588 s/step\n", "Meep progress: 195.1/366.6666717529297 = 53.2% done in 8.0s, 7.0s to go\n", "on time step 11722 (time=195.367), 0.000687535 s/step\n", "Meep progress: 289.7/366.6666717529297 = 79.0% done in 12.0s, 3.2s to go\n", "on time step 17400 (time=290), 0.00070453 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22389046766301668, -1.7192955887682313e-08, 6511110.396770701, 1.3350122958073318, 0.7195356752054972-1.124511557105276i, 1.7074960255719633e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.6, 0.22389046766301668\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00139403 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.8,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.8,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0244219 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.736859) = 0.223613 after 10 iters\n", "MPB solved for frequency_1(0,0,0.737783) = 0.22389 after 6 iters\n", "MPB solved for frequency_1(0,0,0.737783) = 0.22389 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.736859) = 0.223613 after 10 iters\n", "MPB solved for frequency_1(0,0,0.737783) = 0.22389 after 6 iters\n", "MPB solved for frequency_1(0,0,0.737783) = 0.22389 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "291128db6c26474996b42b7bfffc01a6", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 80.78333333333333/666.6666717529297 = 12.1% done in 4.0s, 29.0s to go\n", "on time step 4859 (time=80.9833), 0.00082328 s/step\n", "Meep progress: 163.13333333333333/666.6666717529297 = 24.5% done in 8.0s, 24.7s to go\n", "on time step 9802 (time=163.367), 0.000809344 s/step\n", "Meep progress: 246.68333333333334/666.6666717529297 = 37.0% done in 12.0s, 20.4s to go\n", "on time step 14815 (time=246.917), 0.000798049 s/step\n", "Meep progress: 328.95/666.6666717529297 = 49.3% done in 16.0s, 16.4s to go\n", "on time step 19751 (time=329.183), 0.000810423 s/step\n", "Meep progress: 411.5/666.6666717529297 = 61.7% done in 20.0s, 12.4s to go\n", "on time step 24705 (time=411.75), 0.000807463 s/step\n", "Meep progress: 494.3333333333333/666.6666717529297 = 74.1% done in 24.0s, 8.4s to go\n", "on time step 29677 (time=494.617), 0.000804549 s/step\n", "Meep progress: 576.9/666.6666717529297 = 86.5% done in 28.0s, 4.4s to go\n", "on time step 34633 (time=577.217), 0.000807203 s/step\n", "Meep progress: 659.4/666.6666717529297 = 98.9% done in 32.0s, 0.4s to go\n", "on time step 39582 (time=659.7), 0.000808279 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.0023129 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.85,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.85,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.013726 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3132625bea184efaa79e72754b9a7edc", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 98.66666666666667/366.6666717529297 = 26.9% done in 4.0s, 10.9s to go\n", "on time step 5932 (time=98.8667), 0.000674405 s/step\n", "Meep progress: 196.48333333333332/366.6666717529297 = 53.6% done in 8.0s, 6.9s to go\n", "on time step 11802 (time=196.7), 0.000681457 s/step\n", "Meep progress: 289.5833333333333/366.6666717529297 = 79.0% done in 12.0s, 3.2s to go\n", "on time step 17390 (time=289.833), 0.000715836 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.2272133016731052, 8.742503028543528e-09, -12994751.098814214, 1.1387362638662792, 1.0488380657857905+0.4434625016874079i, 6.376331244480289e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.7000000000000001, 0.2272133016731052\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00217509 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.85,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.85,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0203781 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.748927) = 0.226907 after 12 iters\n", "MPB solved for frequency_1(0,0,0.749949) = 0.227213 after 7 iters\n", "MPB solved for frequency_1(0,0,0.749949) = 0.227213 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.748927) = 0.226907 after 12 iters\n", "MPB solved for frequency_1(0,0,0.749949) = 0.227213 after 7 iters\n", "MPB solved for frequency_1(0,0,0.749949) = 0.227213 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "00b16ae25da64c109934700b9b64b551", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 80.98333333333333/666.6666717529297 = 12.1% done in 4.0s, 28.9s to go\n", "on time step 4872 (time=81.2), 0.000821152 s/step\n", "Meep progress: 163.65/666.6666717529297 = 24.5% done in 8.0s, 24.6s to go\n", "on time step 9835 (time=163.917), 0.000806157 s/step\n", "Meep progress: 245.54999999999998/666.6666717529297 = 36.8% done in 12.0s, 20.6s to go\n", "on time step 14749 (time=245.817), 0.000814041 s/step\n", "Meep progress: 328.2/666.6666717529297 = 49.2% done in 16.0s, 16.5s to go\n", "on time step 19710 (time=328.5), 0.000806343 s/step\n", "Meep progress: 409.6666666666667/666.6666717529297 = 61.4% done in 20.0s, 12.5s to go\n", "on time step 24599 (time=409.983), 0.000818225 s/step\n", "Meep progress: 492.71666666666664/666.6666717529297 = 73.9% done in 24.0s, 8.5s to go\n", "on time step 29585 (time=493.083), 0.000802381 s/step\n", "Meep progress: 575.6666666666666/666.6666717529297 = 86.3% done in 28.0s, 4.4s to go\n", "on time step 34560 (time=576), 0.000804049 s/step\n", "Meep progress: 657.1666666666666/666.6666717529297 = 98.6% done in 32.0s, 0.5s to go\n", "on time step 39453 (time=657.55), 0.000817607 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00278711 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.85,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.85,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0183229 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b09562e43e724c0db50a813c1b962259", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 97.63333333333333/366.6666717529297 = 26.6% done in 4.0s, 11.0s to go\n", "on time step 5868 (time=97.8), 0.000681683 s/step\n", "Meep progress: 194.08333333333334/366.6666717529297 = 52.9% done in 8.0s, 7.1s to go\n", "on time step 11656 (time=194.267), 0.000691144 s/step\n", "Meep progress: 287.7/366.6666717529297 = 78.5% done in 12.0s, 3.3s to go\n", "on time step 17275 (time=287.917), 0.000711899 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22437226062905724, -2.3099396489881195e-08, 4856669.3230999485, 1.313923864774931, 0.4094809417964661-1.2484875973475147i, 1.7003140322728657e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.7000000000000001, 0.22437226062905724\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00296402 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.85,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.85,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0208819 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.739529) = 0.224089 after 12 iters\n", "MPB solved for frequency_1(0,0,0.740473) = 0.224372 after 6 iters\n", "MPB solved for frequency_1(0,0,0.740473) = 0.224372 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.739529) = 0.224089 after 12 iters\n", "MPB solved for frequency_1(0,0,0.740473) = 0.224372 after 6 iters\n", "MPB solved for frequency_1(0,0,0.740473) = 0.224372 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "be6d782d86854a299bd5634c042b1837", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 82.01666666666667/666.6666717529297 = 12.3% done in 4.0s, 28.5s to go\n", "on time step 4933 (time=82.2167), 0.000811033 s/step\n", "Meep progress: 163.2/666.6666717529297 = 24.5% done in 8.0s, 24.7s to go\n", "on time step 9805 (time=163.417), 0.000821053 s/step\n", "Meep progress: 246.13333333333333/666.6666717529297 = 36.9% done in 12.0s, 20.5s to go\n", "on time step 14783 (time=246.383), 0.000803661 s/step\n", "Meep progress: 328.68333333333334/666.6666717529297 = 49.3% done in 16.0s, 16.5s to go\n", "on time step 19737 (time=328.95), 0.000807463 s/step\n", "Meep progress: 410.4166666666667/666.6666717529297 = 61.6% done in 20.0s, 12.5s to go\n", "on time step 24642 (time=410.7), 0.000815659 s/step\n", "Meep progress: 492.2833333333333/666.6666717529297 = 73.8% done in 24.0s, 8.5s to go\n", "on time step 29554 (time=492.567), 0.000814442 s/step\n", "Meep progress: 575.4166666666666/666.6666717529297 = 86.3% done in 28.0s, 4.4s to go\n", "on time step 34545 (time=575.75), 0.000801476 s/step\n", "Meep progress: 658.3/666.6666717529297 = 98.7% done in 32.0s, 0.4s to go\n", "on time step 39517 (time=658.617), 0.000804507 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00178504 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.9,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.9,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.012604 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c2b5a9f01c2b49eaa039716b0b7bd1da", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 97.18333333333334/366.6666717529297 = 26.5% done in 4.0s, 11.1s to go\n", "on time step 5847 (time=97.45), 0.000684151 s/step\n", "Meep progress: 192.4/366.6666717529297 = 52.5% done in 8.0s, 7.2s to go\n", "on time step 11561 (time=192.683), 0.000700084 s/step\n", "Meep progress: 284.7/366.6666717529297 = 77.6% done in 12.0s, 3.5s to go\n", "on time step 17100 (time=285), 0.000722162 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22692081083425694, 1.1307039395132144e-08, -10034492.801535204, 1.1623124097996433, 0.9889626651292537+0.6106742052475259i, 7.110203970811583e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.8, 0.22692081083425694\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00310993 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.9,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.9,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0245988 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.746869) = 0.226619 after 10 iters\n", "MPB solved for frequency_1(0,0,0.747876) = 0.226921 after 6 iters\n", "MPB solved for frequency_1(0,0,0.747876) = 0.226921 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.746869) = 0.226619 after 10 iters\n", "MPB solved for frequency_1(0,0,0.747876) = 0.226921 after 6 iters\n", "MPB solved for frequency_1(0,0,0.747876) = 0.226921 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "26d380369f4047da9fb61042e8adcd81", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 82.35/666.6666717529297 = 12.4% done in 4.0s, 28.4s to go\n", "on time step 4956 (time=82.6), 0.000807173 s/step\n", "Meep progress: 165.3/666.6666717529297 = 24.8% done in 8.0s, 24.3s to go\n", "on time step 9936 (time=165.6), 0.00080335 s/step\n", "Meep progress: 248.29999999999998/666.6666717529297 = 37.2% done in 12.0s, 20.2s to go\n", "on time step 14916 (time=248.6), 0.000803232 s/step\n", "Meep progress: 331.3833333333333/666.6666717529297 = 49.7% done in 16.0s, 16.2s to go\n", "on time step 19901 (time=331.683), 0.000802426 s/step\n", "Meep progress: 414.55/666.6666717529297 = 62.2% done in 20.0s, 12.2s to go\n", "on time step 24893 (time=414.883), 0.000801303 s/step\n", "Meep progress: 497.6666666666667/666.6666717529297 = 74.6% done in 24.0s, 8.2s to go\n", "on time step 29882 (time=498.033), 0.000801855 s/step\n", "Meep progress: 580.8333333333334/666.6666717529297 = 87.1% done in 28.0s, 4.1s to go\n", "on time step 34873 (time=581.217), 0.000801512 s/step\n", "Meep progress: 663.0/666.6666717529297 = 99.4% done in 32.0s, 0.2s to go\n", "on time step 39805 (time=663.417), 0.000811121 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00191712 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.9,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.9,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.013334 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9268b5878e46401383a15b709fc207e2", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 95.85/366.6666717529297 = 26.1% done in 4.0s, 11.3s to go\n", "on time step 5762 (time=96.0333), 0.000694243 s/step\n", "Meep progress: 192.11666666666667/366.6666717529297 = 52.4% done in 8.0s, 7.3s to go\n", "on time step 11538 (time=192.3), 0.000692638 s/step\n", "Meep progress: 285.15/366.6666717529297 = 77.8% done in 12.0s, 3.4s to go\n", "on time step 17122 (time=285.367), 0.00071637 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.2248450102131107, -2.925827242064695e-08, 3842417.7439547367, 1.2923701545067185, 0.08958085376950176-1.2892617604263483i, 1.389119717333207e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.8, 0.2248450102131107\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00451803 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.9,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.9,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0211821 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.740012) = 0.22456 after 10 iters\n", "MPB solved for frequency_1(0,0,0.740962) = 0.224845 after 6 iters\n", "MPB solved for frequency_1(0,0,0.740962) = 0.224845 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.740012) = 0.22456 after 10 iters\n", "MPB solved for frequency_1(0,0,0.740962) = 0.224845 after 6 iters\n", "MPB solved for frequency_1(0,0,0.740962) = 0.224845 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0c31aca58273447eb9309328463cb41e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 81.1/666.6666717529297 = 12.2% done in 4.0s, 28.9s to go\n", "on time step 4876 (time=81.2667), 0.000820368 s/step\n", "Meep progress: 162.61666666666667/666.6666717529297 = 24.4% done in 8.0s, 24.8s to go\n", "on time step 9769 (time=162.817), 0.000817623 s/step\n", "Meep progress: 243.96666666666667/666.6666717529297 = 36.6% done in 12.0s, 20.8s to go\n", "on time step 14650 (time=244.167), 0.000819636 s/step\n", "Meep progress: 326.0833333333333/666.6666717529297 = 48.9% done in 16.0s, 16.7s to go\n", "on time step 19578 (time=326.3), 0.00081184 s/step\n", "Meep progress: 408.95/666.6666717529297 = 61.3% done in 20.0s, 12.6s to go\n", "on time step 24552 (time=409.2), 0.000804271 s/step\n", "Meep progress: 491.7/666.6666717529297 = 73.8% done in 24.0s, 8.5s to go\n", "on time step 29519 (time=491.983), 0.00080546 s/step\n", "Meep progress: 574.1666666666666/666.6666717529297 = 86.1% done in 28.0s, 4.5s to go\n", "on time step 34468 (time=574.467), 0.000808346 s/step\n", "Meep progress: 658.6333333333333/666.6666717529297 = 98.8% done in 32.0s, 0.4s to go\n", "on time step 39536 (time=658.933), 0.000789417 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00183201 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.95,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.95,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.012459 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1c47ae4da9804255bbe8a11a807fefbd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 98.45/366.6666717529297 = 26.8% done in 4.0s, 10.9s to go\n", "on time step 5917 (time=98.6167), 0.000676164 s/step\n", "Meep progress: 195.05/366.6666717529297 = 53.2% done in 8.0s, 7.0s to go\n", "on time step 11715 (time=195.25), 0.000689941 s/step\n", "Meep progress: 288.35/366.6666717529297 = 78.6% done in 12.0s, 3.3s to go\n", "on time step 17313 (time=288.55), 0.000714587 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22657284275616438, 1.4388403173786857e-08, -7873453.364475506, 1.1864826851861325, 0.8798551388030453+0.7959874979975307i, 4.0990972663369745e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.9, 0.22657284275616438\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00310707 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.95,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.95,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0196011 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.746808) = 0.226272 after 12 iters\n", "MPB solved for frequency_1(0,0,0.747813) = 0.226573 after 7 iters\n", "MPB solved for frequency_1(0,0,0.747813) = 0.226573 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.746808) = 0.226272 after 12 iters\n", "MPB solved for frequency_1(0,0,0.747813) = 0.226573 after 7 iters\n", "MPB solved for frequency_1(0,0,0.747813) = 0.226573 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "163cbc8758b949588f6454ca36a3f81b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 81.61666666666666/666.6666717529297 = 12.2% done in 4.0s, 28.7s to go\n", "on time step 4905 (time=81.75), 0.00081566 s/step\n", "Meep progress: 164.35/666.6666717529297 = 24.7% done in 8.0s, 24.5s to go\n", "on time step 9871 (time=164.517), 0.000805577 s/step\n", "Meep progress: 246.91666666666666/666.6666717529297 = 37.0% done in 12.0s, 20.4s to go\n", "on time step 14826 (time=247.1), 0.000807378 s/step\n", "Meep progress: 329.56666666666666/666.6666717529297 = 49.4% done in 16.0s, 16.4s to go\n", "on time step 19787 (time=329.783), 0.000806447 s/step\n", "Meep progress: 411.8666666666667/666.6666717529297 = 61.8% done in 20.0s, 12.4s to go\n", "on time step 24725 (time=412.083), 0.000810105 s/step\n", "Meep progress: 494.0333333333333/666.6666717529297 = 74.1% done in 24.0s, 8.4s to go\n", "on time step 29663 (time=494.383), 0.000810117 s/step\n", "Meep progress: 576.4333333333333/666.6666717529297 = 86.5% done in 28.0s, 4.4s to go\n", "on time step 34601 (time=576.683), 0.000810185 s/step\n", "Meep progress: 658.8166666666666/666.6666717529297 = 98.8% done in 32.0s, 0.4s to go\n", "on time step 39546 (time=659.1), 0.000809041 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00218797 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.95,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.95,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0134099 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e0d410126c864bb1aa8b0d161bc590f8", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 97.06666666666666/366.6666717529297 = 26.5% done in 4.0s, 11.1s to go\n", "on time step 5840 (time=97.3333), 0.000685049 s/step\n", "Meep progress: 194.68333333333334/366.6666717529297 = 53.1% done in 8.0s, 7.1s to go\n", "on time step 11698 (time=194.967), 0.000682896 s/step\n", "Meep progress: 288.45/366.6666717529297 = 78.7% done in 12.0s, 3.3s to go\n", "on time step 17323 (time=288.717), 0.000711171 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22505482918759098, -3.331421542112138e-08, 3377759.7092216844, 1.2802884326550177, -0.05183926206700584-1.2792385085270808i, 1.4238944309468102e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 0.9, 0.22505482918759098\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00150323 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-0.95,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (0.95,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0196998 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.741787) = 0.224766 after 12 iters\n", "MPB solved for frequency_1(0,0,0.742749) = 0.225055 after 6 iters\n", "MPB solved for frequency_1(0,0,0.742749) = 0.225055 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.151963 after 15 iters\n", "MPB solved for frequency_1(0,0,0.741787) = 0.224766 after 12 iters\n", "MPB solved for frequency_1(0,0,0.742749) = 0.225055 after 6 iters\n", "MPB solved for frequency_1(0,0,0.742749) = 0.225055 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0b5fd46eedaa41c593621dbeed7aa53e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 81.55/666.6666717529297 = 12.2% done in 4.0s, 28.7s to go\n", "on time step 4901 (time=81.6833), 0.000816171 s/step\n", "Meep progress: 161.51666666666665/666.6666717529297 = 24.2% done in 8.0s, 25.0s to go\n", "on time step 9700 (time=161.667), 0.000833518 s/step\n", "Meep progress: 243.5/666.6666717529297 = 36.5% done in 12.0s, 20.9s to go\n", "on time step 14621 (time=243.683), 0.000813012 s/step\n", "Meep progress: 326.46666666666664/666.6666717529297 = 49.0% done in 16.0s, 16.7s to go\n", "on time step 19599 (time=326.65), 0.000803559 s/step\n", "Meep progress: 408.7/666.6666717529297 = 61.3% done in 20.0s, 12.6s to go\n", "on time step 24535 (time=408.917), 0.000810512 s/step\n", "Meep progress: 490.46666666666664/666.6666717529297 = 73.6% done in 24.0s, 8.6s to go\n", "on time step 29442 (time=490.7), 0.000815343 s/step\n", "Meep progress: 571.4333333333333/666.6666717529297 = 85.7% done in 28.0s, 4.7s to go\n", "on time step 34304 (time=571.733), 0.000822786 s/step\n", "Meep progress: 652.35/666.6666717529297 = 97.9% done in 32.0s, 0.7s to go\n", "on time step 39159 (time=652.65), 0.000824059 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00182199 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-1,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (1,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.013756 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "acffad1129974b9c931a184a58126db1", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 97.63333333333333/366.6666717529297 = 26.6% done in 4.0s, 11.0s to go\n", "on time step 5871 (time=97.85), 0.000681371 s/step\n", "Meep progress: 195.38333333333333/366.6666717529297 = 53.3% done in 8.0s, 7.0s to go\n", "on time step 11737 (time=195.617), 0.000681959 s/step\n", "Meep progress: 288.0/366.6666717529297 = 78.5% done in 12.0s, 3.3s to go\n", "on time step 17297 (time=288.283), 0.000719542 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.2264506053061966, 1.848141445855612e-08, -6126441.399114868, 1.1963136036156947, 0.833990004289438+0.8576869539297383i, 9.41930743041389e-14+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 1.0, 0.2264506053061966\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00198913 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-1,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (1,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0247951 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.745316) = 0.226152 after 10 iters\n", "MPB solved for frequency_1(0,0,0.74631) = 0.226451 after 6 iters\n", "MPB solved for frequency_1(0,0,0.74631) = 0.226451 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.745316) = 0.226152 after 10 iters\n", "MPB solved for frequency_1(0,0,0.74631) = 0.226451 after 6 iters\n", "MPB solved for frequency_1(0,0,0.74631) = 0.226451 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a4348fa2e77c48249feaaf9a90659b10", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 80.21666666666667/666.6666717529297 = 12.0% done in 4.0s, 29.2s to go\n", "on time step 4831 (time=80.5167), 0.000828124 s/step\n", "Meep progress: 160.66666666666666/666.6666717529297 = 24.1% done in 8.0s, 25.2s to go\n", "on time step 9662 (time=161.033), 0.00082815 s/step\n", "Meep progress: 242.7/666.6666717529297 = 36.4% done in 12.0s, 21.0s to go\n", "on time step 14584 (time=243.067), 0.000812847 s/step\n", "Meep progress: 323.06666666666666/666.6666717529297 = 48.5% done in 16.0s, 17.0s to go\n", "on time step 19408 (time=323.467), 0.000829324 s/step\n", "Meep progress: 403.96666666666664/666.6666717529297 = 60.6% done in 20.0s, 13.0s to go\n", "on time step 24267 (time=404.45), 0.000823243 s/step\n", "Meep progress: 485.68333333333334/666.6666717529297 = 72.9% done in 24.0s, 8.9s to go\n", "on time step 29170 (time=486.167), 0.000815931 s/step\n", "Meep progress: 567.6833333333333/666.6666717529297 = 85.2% done in 28.0s, 4.9s to go\n", "on time step 34092 (time=568.2), 0.00081282 s/step\n", "Meep progress: 648.8666666666667/666.6666717529297 = 97.3% done in 32.0s, 0.9s to go\n", "on time step 38962 (time=649.367), 0.000821455 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00247097 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-1,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (1,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0148768 s\n", "-----------\n", "Meep: using complex fields.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b3f6c97a008c43a3a8241dbd8b8d6e77", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=366.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 98.18333333333334/366.6666717529297 = 26.8% done in 4.0s, 10.9s to go\n", "on time step 5906 (time=98.4333), 0.000677366 s/step\n", "Meep progress: 195.21666666666667/366.6666717529297 = 53.2% done in 8.0s, 7.0s to go\n", "on time step 11728 (time=195.467), 0.000687257 s/step\n", "Meep progress: 288.5333333333333/366.6666717529297 = 78.7% done in 12.0s, 3.2s to go\n", "on time step 17331 (time=288.85), 0.000714072 s/step\n", "harminv0:, frequency, imag. freq., Q, |amp|, amplitude, error\n", "harminv0:, 0.22533719120317752, -3.886614292556672e-08, 2898888.0069052, 1.265821467168656, -0.2370236086793528-1.2434322642080775i, 1.8277875767837685e-13+0.0i\n", "run 0 finished at t = 366.68333333333334 (22001 timesteps)\n", "freq:, 1.0, 0.22533719120317752\n", "-----------\n", "Initializing structure...\n", "Halving computational cell along direction x\n", "Halving computational cell along direction y\n", "time for choose_chunkdivision = 0.00464702 s\n", "Working in 2D dimensions.\n", "Computational cell is 7 x 5 x 0 with resolution 30\n", " block, center = (-1,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", " block, center = (1,0,0)\n", " size (1,1,1e+20)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " dielectric constant epsilon diagonal = (11.9025,11.9025,11.9025)\n", "time for set_epsilon = 0.0233421 s\n", "-----------\n", "Meep: using complex fields.\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.741638) = 0.225048 after 10 iters\n", "MPB solved for frequency_1(0,0,0.742601) = 0.225337 after 6 iters\n", "MPB solved for frequency_1(0,0,0.742601) = 0.225337 after 1 iters\n", "MPB solved for frequency_1(0,0,0.5) = 0.152184 after 14 iters\n", "MPB solved for frequency_1(0,0,0.741638) = 0.225048 after 10 iters\n", "MPB solved for frequency_1(0,0,0.742601) = 0.225337 after 6 iters\n", "MPB solved for frequency_1(0,0,0.742601) = 0.225337 after 1 iters\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6a022e55ec594e10bbff1ebc6c1a6333", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatProgress(value=0.0, description='0% done ', max=666.6666717529297)" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Meep progress: 80.03333333333333/666.6666717529297 = 12.0% done in 4.0s, 29.3s to go\n", "on time step 4812 (time=80.2), 0.000831265 s/step\n", "Meep progress: 158.71666666666667/666.6666717529297 = 23.8% done in 8.0s, 25.6s to go\n", "on time step 9536 (time=158.933), 0.000846831 s/step\n", "Meep progress: 239.76666666666665/666.6666717529297 = 36.0% done in 12.0s, 21.4s to go\n", "on time step 14400 (time=240), 0.000822458 s/step\n", "Meep progress: 321.46666666666664/666.6666717529297 = 48.2% done in 16.0s, 17.2s to go\n", "on time step 19304 (time=321.733), 0.000815746 s/step\n", "Meep progress: 402.9/666.6666717529297 = 60.4% done in 20.0s, 13.1s to go\n", "on time step 24189 (time=403.15), 0.000818995 s/step\n", "Meep progress: 484.1333333333333/666.6666717529297 = 72.6% done in 24.0s, 9.0s to go\n", "on time step 29067 (time=484.45), 0.000820091 s/step\n", "Meep progress: 565.6833333333333/666.6666717529297 = 84.9% done in 28.0s, 5.0s to go\n", "on time step 33961 (time=566.017), 0.000817343 s/step\n", "Meep progress: 646.4166666666666/666.6666717529297 = 97.0% done in 32.0s, 1.0s to go\n", "on time step 38805 (time=646.75), 0.000825862 s/step\n", "run 1 finished at t = 666.6666666666666 (40000 timesteps)\n" ] } ], "source": [ "s = np.arange(0.1, 1.1, 0.1)\n", "fluxes_odd = np.zeros(s.size)\n", "forces_odd = np.zeros(s.size)\n", "fluxes_even = np.zeros(s.size)\n", "forces_even = np.zeros(s.size)\n", "\n", "for k in range(len(s)):\n", " fluxes_odd[k], forces_odd[k] = parallel_waveguide(s[k], True)\n", " fluxes_even[k], forces_even[k] = parallel_waveguide(s[k], False)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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4P379y/TZuHChQ74eeedF3YcgHfo0CGiMa9Zs8YBP/74472oqKhMWWFhob/xxhul77/77jvPzMz01q1b+65du8rU/f777/3ggw/2hg0b+oYNGyr9jFdccUXp/VJcXOyjR492wLt06eLdunXzdevWlbZ75ZVXKv0cJeMFPCcnx7ds2VLhWp07d/b999/fFy9eXFr21VdfeevWrR3w1atXl+lz2LBhDvjVV19d5nOtXr3aO3Xq5Glpab58+fIKYxgwYEDY72vJGDt37uxffvllhfKSn+PZZ5/t27ZtKz3///7f/3PA27VrV+aa7u75+fkR/fcomn+fXbp0ceBDr+bvyJp+JiIiIlLPDB8+nKxyiQqys7O56667AHj22WcrbXfooYdyxx130LDhD5N5Lr74Ylq0aMFbb73Frl27amzMmzZtAqBfv340adKkTFlGRgZ9+/Ytfd+sWTPOOussNm3axHPPPVem7ty5c/nqq6849dRTadOmTYXrdOrUif/93/8tXRhvZlxxxRUArFixgr/97W+0a9eutP7gwYPp2bMnn3/+OWvXrq3QX1paGlOmTKFFixal584991xatWrFp59+yiWXXEL//v1Lyw466CBGjRoFwOLFi0vPv/fee8ydO5d+/frx17/+tUyChZKfy549e5g6dWqY72DVbr31Vg4++OCI699yyy0A3H333XTv3r1MWVZWFoMGDarWOGqKpp+JiIiI1EOrV69m8eLFfPrppxQUFFBcXFwy64NPPvmk0jY5OTkVspU1bNiQQw89lKVLl7J582YOPPDAGhnvkUceSVZWFjNmzKBr166cfvrpVU6RuvDCC5kxYwZTpkzhjDPOKD0/ZcoUgEqnikHwGfcO2iAIGgAaNWrEgAEDKrTp1KkT7777Ll9//XWFNUIdO3akc+fOZc41aNCADh068M033zBkyJBK+wP4+uuvS8/NmzcPgNNOO63ClDn4YUrZkiVLKv1cVTEzTjnllIjrr1+/npUrV3LAAQeU+d7WZQpqpKzMzCANZXXbioiISEK5O9deey333XdfaRBTXl5eXqXn935Csbf9QqmtK0syEC9NmzZlypQpjB8/nvHjxzNhwgSOOOIIBg4cyLnnnkufPn3K1O/duzc9e/Zk3rx5fP7553To0IGvv/6af//73xxyyCGl63/Kq+xpRclTrbZt21aa2rikvLLP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c8wxTJw4ka+//ponnngCM2PUqFFh+xgzZgxmxiOPPFJ6rmPHjlhoSvV9991Ht27dyMjI4Ec/+hG33XYb7g7AsmXLGD58OPvvvz/Z2dmMGDGCzz//vMI19p769corrzBgwACys7Np3bo1F1xwAdu2bQNg06ZNTJgwgYMOOogmTZrQu3fvKqeLvfbaa4wcOZLWrVvTuHFjOnbsyKWXXso333xTpp6Z8fDDDwMwcOBAzKz0VbI+ZtKkSZgZM2fO5O2332b48OEccMABmBnvvfceUPWamm+//ZY//vGPdOvWjaysLJo3b84xxxzDtddey+bNm8N+BolOKj+pKQmpvwxT/mW5elUysyzg78Aq4H9jGxqY2YdhijoVFBSwYMGCWC8hcVRQUACgn4tETPeMREv3THhZWVlkZWWxfft2GjSI799rN240Zs7cD4h8beSMGc5VV+XTurXHdSyReu+99xg6dCg7duygV69e9OzZk/z8fNauXcvkyZMZMmQIgwYNok2bNsyZM4ebb76Z/fffv0wf27dv54knnqBZs2acfPLJbN++HaA0aLn44ouZPn06xx9/PO3bt+f111/n97//PVu2bGHQoEGMHDmSQw45hP79+/PBBx/w7LPP8v777/Pmm2+SsddjrN2huXyzZ8/moYceonv37gwcOJBly5YxdepUPvroI2bNmsWgQYPYuXMnvXr1YsOGDSxZsoShQ4eycOFCunbtWmbsDzzwAH/4wx9o0KABvXr14sADD2TlypXcc889PPfcc7z88su0bdsWgLPPPps333yTNWvWMHjwYNq0aVPaj7uzfft2du7cCcD8+fMZP348nTt3ZuDAgWzYsIHCwkK2b9/Onj17AMjLyyv9XgF89NFHjBw5kvXr19O2bVsGDx5McXExn3zyCbfccgv9+vWjf//+cfm5x6q4uBigzPjj0eeePXsoKCjY55qlkv/GVVcqBzX7hY6FYcoLytXbl5uADsAgd98Vy8BERESkbpg1K53du6NL9rJ7tzFrVjq/+11ifh148MEHKSoqYtasWZx22mllylatWkWzZs1IT0/nnHPO4Y477mD27NlcdNFFZeo98cQTFBQUMGHCBJpUskjomWeeITc3l6OOOgqAjz/+mBNPPJF77rmHxx9/nD/96U/85je/AWDXrl2cccYZLF68mDlz5nDOOedU6G/KlCnMnDmzdLx5eXmcfPLJvPbaa/zsZz/j2GOP5f777y8dy0033cTtt9/OPffcwwMPPFDaz5IlS/jjH/9I+/btefzxx+nWrRsQBCi33347N998M1dffTWzZs0C4P777+eiiy5izZo1XH755VUGGI888gjXX389EyN8FPf999/z61//mvXr13PJJZcwadIk0tPTS8uXL19Oy5YtI+pLIuDuKfkiyEzmwI1hyg8Lla+KoK/jgO+Bh8udzwn18WIcx/1hly5dXOqW+fPn+/z58xM9DEkiumckWrpnKrdnzx5fsWKFr1ixwvfs2RP3/ocMcYfoX0OGxH0oERs2bJgD/vnnn1dZb82aNd6gQQPv1q1bhbJevXo54MuXLy9zvkOHDg749OnTK7Q5/fTTHfCf/OQnFcqeffZZB/y8884rc/68885zwM8999wKbf72t7854M2aNfOtW7eWKfvuu+/czLxDhw5lzp922mkO+EsvvVShv+LiYu/Zs6c3aNDAv/nmmwpjWLhwYYU27u5/+ctfHPBu3bp5cXFxpXUGDBjggK9Zs6b03OzZsx3w7t2718i9GW/btm3zbdu2xbXPaP59dunSxYEPvZq/I6fympq80DErTHnJxiL5YcoBMLOGBAHSNuB38RmaiIiI1AV5efuuE8928dCrVy8ALrzwQt5+++3SaUXldezYkZ/+9Kd88MEHvPXWW6Xn3333XZYuXcoJJ5xA9+7dK207ZMiQCucOPfTQsGWdOgVb/3399ddR93fcccfRvHnzMmXNmjXjgAMOKNNfcXEx8+fPJzs7m8GDB1foz8z48Y9/THFxMUuXRpMDKnDKKaeUrieKxCuvvALABRdcEPdpkVJRKk8/+yJ0DJehrF25euG0A44BNgBPlLvZS/4F9jazXCDf3YdHP1QRERFJhOzs2m0XD1dddRWLFi1i7ty5zJ07l2bNmnHCCScwfPhwRo8eTfZeg5swYQJz585lypQp9OnTBwimgkHwy3g4laUuzsrK2mdZyfqUWPsrKf/2229L32/evJn8/OBv0Q0bVv0r7t7tIhVthrN169YBPwR0UrNSOahZHjoeG6a85Pz7EfbXNvSqTAtgAMHTHBEREUkSAwYE+9BEKycn7kOJWNOmTXn++ed56623WLBgAbm5ucyfP5+XX36ZW2+9lVdffbX0F+3hw4fTrl07Zs+ezd13303Dhg157LHH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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(dpi=150)\n", "plt.plot(s, -forces_odd / fluxes_odd, \"rs\", label=\"anti-symmetric\")\n", "plt.plot(s, -forces_even / fluxes_even, \"bo\", label=\"symmetric\")\n", "plt.grid(True)\n", "plt.xlabel(\"waveguide separation s/a\")\n", "plt.ylabel(\"optical force (F/L)(ac/P)\")\n", "plt.legend(loc=\"upper right\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following figure shows the $E_y$ mode profiles at a waveguide separation distance of 0.1 μm. This figure was generated using the [`plot2D`](https://meep.readthedocs.io/en/latest/Python_User_Interface/#data-visualization) routine and shows the source and flux monitor (red hatches), force monitors (blue lines), and PMLs (green hatches) surrounding the cell. From the force spectra shown above, at this separation distance the anti-symmetric mode is repulsive whereas the symmetric mode is attractive.\n", "\n", "![](https://meep.readthedocs.io/en/latest/images/parallel_wvgs_s0.1.png)\n", "\n", "The MPB simulation is in [examples/parallel-wvgs-mpb.py](https://github.com/NanoComp/meep/blob/master/python/examples/parallel-wvgs-mpb.py). There are important differences related to the coordinate dimensions between the MPB and Meep scripts. In the MPB script, the 2d cell is defined using the $yz$ plane, the waveguide propagation axis is $x$,and the waveguide separation axis is $y$. As a consequence, the `num_bands` parameter is always `1` since the $y$ parity of the mode can be defined explicitly (i.e., `run_yodd_zodd` vs. `run_yeven_zodd`). This is different from the Meep script since Meep requires that a 2d cell be defined in the $xy$ plane. MPB has no such requirement." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.55,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.55,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3206050395965576\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 20 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.233911\n", "elapsed time for k point: 39.92626595497131\n", "total elapsed time for run: 42.247997999191284\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.55,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.55,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.2972378730773926\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 17 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.214446\n", "elapsed time for k point: 33.999393939971924\n", "total elapsed time for run: 36.29679226875305\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.6,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.6,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.31347393989563\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 18 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.232136\n", "elapsed time for k point: 35.45386290550232\n", "total elapsed time for run: 37.767595291137695\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.6,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.6,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3267719745635986\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 19 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.218002\n", "elapsed time for k point: 38.01395606994629\n", "total elapsed time for run: 40.34090757369995\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.65,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.65,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3398044109344482\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 17 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.230609\n", "elapsed time for k point: 34.236557722091675\n", "total elapsed time for run: 36.57751989364624\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.65,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.65,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3188600540161133\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 18 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.220388\n", "elapsed time for k point: 36.10376501083374\n", "total elapsed time for run: 38.422903060913086\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.7,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.7,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3080191612243652\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Finished solving for bands 1 to 1 after 19 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.229408\n", "elapsed time for k point: 38.052414655685425\n", "total elapsed time for run: 40.36163353919983\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.7,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.7,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.351583242416382\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 17 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.222012\n", "elapsed time for k point: 34.26416039466858\n", "total elapsed time for run: 36.61595106124878\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.75,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.75,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.34535813331604\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 18 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.2285\n", "elapsed time for k point: 36.24232602119446\n", "total elapsed time for run: 38.587929487228394\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.75,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.75,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.342602014541626\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 18 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.223137\n", "elapsed time for k point: 36.02590990066528\n", "total elapsed time for run: 38.3686728477478\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.8,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.8,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3229269981384277\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 19 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.227819\n", "elapsed time for k point: 37.89797854423523\n", "total elapsed time for run: 40.22118377685547\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.8,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.8,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3231875896453857\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 18 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.223921\n", "elapsed time for k point: 35.854113817214966\n", "total elapsed time for run: 38.17753458023071\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.85,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.85,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3750038146972656\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 18 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.227319\n", "elapsed time for k point: 36.51261854171753\n", "total elapsed time for run: 38.88789224624634\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.85,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.85,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3955740928649902\n", "solve_kpoint (0.5,0,0):\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 17 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.224479\n", "elapsed time for k point: 34.263073205947876\n", "total elapsed time for run: 36.65884232521057\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.9,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.9,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3697447776794434\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 17 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.226949\n", "elapsed time for k point: 33.61285185813904\n", "total elapsed time for run: 35.98284029960632\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.9,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.9,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3623385429382324\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 19 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.224876\n", "elapsed time for k point: 37.994656801223755\n", "total elapsed time for run: 40.35737872123718\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.95,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.95,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3798489570617676\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 19 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.226677\n", "elapsed time for k point: 38.10903787612915\n", "total elapsed time for run: 40.48903441429138\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-0.95,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,0.95,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.361907482147217\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 19 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.22516\n", "elapsed time for k point: 37.75140643119812\n", "total elapsed time for run: 40.113561391830444\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-1,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,1,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyodd.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.344741106033325\n", "solve_kpoint (0.5,0,0):\n", "zoddyoddfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyodd band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 20 iterations.\n", "zoddyoddfreqs:, 1, 0.5, 0, 0, 0.5, 0.22648\n", "elapsed time for k point: 39.63300061225891\n", "total elapsed time for run: 41.97804236412048\n", "done\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-09 tolerance\n", "Working in 3 dimensions.\n", "Grid size is 1 x 1280 x 1280.\n", "Solving for 1 bands at a time.\n", "Creating Maxwell data...\n", "Mesh size is 3.\n", "Lattice vectors:\n", " (1, 0, 0)\n", " (0, 10, 0)\n", " (0, 0, 10)\n", "Cell volume = 100\n", "Reciprocal lattice vectors (/ 2 pi):\n", " (1, -0, 0)\n", " (-0, 0.1, -0)\n", " (0, -0, 0.1)\n", "Geometric objects:\n", " block, center = (0,-1,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", " block, center = (0,1,0)\n", " size (1e+20,1,1)\n", " axes (1,0,0), (0,1,0), (0,0,1)\n", "Geometric object tree has depth 1 and 2 object nodes (vs. 2 actual objects)\n", "Initializing epsilon function...\n", "Allocating fields...\n", "Solving for band polarization: zoddyeven.\n", "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<0.5, 0.0, 0.0>\n", "elapsed time for initialization: 2.3879048824310303\n", "solve_kpoint (0.5,0,0):\n", "zoddyevenfreqs:, k index, k1, k2, k3, kmag/2pi, zoddyeven band 1\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 20 iterations.\n", "zoddyevenfreqs:, 1, 0.5, 0, 0, 0.5, 0.225369\n", "elapsed time for k point: 39.115745067596436\n", "total elapsed time for run: 41.503973960876465\n", "done\n" ] } ], "source": [ "import meep as mp\n", "from meep import mpb\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "resolution = 128 # pixels/μm\n", "\n", "Si = mp.Medium(index=3.45)\n", "\n", "syz = 10\n", "geometry_lattice = mp.Lattice(size=mp.Vector3(0, syz, syz))\n", "\n", "k_points = [mp.Vector3(0.5)]\n", "\n", "num_bands = 1\n", "tolerance = 1e-9\n", "\n", "a = 1.0 # waveguide width\n", "\n", "\n", "def parallel_waveguide(s, yodd):\n", " geometry = [\n", " mp.Block(\n", " center=mp.Vector3(0, -0.5 * (s + a), 0),\n", " size=mp.Vector3(mp.inf, a, a),\n", " material=Si,\n", " ),\n", " mp.Block(\n", " center=mp.Vector3(0, 0.5 * (s + a), 0),\n", " size=mp.Vector3(mp.inf, a, a),\n", " material=Si,\n", " ),\n", " ]\n", "\n", " ms = mpb.ModeSolver(\n", " resolution=resolution,\n", " k_points=k_points,\n", " geometry_lattice=geometry_lattice,\n", " geometry=geometry,\n", " num_bands=num_bands,\n", " tolerance=tolerance,\n", " )\n", "\n", " if yodd:\n", " ms.run_yodd_zodd()\n", " else:\n", " ms.run_yeven_zodd()\n", "\n", " f = ms.get_freqs()[0]\n", " vg = ms.compute_group_velocity_component(mp.Vector3(1, 0, 0))[0]\n", "\n", " return f, vg\n", "\n", "\n", "ss = np.arange(0.05, 1.15, 0.1)\n", "\n", "f_odd = np.zeros(len(ss))\n", "vg_odd = np.zeros(len(ss))\n", "f_even = np.zeros(len(ss))\n", "vg_even = np.zeros(len(ss))\n", "\n", "for j in range(len(ss)):\n", " f_odd[j], vg_odd[j] = parallel_waveguide(ss[j], True)\n", " f_even[j], vg_even[j] = parallel_waveguide(ss[j], False)\n", "\n", "ds = ss[1] - ss[0]\n", "\n", "\n", "def compute_force(f, vg):\n", " f_avg = 0.5 * (f[:-1] + f[1:])\n", " df = f[1:] - f[:-1]\n", " vg_avg = 0.5 * (vg[:-1] + vg[1:])\n", " return -1 / f_avg * df / ds * 1 / vg_avg\n", "\n", "\n", "force_odd = compute_force(f_odd, vg_odd)\n", "force_even = compute_force(f_even, vg_even)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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ycjI8B43bdqUsAVAtWSMUdOmTb2fff/sqk0IXQAAAIBaJCcnR5L7hSYuLi7CvQEA/3ynPXr+7KptCF0AAACAWsSzLXR0dDSjXABUa74LfNfWLe0JXQAAAAAAAMKA0AUAAAAAACAMCF0AAAAAAADCgNAFAAAAAAAgDAhdgBpm0SJp82aplq4zBQAAAAC1BqELUMNcd53UsaOUmCj17StNmCA9/bS0YIF08GCkewcAAICa4LTTTpMxRuPGjYt0V1ANTJ8+XcYYGWO0Y8eOSHenVqkX6Q4ACN7+/VJ6ujvOypJWrnTFV9u2Uo8exUvHjlJMzKnvLwAAAADUZYx0AWqQtWvLr7NnjzR7tvToo9JNN0ndu0vx8VKvXtKtt0p//as0d670/feSteHvMwAAAE6NQYMGyRijQYMGRborCBN+xjUPI12AGuTIEallSzfiJRS5udKaNa74at689KiYLl2kBg2qrs8AAACofphCAl/jxo1jqlmYELoANch117myf7+0bp0b+eIp33wj5eSE1t6BA9Knn7riERUldehQOoxp314ypmrfBwAAAABqM0IXoAZq2dKViy8uOpebK23ZUjyIWbtWSksLre2CAunbb115662i840aualKvkFMt25uQV8AAAAAQGms6QLUEjExbmrQmDHSww9Ls2ZJu3ZJhw5JCxdKzzwj/eQnUr9+Ulxc6O0fPSp9/rn0z39Kd90lXXCBlJQknXGGNHKkNGmS9M47LvhhO2sAAFDXrF+/Xn/5y1906aWXKiUlRfXr11dCQoLOOussjR07VsuWLfN77+TJk707x0jSyZMn9fjjj6tPnz5KTExUYmKi+vbtq2effVZ5eXml7h83bpyMMVq4cKEkaeHChd72POW0004rdk95uxedPHlSTz/9tAYNGqRmzZopJiZGTZs2VadOnTR8+HD97W9/KzZFae3atd5nPfroo+V+v5555hlv/SVLlnjPL1iwwHt+wYIFstbqhRde0IUXXqjk5GQlJSWpb9++euWVV4q1l5OTo6lTp+q8885T06ZNlZiYqP79++st339FLGHHjh3eZ02fPl2S9O6772rYsGFq0aKF4uPj1bNnTz3zzDPKzc313met1WuvvaZBgwapRYsWiouLU58+fTR16lTZIBZNPHHihJ566ikNHjxYLVu2VGxsrFq0aKFhw4Zp2rRpyi/jf6Yr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lKZMkUaPljp3rtj0obQ06aOPpEcecVOgunZ1a8L06SONGyc9+aQ0f37oU58AAEDt9s0333iPAy386lnTI5zCORIhMTFRI0aM0Lvvvqt7771Xkpsu5AmcSpowYYIkN/VqwYIFWrJkib799ltJdW+UiyT1Ltx9YvPmzdq5c2eF24nEaJM+ffpIknJzc7V06dJT/vyajtAFQI1ljNS+vXTlldKDD7rFdTdskI4fl778Upo2TbrvPmnoUKkwoA9Jdrb09dfSSy9JDzwgDRniFu298ELpd7+T5s51zwIAAHVXXl6e9zjQ+huhTCmpqAYNGkhyuyeF09ChQ73H/hYFHjp0qE4//XRJbvFczwK68fHxAXcAqq2uuuoq7/Fjjz1W4XZO1c/Y1xVXXOENe/72t7+dsufWFoQuAGqdhg2Lj1D53//cvPV9+6RPPpEef1y65RapZ0+3yG8ocnOlL76QHn5YuvRStxbM+edLEydKs2dLGRlheSUAAFBNnXXWWd7jl156qcw6zz33nN5///2w96V169aSpG3btlV43Zht27Zp4cKFAevMnTvXe/yjH/2ozDrGGO+IlnfeeUdvvvmmJOm6665TYmJihfpWk1177bXq3LmzJPffwwsvvBCw/vr16zVz5sxS56viZxyqDh06aOTIkZLc1tePP/6437qZmZk1cipdOLFaAYA6wRipVStXhg0rOp+bK23aVHqtmD17gms3L09atsyVRx91U5v69ClaIHjAADc6BgAA1E69e/dWt27dtH79ej333HM6cuSIbrrpJrVu3VppaWn673//qxkzZqh///764osvwtqXCy64QNOmTVN6erruv/9+3Xzzzd4tnmNiYpSamlpuG7t27dLgwYPVpUsXjRw5Uuecc47atm0rSUpLS9Obb76pt956S5J79379+vlta/z48Zo0aVKxEUB1cWqR5BazffPNN3XBBRfo+PHjmjBhgt5++23deOON6tixo2JiYpSenq6vv/5as2bN0pIlS/TAAw9oxIgRxdqpip9xRfzzn//UsmXLtHfvXv3617/WnDlzNG7cOHXq1EnGGO80sjfeeEMzZszQoEGDwtKPmojQBUCdFhPjdjPq1k268cai8wcPFt/O+uuvpdWrpXJ2G1RBgbRqlStPPOHCnl69iocw4dw9AQAAnFrGGL3yyisaMmSIDh8+rNdff12vv/56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OGD9sWPHWkk2NTXVb9/nzZtnmzVrVm4/4FTkz6y0tDTf72WKrQa/G/srTC8CANRJycnSFVe4Irm1YdavL742zJYtwbV14oTb5nrhwqJzZ5xRfEpS9+5SPf7WBYBaJTs7W2PGjFFGRoYSExN19913a/DgwWrRooVyc3O1c+dOLV26VO+88473niZNmmjkyJF6/fXX9cYbb+hvf/ubGjZsWGb7r776qnJyciRJt912m99+XHfddd5RIZdddpni4uL0+eefa9KkScrIyNDtt9+uc845R1deeaWysrI0ZcoUDRw4UDExMZozZ46mTJmi7OxsjR8/Xlu2bFFsbKzfZ91xxx368ssvdc8992jkyJFq0qSJVq9erYceekj79u3Tr371Kw0bNkzjxo3Ttm3bNHHiRF122WWKj4/XF198oUmTJuno0aO65557NGzYMLUoY87uiy++qAmFK+h369ZNd955p3r37q24uDht375dL7zwgj7++GO98MILatSokZ544gnvvXPnzlVOTo66d+8uSbr77rt1zz33FGu/SZMmZb7bb37zG61du1ZXXXWVxo0bp9TUVO3fv987SikY8+fP1+WXX668vDxFR0frlltu0dVXX6327dvr5MmT2rBhg2bPnq2ZM2cG3SZquEinPpSaXcRIFwC12IED1s6cae2DD1o7eLC18fG2wqNh4uOtHTTI2t/+1toPP3RtA0A4BPWvxvn5blheXSr5+VX+vf70009LjWQpS25urj169Kj382effea979VXX/V7X8+ePa0k261bt1LXfEe61K9f3y5btqxUnY8++shbp3nz5rZZs2b2u+++K1XvH//4h7feu+++W+q670gXY4x97733StVZu3atjY6O9j4rmD49+eSTpa7v2rXLxsXFeUeYlBzJ4vHggw9aSTYqKspu2rSp1HXPMyZNmlTm/R6+I10k2Yceeihg/UAjXU6cOGFbt25tJdm4uDg7f/58v+3s2rUr4HPqEka6AABQRzVrJl15pSuSW7ul5GiY774Lrq3MTGnBAlc8zjyz+GiYbt0YDQPgFDl4sO6tCp6eLjVvXqVNfv/9997jiy66yG+9evXqKSkpyft50KBBOvPMM/Xdd99p2rRpuvHGG0vd89VXX2nNmjWSAo9ykaRf/OIX6tevX6nzw4cPV2pqqnbu3KkDBw5o6tSpOuOMM0rVGz9+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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(dpi=200)\n", "plt.plot(ss[:-1], force_odd, \"b-\", label=\"anti-symmetric\")\n", "plt.plot(ss[:-1], force_even, \"r-\", label=\"symmetric\")\n", "plt.xlabel(\"waveguide separation s/a\")\n", "plt.ylabel(\"optical force (F/L)(ac/P)\")\n", "plt.legend(loc=\"upper right\")\n", "plt.xticks(np.arange(0, 1.2, 0.2))\n", "plt.yticks(np.arange(-1.5, 1.0, 0.5))\n", "plt.show()" ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 2 }