From c6367164985d01d900cc136bc405fe634b2e8716 Mon Sep 17 00:00:00 2001 From: Thomas Ferreira de Lima Date: Fri, 12 Mar 2021 09:52:34 -0500 Subject: [PATCH] Revert "minor fixes in documentation" This reverts commit 7c0a531bc37ab11760dc3584a5b786a9824beab5. --- 01-simple_geometries.ipynb | 2 +- 02-MPB_dispersion.ipynb | 2 +- 03-MPB_fields.ipynb | 638 +++++-------------------------------- test.gds | Bin 1640 -> 0 bytes 4 files changed, 78 insertions(+), 564 deletions(-) delete mode 100644 test.gds diff --git a/01-simple_geometries.ipynb b/01-simple_geometries.ipynb index 3bafda9..6d6c3c2 100644 --- a/01-simple_geometries.ipynb +++ b/01-simple_geometries.ipynb @@ -39,7 +39,7 @@ "source": [ "# Cross-section of a strip waveguide\n", "\n", - "As a (useful) example, let's characterize a strip waveguide (Figure from http://www.simpetuscloud.com/projects.html#mpb_waveguide)\n", + "As a (useful) example, let's characterize a strip waveguide (Figure from [3])\n", "\n", "![alt text](http://www.simpetus.com/files/SOI_waveguide_bands.png)\n", "\n", diff --git a/02-MPB_dispersion.ipynb b/02-MPB_dispersion.ipynb index 24f006f..8a3bffa 100644 --- a/02-MPB_dispersion.ipynb +++ b/02-MPB_dispersion.ipynb @@ -6,7 +6,7 @@ "source": [ "# MPB ModeSolver\n", "\n", - "Now let's obtain the plot on the right (Figure from http://www.simpetuscloud.com/projects.html#mpb_waveguide) :\n", + "Now let's obtain the plot on the right (Figure from [3]) :\n", "\n", "![alt text](http://www.simpetus.com/files/SOI_waveguide_bands.png)" ] diff --git a/03-MPB_fields.ipynb b/03-MPB_fields.ipynb index bc5131c..dfc40d9 100644 --- a/03-MPB_fields.ipynb +++ b/03-MPB_fields.ipynb @@ -11,9 +11,17 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using MPI version 3.1, 1 processes\n" + ] + } + ], "source": [ "# Import meep and mpb (from meep)\n", "import meep as mp\n", @@ -28,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -60,21 +68,29 @@ "# Increase this to see more modes. (The guided ones are the ones below the\n", "# light line, i.e. those with frequencies < kmag / 1.45, where kmag\n", "# is the corresponding column in the output if you grep for \"freqs:\".)\n", - "num_bands = 4" + "num_bands = 4\n", + "\n", + "# ModeSolver object\n", + "ms = mpb.ModeSolver(\n", + " geometry_lattice=geometry_lattice,\n", + " geometry=geometry,\n", + " # Add new things pertaining to simulation\n", + " k_points=k_points,\n", + " resolution=resolution,\n", + " num_bands=num_bands\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We know how the bands look like, so let's now look at the modes at a given frequency, say $1.55\\mu$m. We can proceed inversely : `ms.run()` computes $\\omega(k)$, while `ms.find_k` computes $k(\\omega)$. Here, we will also pass a mpb.output function to the `run()` function, which will output h5 files. This is useful when what is being output is not a single number like before.\n", - "\n", - "We add the \"mpb.output_poynting_x\" flag to output the the x-component of the Poynting vector to the file starting with \"filename_prefix\"." + "We know how the bands look like, so let's now look at the modes at a given frequency, say $1.55\\mu$m. We can proceed inversely : `ms.run()` computes $\\omega(k)$, while `ms.find_k` computes $k(\\omega)$. Here, we will also pass a mpb.output function to the `run()` function, which will output h5 files. This is useful when what is being output is not a single number like before." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -111,15 +127,15 @@ "Initializing fields to random numbers...\n", "1 k-points\n", " Vector3<2.2258064516129035, 0.0, 0.0>\n", - "elapsed time for initialization: 0.025534629821777344\n", + "elapsed time for initialization: 0.014314413070678711\n", "solve_kpoint (2.22581,0,0):\n", "Solving for bands 1 to 1...\n", - "Finished solving for bands 1 to 1 after 18 iterations.\n", + "Finished solving for bands 1 to 1 after 21 iterations.\n", "freqs:, 1, 2.22581, 0, 0, 2.22581, 0.805827\n", - "elapsed time for k point: 0.0276641845703125\n", - "total elapsed time for run: 0.05329322814941406\n", + "elapsed time for k point: 0.041956186294555664\n", + "total elapsed time for run: 0.05634951591491699\n", "done\n", - "find-k 1 at 2.2258064516129035: 0.16066550704675076\n", + "find-k 1 at 2.2258064516129035: 0.1606655089676231\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-07 tolerance\n", "Working in 3 dimensions.\n", @@ -147,16 +163,16 @@ "Initializing epsilon function...\n", "Solving for band polarization: .\n", "1 k-points\n", - " Vector3<1.596598295923528, 0.0, 0.0>\n", - "elapsed time for initialization: 0.025029420852661133\n", + " Vector3<1.596596356685748, 0.0, 0.0>\n", + "elapsed time for initialization: 0.02379608154296875\n", "solve_kpoint (1.5966,0,0):\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 8 iterations.\n", "freqs:, 1, 1.5966, 0, 0, 1.5966, 0.649395\n", - "elapsed time for k point: 0.009264945983886719\n", - "total elapsed time for run: 0.03435039520263672\n", + "elapsed time for k point: 0.009205341339111328\n", + "total elapsed time for run: 0.03305387496948242\n", "done\n", - "find-k 1 at 1.596598295923528: 0.004234131830224475\n", + "find-k 1 at 1.596596356685748: 0.004233665331168424\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-07 tolerance\n", "Working in 3 dimensions.\n", @@ -184,16 +200,16 @@ "Initializing epsilon function...\n", "Solving for band polarization: .\n", "1 k-points\n", - " Vector3<1.5789912740265075, 0.0, 0.0>\n", - "elapsed time for initialization: 0.024404525756835938\n", + " Vector3<1.5789912864313702, 0.0, 0.0>\n", + "elapsed time for initialization: 0.014961957931518555\n", "solve_kpoint (1.57899,0,0):\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 4 iterations.\n", "freqs:, 1, 1.57899, 0, 0, 1.57899, 0.645166\n", - "elapsed time for k point: 0.005956172943115234\n", - "total elapsed time for run: 0.03041553497314453\n", + "elapsed time for k point: 0.0184023380279541\n", + "total elapsed time for run: 0.03343534469604492\n", "done\n", - "find-k 1 at 1.5789912740265075: 4.810392560283816e-06\n", + "find-k 1 at 1.5789912864313702: 4.813413559956459e-06\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-07 tolerance\n", "Working in 3 dimensions.\n", @@ -221,16 +237,16 @@ "Initializing epsilon function...\n", "Solving for band polarization: .\n", "1 k-points\n", - " Vector3<1.5789712251098558, 0.0, 0.0>\n", - "elapsed time for initialization: 0.012188911437988281\n", + " Vector3<1.578971224923785, 0.0, 0.0>\n", + "elapsed time for initialization: 0.012036323547363281\n", "solve_kpoint (1.57897,0,0):\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 1 iterations.\n", "freqs:, 1, 1.57897, 0, 0, 1.57897, 0.645161\n", - "elapsed time for k point: 0.013632774353027344\n", - "total elapsed time for run: 0.0258791446685791\n", + "elapsed time for k point: 0.0034999847412109375\n", + "total elapsed time for run: 0.015587806701660156\n", "done\n", - "find-k 1 at 1.5789712251098558: -1.6830323801286795e-09\n", + "find-k 1 at 1.578971224923785: -1.7079632153027546e-09\n", "Initializing eigensolver data\n", "Computing 1 bands with 1e-07 tolerance\n", "Working in 3 dimensions.\n", @@ -258,50 +274,42 @@ "Initializing epsilon function...\n", "Solving for band polarization: .\n", "1 k-points\n", - " Vector3<1.5789712321245573, 0.0, 0.0>\n", - "elapsed time for initialization: 0.012122392654418945\n", + " Vector3<1.5789712320423945, 0.0, 0.0>\n", + "elapsed time for initialization: 0.024863243103027344\n", "solve_kpoint (1.57897,0,0):\n", "Solving for bands 1 to 1...\n", "Finished solving for bands 1 to 1 after 1 iterations.\n", "freqs:, 1, 1.57897, 0, 0, 1.57897, 0.645161\n", - "elapsed time for k point: 0.0035130977630615234\n", - "Outputting fields to 03-MPB_fields_data-flux.v.k01.b01.x.h5...\n", - "total elapsed time for run: 0.1332552433013916\n", + "elapsed time for k point: 0.0035033226013183594\n", + "Outputting fields to flux.v.k01.b01.x.h5...\n", + "total elapsed time for run: 0.14272618293762207\n", "done\n", - "kvals:, 0.6451612903225806, 1, 1, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.5789712321245573\n" + "kvals:, 0.6451612903225806, 1, 1, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.5789712320423945\n" ] + }, + { + "data": { + "text/plain": [ + "[1.5789712320423945]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# ModeSolver object\n", - "ms = mpb.ModeSolver(\n", - " geometry_lattice=geometry_lattice,\n", - " geometry=geometry,\n", - " # Add new things pertaining to simulation\n", - " k_points=k_points,\n", - " resolution=resolution,\n", - " num_bands=num_bands,\n", - " filename_prefix='03-MPB_fields_data'\n", - ")\n", - "\n", "f_mode = 1/1.55 # frequency corresponding to 1.55 um \n", "band_min = 1\n", - "band_max = 1 # Look at the lowest modes\n", + "band_max = 1 # Look at the two lowest modes\n", "kdir = mp.Vector3(1)\n", "tol = 1e-6\n", "kmag_guess = f_mode*3.45\n", "kmag_min = f_mode*0.1\n", "kmag_max = f_mode*4.0\n", "\n", - "k_1p55um = ms.find_k(mp.NO_PARITY, f_mode, band_min, band_max, kdir, tol, kmag_guess,\n", - " kmag_min, kmag_max)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we know the k-vector(s) stored in the the list `k_1p55um`, we can rerun the mode solver to load the desired mode into memory." + "ms.find_k(mp.NO_PARITY, f_mode, band_min, band_max, kdir, tol, kmag_guess,\n", + " kmag_min, kmag_max, mpb.output_poynting_x)" ] }, { @@ -310,502 +318,12 @@ "source": [ "## Extracting the fields\n", "\n", - "There are again many functions to extract the fields from your simulation, see https://mpb.readthedocs.io/en/latest/Python_User_Interface/#field-manipulation. The example https://mpb.readthedocs.io/en/latest/Python_Data_Analysis_Tutorial/#the-source-of-the-tm-gap-examining-the-modes is also useful." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Initializing eigensolver data\n", - "Computing 4 bands with 1e-07 tolerance\n", - "Working in 3 dimensions.\n", - "Grid size is 1 x 64 x 64.\n", - "Solving for 4 bands at a time.\n", - "Creating Maxwell data...\n", - "Mesh size is 3.\n", - "Lattice vectors:\n", - " (1, 0, 0)\n", - " (0, 2, 0)\n", - " (0, 0, 2)\n", - "Cell volume = 4\n", - "Reciprocal lattice vectors (/ 2 pi):\n", - " (1, -0, 0)\n", - " (-0, 0.5, -0)\n", - " (0, -0, 0.5)\n", - "Geometric objects:\n", - " block, center = (0,0,0.5625)\n", - " size (1e+20,1e+20,0.875)\n", - " axes (1,0,0), (0,1,0), (0,0,1)\n", - " block, center = (0,0,0)\n", - " size (1e+20,0.5,0.25)\n", - " axes (1,0,0), (0,1,0), (0,0,1)\n", - "Geometric object tree has depth 2 and 8 object nodes (vs. 2 actual objects)\n", - "Initializing epsilon function...\n", - "Solving for band polarization: zeven.\n", - "Initializing fields to random numbers...\n", - "32 k-points\n", - " Vector3<0.1, 0.0, 0.0>\n", - " Vector3<0.1935483870967742, 0.0, 0.0>\n", - " Vector3<0.2870967741935484, 0.0, 0.0>\n", - " Vector3<0.38064516129032255, 0.0, 0.0>\n", - " Vector3<0.4741935483870968, 0.0, 0.0>\n", - " Vector3<0.567741935483871, 0.0, 0.0>\n", - " Vector3<0.6612903225806451, 0.0, 0.0>\n", - " Vector3<0.7548387096774194, 0.0, 0.0>\n", - " Vector3<0.8483870967741935, 0.0, 0.0>\n", - " Vector3<0.9419354838709677, 0.0, 0.0>\n", - " Vector3<1.035483870967742, 0.0, 0.0>\n", - " Vector3<1.1290322580645162, 0.0, 0.0>\n", - " Vector3<1.2225806451612904, 0.0, 0.0>\n", - " Vector3<1.3161290322580645, 0.0, 0.0>\n", - " Vector3<1.409677419354839, 0.0, 0.0>\n", - " Vector3<1.503225806451613, 0.0, 0.0>\n", - " Vector3<1.5967741935483872, 0.0, 0.0>\n", - " Vector3<1.6903225806451614, 0.0, 0.0>\n", - " Vector3<1.7838709677419355, 0.0, 0.0>\n", - " Vector3<1.87741935483871, 0.0, 0.0>\n", - " Vector3<1.970967741935484, 0.0, 0.0>\n", - " Vector3<2.064516129032258, 0.0, 0.0>\n", - " Vector3<2.1580645161290324, 0.0, 0.0>\n", - " Vector3<2.2516129032258068, 0.0, 0.0>\n", - " Vector3<2.3451612903225807, 0.0, 0.0>\n", - " Vector3<2.438709677419355, 0.0, 0.0>\n", - " Vector3<2.532258064516129, 0.0, 0.0>\n", - " Vector3<2.6258064516129034, 0.0, 0.0>\n", - " Vector3<2.7193548387096778, 0.0, 0.0>\n", - " Vector3<2.8129032258064517, 0.0, 0.0>\n", - " Vector3<2.906451612903226, 0.0, 0.0>\n", - " Vector3<3.0, 0.0, 0.0>\n", - "elapsed time for initialization: 0.031105995178222656\n", - "solve_kpoint (0.1,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 16 iterations.\n", - "zevenfreqs:, 1, 0.1, 0, 0, 0.1, 0.0843134, 0.302281, 0.395952, 0.423549\n", - "elapsed time for k point: 0.06335067749023438\n", - "solve_kpoint (0.193548,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 41 iterations.\n", - "zevenfreqs:, 2, 0.193548, 0, 0, 0.193548, 0.162636, 0.331326, 0.400941, 0.451835\n", - "elapsed time for k point: 0.1351027488708496\n", - "solve_kpoint (0.287097,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 43 iterations.\n", - "zevenfreqs:, 3, 0.287097, 0, 0, 0.287097, 0.239507, 0.373621, 0.413009, 0.490725\n", - "elapsed time for k point: 0.14035582542419434\n", - "solve_kpoint (0.380645,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 15 iterations.\n", - "zevenfreqs:, 4, 0.380645, 0, 0, 0.380645, 0.312498, 0.424411, 0.432457, 0.538616\n", - "elapsed time for k point: 0.05597496032714844\n", - "solve_kpoint (0.474194,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 11 iterations.\n", - "zevenfreqs:, 5, 0.474194, 0, 0, 0.474194, 0.374399, 0.464825, 0.48009, 0.593302\n", - "elapsed time for k point: 0.043993234634399414\n", - "solve_kpoint (0.567742,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 16 iterations.\n", - "zevenfreqs:, 6, 0.567742, 0, 0, 0.567742, 0.415451, 0.518888, 0.536582, 0.65294\n", - "elapsed time for k point: 0.05907630920410156\n", - "solve_kpoint (0.66129,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 23 iterations.\n", - "zevenfreqs:, 7, 0.66129, 0, 0, 0.66129, 0.44174, 0.588722, 0.59095, 0.716324\n", - "elapsed time for k point: 0.0800788402557373\n", - "solve_kpoint (0.754839,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 17 iterations.\n", - "zevenfreqs:, 8, 0.754839, 0, 0, 0.754839, 0.463004, 0.637671, 0.664086, 0.782093\n", - "elapsed time for k point: 0.0623011589050293\n", - "solve_kpoint (0.848387,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 6 iterations.\n", - "zevenfreqs:, 9, 0.848387, 0, 0, 0.848387, 0.483054, 0.674353, 0.741185, 0.847462\n", - "elapsed time for k point: 0.028891324996948242\n", - "solve_kpoint (0.941935,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 177 iterations.\n", - "zevenfreqs:, 10, 0.941935, 0, 0, 0.941935, 0.502845, 0.702246, 0.818652, 0.867792\n", - "elapsed time for k point: 0.5697131156921387\n", - "solve_kpoint (1.03548,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 75 iterations.\n", - "zevenfreqs:, 11, 1.03548, 0, 0, 1.03548, 0.522956, 0.724629, 0.892546, 0.924007\n", - "elapsed time for k point: 0.23873424530029297\n", - "solve_kpoint (1.12903,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 20 iterations.\n", - "zevenfreqs:, 12, 1.12903, 0, 0, 1.12903, 0.54324, 0.744037, 0.956507, 0.978017\n", - "elapsed time for k point: 0.07097339630126953\n", - "solve_kpoint (1.22258,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 30 iterations.\n", - "zevenfreqs:, 13, 1.22258, 0, 0, 1.22258, 0.564033, 0.762304, 0.976688, 1.02716\n", - "elapsed time for k point: 0.10104107856750488\n", - "solve_kpoint (1.31613,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 22 iterations.\n", - "zevenfreqs:, 14, 1.31613, 0, 0, 1.31613, 0.585223, 0.7798, 0.996602, 1.06609\n", - "elapsed time for k point: 0.07702827453613281\n", - "solve_kpoint (1.40968,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 18 iterations.\n", - "zevenfreqs:, 15, 1.40968, 0, 0, 1.40968, 0.606801, 0.797193, 1.01508, 1.10022\n", - "elapsed time for k point: 0.06556463241577148\n", - "solve_kpoint (1.50323,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 20 iterations.\n", - "zevenfreqs:, 16, 1.50323, 0, 0, 1.50323, 0.628618, 0.814448, 1.03221, 1.1307\n", - "elapsed time for k point: 0.07604193687438965\n", - "solve_kpoint (1.59677,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 4 iterations.\n", - "zevenfreqs:, 17, 1.59677, 0, 0, 1.59677, 0.650744, 0.831978, 1.04894, 1.15615\n", - "elapsed time for k point: 0.023871421813964844\n", - "solve_kpoint (1.69032,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 27 iterations.\n", - "zevenfreqs:, 18, 1.69032, 0, 0, 1.69032, 0.673219, 0.849838, 1.0653, 1.17915\n", - "elapsed time for k point: 0.09644913673400879\n", - "solve_kpoint (1.78387,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 36 iterations.\n", - "zevenfreqs:, 19, 1.78387, 0, 0, 1.78387, 0.695999, 0.868034, 1.08176, 1.20108\n", - "elapsed time for k point: 0.11981344223022461\n", - "solve_kpoint (1.87742,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 14 iterations.\n", - "zevenfreqs:, 20, 1.87742, 0, 0, 1.87742, 0.719017, 0.886545, 1.0978, 1.22215\n", - "elapsed time for k point: 0.0567781925201416\n", - "solve_kpoint (1.97097,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 19 iterations.\n", - "zevenfreqs:, 21, 1.97097, 0, 0, 1.97097, 0.742271, 0.905392, 1.11417, 1.2416\n", - "elapsed time for k point: 0.0730140209197998\n", - "solve_kpoint (2.06452,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 14 iterations.\n", - "zevenfreqs:, 22, 2.06452, 0, 0, 2.06452, 0.765721, 0.924593, 1.13069, 1.26102\n", - "elapsed time for k point: 0.05592155456542969\n", - "solve_kpoint (2.15806,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 8 iterations.\n", - "zevenfreqs:, 23, 2.15806, 0, 0, 2.15806, 0.789356, 0.944103, 1.14742, 1.27972\n", - "elapsed time for k point: 0.037320852279663086\n", - "solve_kpoint (2.25161,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 8 iterations.\n", - "zevenfreqs:, 24, 2.25161, 0, 0, 2.25161, 0.813163, 0.963944, 1.16438, 1.29837\n", - "elapsed time for k point: 0.03690361976623535\n", - "solve_kpoint (2.34516,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 7 iterations.\n", - "zevenfreqs:, 25, 2.34516, 0, 0, 2.34516, 0.837117, 0.984075, 1.18161, 1.31675\n", - "elapsed time for k point: 0.03192257881164551\n", - "solve_kpoint (2.43871,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 8 iterations.\n", - "zevenfreqs:, 26, 2.43871, 0, 0, 2.43871, 0.861222, 1.00451, 1.19909, 1.33516\n", - "elapsed time for k point: 0.03492379188537598\n", - "solve_kpoint (2.53226,0,0):\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 7 iterations.\n", - "zevenfreqs:, 27, 2.53226, 0, 0, 2.53226, 0.885444, 1.02521, 1.21685, 1.35352\n", - "elapsed time for k point: 0.03193497657775879\n", - "solve_kpoint (2.62581,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 15 iterations.\n", - "zevenfreqs:, 28, 2.62581, 0, 0, 2.62581, 0.909788, 1.04617, 1.23486, 1.37189\n", - "elapsed time for k point: 0.056073665618896484\n", - "solve_kpoint (2.71935,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 10 iterations.\n", - "zevenfreqs:, 29, 2.71935, 0, 0, 2.71935, 0.934272, 1.06739, 1.25317, 1.39034\n", - "elapsed time for k point: 0.04114389419555664\n", - "solve_kpoint (2.8129,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 7 iterations.\n", - "zevenfreqs:, 30, 2.8129, 0, 0, 2.8129, 0.958845, 1.08885, 1.27173, 1.40892\n", - "elapsed time for k point: 0.03278350830078125\n", - "solve_kpoint (2.90645,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 9 iterations.\n", - "zevenfreqs:, 31, 2.90645, 0, 0, 2.90645, 0.983517, 1.11053, 1.29055, 1.42758\n", - "elapsed time for k point: 0.039099931716918945\n", - "solve_kpoint (3,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 8 iterations.\n", - "zevenfreqs:, 32, 3, 0, 0, 3, 1.00828, 1.13242, 1.30961, 1.44639\n", - "elapsed time for k point: 0.03622174263000488\n", - "Band 1 range: 0.08431338251234077 at Vector3<0.1, 0.0, 0.0> to 1.008276991341985 at Vector3<3.0, 0.0, 0.0>\n", - "Band 2 range: 0.3022813455325837 at Vector3<0.1, 0.0, 0.0> to 1.132417429495867 at Vector3<3.0, 0.0, 0.0>\n", - "Band 3 range: 0.3959515485072007 at Vector3<0.1, 0.0, 0.0> to 1.3096108058847118 at Vector3<3.0, 0.0, 0.0>\n", - "Band 4 range: 0.4235485831136378 at Vector3<0.1, 0.0, 0.0> to 1.446389669990391 at Vector3<3.0, 0.0, 0.0>\n", - "total elapsed time for run: 2.705028533935547\n", - "done\n", - "Initializing eigensolver data\n", - "Computing 4 bands with 1e-07 tolerance\n", - "Working in 3 dimensions.\n", - "Grid size is 1 x 64 x 64.\n", - "Solving for 4 bands at a time.\n", - "Creating Maxwell data...\n", - "Mesh size is 3.\n", - "Lattice vectors:\n", - " (1, 0, 0)\n", - " (0, 2, 0)\n", - " (0, 0, 2)\n", - "Cell volume = 4\n", - "Reciprocal lattice vectors (/ 2 pi):\n", - " (1, -0, 0)\n", - " (-0, 0.5, -0)\n", - " (0, -0, 0.5)\n", - "Geometric objects:\n", - " block, center = (0,0,0.5625)\n", - " size (1e+20,1e+20,0.875)\n", - " axes (1,0,0), (0,1,0), (0,0,1)\n", - " block, center = (0,0,0)\n", - " size (1e+20,0.5,0.25)\n", - " axes (1,0,0), (0,1,0), (0,0,1)\n", - "Geometric object tree has depth 2 and 8 object nodes (vs. 2 actual objects)\n", - "Initializing epsilon function...\n", - "Solving for band polarization: zeven.\n", - "Initializing fields to random numbers...\n", - "32 k-points\n", - " Vector3<0.1, 0.0, 0.0>\n", - " Vector3<0.1935483870967742, 0.0, 0.0>\n", - " Vector3<0.2870967741935484, 0.0, 0.0>\n", - " Vector3<0.38064516129032255, 0.0, 0.0>\n", - " Vector3<0.4741935483870968, 0.0, 0.0>\n", - " Vector3<0.567741935483871, 0.0, 0.0>\n", - " Vector3<0.6612903225806451, 0.0, 0.0>\n", - " Vector3<0.7548387096774194, 0.0, 0.0>\n", - " Vector3<0.8483870967741935, 0.0, 0.0>\n", - " Vector3<0.9419354838709677, 0.0, 0.0>\n", - " Vector3<1.035483870967742, 0.0, 0.0>\n", - " Vector3<1.1290322580645162, 0.0, 0.0>\n", - " Vector3<1.2225806451612904, 0.0, 0.0>\n", - " Vector3<1.3161290322580645, 0.0, 0.0>\n", - " Vector3<1.409677419354839, 0.0, 0.0>\n", - " Vector3<1.503225806451613, 0.0, 0.0>\n", - " Vector3<1.5967741935483872, 0.0, 0.0>\n", - " Vector3<1.6903225806451614, 0.0, 0.0>\n", - " Vector3<1.7838709677419355, 0.0, 0.0>\n", - " Vector3<1.87741935483871, 0.0, 0.0>\n", - " Vector3<1.970967741935484, 0.0, 0.0>\n", - " Vector3<2.064516129032258, 0.0, 0.0>\n", - " Vector3<2.1580645161290324, 0.0, 0.0>\n", - " Vector3<2.2516129032258068, 0.0, 0.0>\n", - " Vector3<2.3451612903225807, 0.0, 0.0>\n", - " Vector3<2.438709677419355, 0.0, 0.0>\n", - " Vector3<2.532258064516129, 0.0, 0.0>\n", - " Vector3<2.6258064516129034, 0.0, 0.0>\n", - " Vector3<2.7193548387096778, 0.0, 0.0>\n", - " Vector3<2.8129032258064517, 0.0, 0.0>\n", - " Vector3<2.906451612903226, 0.0, 0.0>\n", - " Vector3<3.0, 0.0, 0.0>\n", - "elapsed time for initialization: 0.03126406669616699\n", - "solve_kpoint (0.1,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 12 iterations.\n", - "zevenfreqs:, 1, 0.1, 0, 0, 0.1, 0.0843153, 0.302225, 0.396081, 0.423721\n", - "elapsed time for k point: 0.04872012138366699\n", - "solve_kpoint (0.193548,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 38 iterations.\n", - "zevenfreqs:, 2, 0.193548, 0, 0, 0.193548, 0.162634, 0.331336, 0.40076, 0.451812\n", - "elapsed time for k point: 0.1275651454925537\n", - "solve_kpoint (0.287097,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 22 iterations.\n", - "zevenfreqs:, 3, 0.287097, 0, 0, 0.287097, 0.239509, 0.373633, 0.412991, 0.490783\n", - "elapsed time for k point: 0.07801508903503418\n", - "solve_kpoint (0.380645,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 13 iterations.\n", - "zevenfreqs:, 4, 0.380645, 0, 0, 0.380645, 0.312502, 0.42441, 0.432395, 0.53861\n", - "elapsed time for k point: 0.052686452865600586\n", - "solve_kpoint (0.474194,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 14 iterations.\n", - "zevenfreqs:, 5, 0.474194, 0, 0, 0.474194, 0.374392, 0.464651, 0.479923, 0.593301\n", - "elapsed time for k point: 0.05582165718078613\n", - "solve_kpoint (0.567742,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 19 iterations.\n", - "zevenfreqs:, 6, 0.567742, 0, 0, 0.567742, 0.415423, 0.518975, 0.53692, 0.653106\n", - "elapsed time for k point: 0.06903791427612305\n", - "solve_kpoint (0.66129,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 21 iterations.\n", - "zevenfreqs:, 7, 0.66129, 0, 0, 0.66129, 0.441698, 0.588789, 0.590815, 0.716415\n", - "elapsed time for k point: 0.07393670082092285\n", - "solve_kpoint (0.754839,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 40 iterations.\n", - "zevenfreqs:, 8, 0.754839, 0, 0, 0.754839, 0.463192, 0.637305, 0.663992, 0.782036\n", - "elapsed time for k point: 0.1398780345916748\n", - "solve_kpoint (0.848387,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 10 iterations.\n", - "zevenfreqs:, 9, 0.848387, 0, 0, 0.848387, 0.483056, 0.674772, 0.741202, 0.84736\n", - "elapsed time for k point: 0.04102206230163574\n", - "solve_kpoint (0.941935,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 145 iterations.\n", - "zevenfreqs:, 10, 0.941935, 0, 0, 0.941935, 0.502843, 0.702229, 0.818656, 0.867809\n", - "elapsed time for k point: 0.4484689235687256\n", - "solve_kpoint (1.03548,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 58 iterations.\n", - "zevenfreqs:, 11, 1.03548, 0, 0, 1.03548, 0.522848, 0.72467, 0.893835, 0.924036\n", - "elapsed time for k point: 0.18492412567138672\n", - "solve_kpoint (1.12903,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 29 iterations.\n", - "zevenfreqs:, 12, 1.12903, 0, 0, 1.12903, 0.543227, 0.744066, 0.956546, 0.978048\n", - "elapsed time for k point: 0.09808468818664551\n", - "solve_kpoint (1.22258,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 28 iterations.\n", - "zevenfreqs:, 13, 1.22258, 0, 0, 1.22258, 0.564028, 0.762329, 0.976654, 1.02707\n", - "elapsed time for k point: 0.0947270393371582\n", - "solve_kpoint (1.31613,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 21 iterations.\n", - "zevenfreqs:, 14, 1.31613, 0, 0, 1.31613, 0.585218, 0.779817, 0.996625, 1.06601\n", - "elapsed time for k point: 0.07414102554321289\n", - "solve_kpoint (1.40968,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 27 iterations.\n", - "zevenfreqs:, 15, 1.40968, 0, 0, 1.40968, 0.606748, 0.797154, 1.01513, 1.10007\n", - "elapsed time for k point: 0.0921022891998291\n", - "solve_kpoint (1.50323,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 9 iterations.\n", - "zevenfreqs:, 16, 1.50323, 0, 0, 1.50323, 0.628553, 0.814404, 1.03214, 1.13108\n", - "elapsed time for k point: 0.03790736198425293\n", - "solve_kpoint (1.59677,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 16 iterations.\n", - "zevenfreqs:, 17, 1.59677, 0, 0, 1.59677, 0.650733, 0.831977, 1.04887, 1.1553\n", - "elapsed time for k point: 0.058902740478515625\n", - "solve_kpoint (1.69032,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 9 iterations.\n", - "zevenfreqs:, 18, 1.69032, 0, 0, 1.69032, 0.673215, 0.849856, 1.06533, 1.17991\n", - "elapsed time for k point: 0.03793978691101074\n", - "solve_kpoint (1.78387,0,0):\n", - "Solving for bands 1 to 4...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished solving for bands 1 to 4 after 9 iterations.\n", - "zevenfreqs:, 19, 1.78387, 0, 0, 1.78387, 0.695994, 0.868015, 1.08149, 1.20116\n", - "elapsed time for k point: 0.03778195381164551\n", - "solve_kpoint (1.87742,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 18 iterations.\n", - "zevenfreqs:, 20, 1.87742, 0, 0, 1.87742, 0.719015, 0.886533, 1.09779, 1.22178\n", - "elapsed time for k point: 0.06503462791442871\n", - "solve_kpoint (1.97097,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 11 iterations.\n", - "zevenfreqs:, 21, 1.97097, 0, 0, 1.97097, 0.742267, 0.905407, 1.11415, 1.24178\n", - "elapsed time for k point: 0.0438084602355957\n", - "solve_kpoint (2.06452,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 10 iterations.\n", - "zevenfreqs:, 22, 2.06452, 0, 0, 2.06452, 0.765706, 0.924584, 1.13069, 1.26091\n", - "elapsed time for k point: 0.04090118408203125\n", - "solve_kpoint (2.15806,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 17 iterations.\n", - "zevenfreqs:, 23, 2.15806, 0, 0, 2.15806, 0.789353, 0.94412, 1.14741, 1.2798\n", - "elapsed time for k point: 0.06199812889099121\n", - "solve_kpoint (2.25161,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 7 iterations.\n", - "zevenfreqs:, 24, 2.25161, 0, 0, 2.25161, 0.813139, 0.963935, 1.16438, 1.29833\n", - "elapsed time for k point: 0.032053232192993164\n", - "solve_kpoint (2.34516,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 7 iterations.\n", - "zevenfreqs:, 25, 2.34516, 0, 0, 2.34516, 0.837112, 0.984089, 1.1816, 1.3168\n", - "elapsed time for k point: 0.03189682960510254\n", - "solve_kpoint (2.43871,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 8 iterations.\n", - "zevenfreqs:, 26, 2.43871, 0, 0, 2.43871, 0.861195, 1.0045, 1.19909, 1.33515\n", - "elapsed time for k point: 0.03550076484680176\n", - "solve_kpoint (2.53226,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 7 iterations.\n", - "zevenfreqs:, 27, 2.53226, 0, 0, 2.53226, 0.885443, 1.02522, 1.21684, 1.35354\n", - "elapsed time for k point: 0.03366875648498535\n", - "solve_kpoint (2.62581,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 9 iterations.\n", - "zevenfreqs:, 28, 2.62581, 0, 0, 2.62581, 0.909779, 1.04617, 1.23486, 1.37188\n", - "elapsed time for k point: 0.0401301383972168\n", - "solve_kpoint (2.71935,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 10 iterations.\n", - "zevenfreqs:, 29, 2.71935, 0, 0, 2.71935, 0.934266, 1.0674, 1.25317, 1.39037\n", - "elapsed time for k point: 0.04337024688720703\n", - "solve_kpoint (2.8129,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 7 iterations.\n", - "zevenfreqs:, 30, 2.8129, 0, 0, 2.8129, 0.958827, 1.08885, 1.27173, 1.40891\n", - "elapsed time for k point: 0.033522605895996094\n", - "solve_kpoint (2.90645,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 10 iterations.\n", - "zevenfreqs:, 31, 2.90645, 0, 0, 2.90645, 0.983507, 1.11053, 1.29054, 1.4276\n", - "elapsed time for k point: 0.043294668197631836\n", - "solve_kpoint (3,0,0):\n", - "Solving for bands 1 to 4...\n", - "Finished solving for bands 1 to 4 after 9 iterations.\n", - "zevenfreqs:, 32, 3, 0, 0, 3, 1.00827, 1.13242, 1.30961, 1.44638\n", - "elapsed time for k point: 0.040067195892333984\n", - "Band 1 range: 0.08431531396205931 at Vector3<0.1, 0.0, 0.0> to 1.0082685084600098 at Vector3<3.0, 0.0, 0.0>\n", - "Band 2 range: 0.3022245145119915 at Vector3<0.1, 0.0, 0.0> to 1.1324172769346308 at Vector3<3.0, 0.0, 0.0>\n", - "Band 3 range: 0.39608095095596735 at Vector3<0.1, 0.0, 0.0> to 1.3096139787411885 at Vector3<3.0, 0.0, 0.0>\n", - "Band 4 range: 0.42372109074250547 at Vector3<0.1, 0.0, 0.0> to 1.446377218582904 at Vector3<3.0, 0.0, 0.0>\n", - "total elapsed time for run: 2.4302186965942383\n", - "done\n" - ] - } - ], - "source": [ - "ms.run_te(mpb.output_at_kpoint(mp.Vector3(k_1p55um[0],0,0), mpb.fix_hfield_phase,\n", - " get_hfields))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now the `ms` object has the right mode loaded into memory. We can access it : " + "There are again many functions to extract the fields from your simulation, see https://mpb.readthedocs.io/en/latest/Python_User_Interface/#field-manipulation." ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -817,9 +335,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -829,11 +347,8 @@ } ], "source": [ - "# Get the E or H-field of the i'th band with ms.get_hfield(i),\n", - "# and keep only the j'th component with [...,0,j]\n", - "f = ms.get_hfield(1)[..., 0, 2] # x-component of field\n", - "\n", - "# Field manipulation object (can recompute with different resolution and other utilities)\n", + "# Get just the z component of the efields\n", + "f = ms.get_efield(1, bloch_phase=False)[..., 0, 1] # x-component of field\n", "md = mpb.MPBData(rectify=True, resolution=64)\n", "f_converted = md.convert(f)\n", "n = np.sqrt(ms.get_epsilon())\n", @@ -841,12 +356,11 @@ "\n", "fig, ax = plt.subplots(figsize=(7, 5))\n", "\n", + "#cbar = fig.colorbar(pos, ax=ax)\n", + "#cbar.set_label('$|H_z|^2$')\n", "ax.imshow(n.T, cmap='binary', alpha=0.8, extent=[-sc_y/2,sc_y/2,-sc_z/2,sc_z/2])\n", - "pos = ax.imshow(np.real(f_converted).T, interpolation='none', cmap='RdBu', alpha=0.5, extent=[-sc_y/2,sc_y/2,-sc_z/2,sc_z/2])\n", - "cbar = fig.colorbar(pos, ax=ax)\n", - "cbar.set_label('$|H_z|^2$')\n", + "ax.imshow(np.real(f_converted).T, interpolation='none', cmap='RdBu', alpha=0.5, extent=[-sc_y/2,sc_y/2,-sc_z/2,sc_z/2])\n", "#ax.axis('off')\n", - "\n", "ax.set_xlabel('y ($\\mu$m)', fontsize=16)\n", "ax.set_ylabel('z ($\\mu$m)', fontsize=16)\n", "\n", @@ -855,11 +369,11 @@ ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": {}, - "source": [ - "There are many other ways to do this involving saving fields to files as the first solve happens. MPB's documentation and examples can help you." - ] + "outputs": [], + "source": [] } ], "metadata": { diff --git a/test.gds b/test.gds deleted file mode 100644 index 821ee270a235db7b94389176238bdac34a1ce450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1640 zcmaLXSx8i26u|N0otZo1H0oGtDJBKklT;KTfmANgN)||^K?{}iP(DNtrVl|xVu3}4 zWvkjlL|_YTw4ntN1(gvNVbY>yQCVazGwSL8IcfGVUAX*)JNJCwch5QBC$?DDN=c5e z+-+h>qWEQ|*du?7$FdhM$P$TjxMpXTr!TsH=KHLi>r<>pyX}otL{*#OV>S zqb!LKJK7R)H2WPQ-aD$D^YJ$B#hds9uc`hTjTdn_p2aGx#%8Qk?MlINT#Kc68aHDr z&R6XI)7$KwaIReL6jM1I8$_zY|DD!#!Zs=dj$9amyL9>jEfEaK@<4a~(Ftixht zKF<=>V4{e-3wPiHynt2s7B{K(`H^w@W|N3Uti(bsU3eagFo^Vna~@{k0i1yJgs?7GD(iWVMR*slAZu~;A#>PSn1|*&nA?7Y zbfepRXA|b)S=^7j?|zC4sjvBe9GZHxA@Tjx*VBN!=LujIeKH**(bSthjy!>;e;B8a zb$cyj953$$U*bAEj1_49zky@0mA)c=ln?hH?+0>l1%23$C3qE&;TB}y^iIN;^zkd~ z#C;+@*4>khlj;9%%s}$%qrTm%aXr$PzHRIq^5xr!+i)MI;!*Y+dGXa^8Jc}afBNd! zryr61*?9ynq1nfw{p^gTBp%ZHcfU)T-@#g@k#E~by#n0k8g%HnQNqNB#{W`0JkRjF zX8xh)7&bmJLG@cExuQp-R+H-jk?4Anq+->MT9MHIp?Jz@*6$6SS7J}JI2k=LbQxEi z`I>=pUg4|l{6Pn2{Sy@zK1vhl#~Va&9^uHS_;68X%24N+Uyk;Fq7uSK#coyoNu7